代码改变世界

virtualBox虚拟机到vmware虚拟机转换

2013-02-03 11:16 梁小白 阅读(...) 评论(...) 编辑 收藏

正如上篇的问题所言,测试了vmware player 还可以满足我的需求的以后,

以前在virtualbox下创建的几个虚拟机不想再重新创建了。想直接把virtualbox虚拟机转换为vmware虚拟机了事。
 
然而,大牛往往不兼容小牛,从vmware到virtualbox容易,网上有很多文档。如:
 
而且在创建virtualbox磁盘时,明显可以看到有vmdk的选项.
 
下面我们来实现virtualbox到vmware的转换:
 
这是我的virtualBox虚拟机目录:
lion@lion-SNS:~/VirtualBox VMs/Essex$ ll
总用量 1148156
drwxrwxr-x 4 lion lion       4096  2月  3 10:54 ./
drwxrwxr-x 8 lion lion       4096  2月  2 17:18 ../
-rw------- 1 lion lion      29683  2月  3 10:54 Essex.vbox
-rw------- 1 lion lion      29683  2月  2 17:19 Essex.vbox-prev
-rw------- 1 lion lion 1155567616 12月 20 16:16 Essex.vdi
drwx------ 2 lion lion       4096  2月  2 17:19 Logs/
drwx------ 2 lion lion       4096  2月  2 17:19 Snapshots/
-rw------- 1 lion lion   18919424  2月  3 10:54 SwiftDisk.vdi
-rw------- 1 lion lion    1134592  2月  3 10:54 VolumeDisk.vdi

 

使用命令qemu-img来转换磁盘格式:
 
qemu-img convert -f vdi -O vmdk Essex.vdi Essex.vmdk
 
根据磁盘大小,1G的大约1分钟可以完成:
 
lion@lion-SNS:~/VirtualBox VMs/Essex$ ll
总用量 2131104
drwxrwxr-x 4 lion lion       4096  2月  3 10:57 ./
drwxrwxr-x 8 lion lion       4096  2月  2 17:18 ../
-rw------- 1 lion lion      29683  2月  3 10:54 Essex.vbox
-rw------- 1 lion lion      29683  2月  2 17:19 Essex.vbox-prev
-rw------- 1 lion lion 1155567616 12月 20 16:16 Essex.vdi
-rw-r--r-- 1 lion lion 1061027840  2月  3 10:58 Essex.vmdk
drwx------ 2 lion lion       4096  2月  2 17:19 Logs/
drwx------ 2 lion lion       4096  2月  2 17:19 Snapshots/
-rw------- 1 lion lion   18919424  2月  3 10:54 SwiftDisk.vdi
-rw------- 1 lion lion    1134592  2月  3 10:54 VolumeDisk.vdi
 
使用vmware创建一个新的虚拟机,如果不想编辑vmware文件,最好创一个和磁盘名称相同的虚拟机(Essex):
 
创建好后,下一步我想大家也知道了,用转换过的Essex.vmdk替换vmware生成的Essex.vmdk即可.
当然,这里对我来说,因为有多块磁盘,如SwiftDisk.vdi,VolumeDisk.vdi,可能还要再转换其它磁盘,然后再另外挂载。
 
OK,完成.
下面是我启动3个虚拟机(每个都是4G内存), 宿主机的内存使用情况:
 
补充:
上面操作的前提是在virtualBox虚拟机没有创建快照的情况下,当已经创建了快照时,只转换根目录下的Essex.vdi是不行,这个状态可能只是在你第一次创建快照时的虚拟机状态。
而我要转换的虚拟机已经创建了三个快照:
在命令行下查看:
 
注意看图片中的虚拟机磁盘及快照的修改时间,很明显,最新的虚拟机状态应该是{911b7809-9730-4c01-a5f2-24866f02f8b0}.vdi 这个文件,
然而,直接转换{911b7809-9730-4c01-a5f2-24866f02f8b0}.vdi这个文件是不行的.提示没有权限:
lion@lion-SNS:~/VirtualBox VMs/Essex/Snapshots$ sudo qemu-img convert -f vdi -O vmdk \{911b7809-9730-4c01-a5f2-24866f02f8b0\}.vdi Essex.vmdk
[sudo] password for lion: 
qemu-img: Could not open '{911b7809-9730-4c01-a5f2-24866f02f8b0}.vdi': Operation not permitted
qemu-img: Could not open '{911b7809-9730-4c01-a5f2-24866f02f8b0}.vdi'

当然不是真的没有权限,而是virtualBox的快照是增量快照,这个快照需要依赖别的快照以及Essex.vdi文件。

下面我们的工作是将多个快照合并为一个vdi文件.有两种方法:

1. 删除中间快照。这个操作肯定不太好,万一以后要用呢。

2. 利用VirtualBox的复制虚拟机功能,复制最新的快照状态为一个新的虚拟机:

注意选择完全复制哦!

复制出来一个Essex 副本:

root@lion-SNS:/home/lion/VirtualBox VMs/Essex 副本# ll
总用量 6866104
drwx------ 2 lion lion       4096  2月  3 15:00 ./
drwxrwxr-x 9 lion lion       4096  2月  3 14:56 ../
-rw------- 1 lion lion   18919424  2月  3 15:00 Essex 副本-disk1.vdi
-rw------- 1 lion lion    1134592  2月  3 15:00 Essex 副本-disk2.vdi
-rw------- 1 lion lion       7726  2月  3 15:00 Essex 副本.vbox
-rw------- 1 lion lion 7010816000  2月  3 15:00 Essex 副本.vdi

下面的操作就一样了,转换此副本并替换我们用vmware创建的虚拟机文件:

qemu-img convert -f vdi -O vmdk Essex\ 副本.vdi Essex.vmdk

至于virtualbox其它挂载的磁盘文件,可以单独转换后,移动到vmware目录,再通过vmware挂载即可.

qemu-img convert -f vdi -O vmdk SwiftDisk.vdi SwiftDisk.vmdk
qemu-img convert -f vdi -O vmdk VolumeDisk.vdi VolumeDisk.vmdk
mv *.vmdk ~/vmware/Essex/
chown lion.lion *.vmdk

ok,下面启动vmware虚拟机,大功告成,剩下的有可能有网卡数量,光驱文件等不致可以通过vmware 管理器来配置。