Feb 23

[原]将Vmware Hardware Version降级 阴

linuxing , 18:22 , 网络服务 » 虚拟机 , 评论(1) , 引用(0) , 阅读(19298) , Via 本站原创 | |
    原来有台服务器Host系统用的是红旗Asianux 3.0 for x86_64,运行Vmware Server 2.0 release提供虚拟环境,用于软件的测试。使用时间长了,总觉得使用上很不习惯,Vmware Server 2.0只提供基于浏览器的Web管理操作,调整配置很不方便,远程控制也麻烦。(我没找到2.0支持像GSX Server,用Console连接902端口的方式,其官方网站上说是不提供的)。因机器不多,Host系统又不能改动。没有办法,我只能降回到Vmware Sever 1.0.x上使用。
    升级容易,降级就麻烦多了。原来2.0上的虚拟机环境,创建时默认就是用Vmware Hardware Version 7的版本(新建虚拟机时可以选择),而1.x只支持到Hardware Version 5。我不可能放弃原来大量的虚拟机,重建的工作量太大了。为此,必须想办法把HW Version降级。可惜,官方似乎也没有提供类似的工具。不过,经过测试,成功了,而且发现方法还是挺多的。

一、用nc拷贝数据
这是我第一个想到的方法。因为我以前使用这方法来从Vmware迁移系统到OpenVZ上面的。
操作很简单:
1、保持原来的Vmware 2.0,然后在启动创建一个新的虚拟机环境,创建时,选择“兼容类型”为Vmware Hardware Version 4,磁盘大小与需要迁移的虚拟机磁盘一样;
2、分别用系统安装光盘引导两台虚拟机,并用linux rescue进入拯救模式,并激活网络,用host-only等模式均可;
3、进入拯救模式后,在新的虚拟机上运行:

# nc -l -p 1234 | dd of=/dev/sda

4、旧的虚拟机上则运行:

# dd if=/dev/sda | nc 172.16.84.130 1234

其中,172.16.84.130是新虚拟机的IP地址。这样,就可以把旧虚拟机磁盘上的数据完全拷贝到新的虚拟机磁盘中。最后,用Vmware Server 1.0.8打开该虚拟机配置文件,改动一些参数,如:操作系统类型、网卡模拟的网络连接模式等,即可正常启动该虚拟机,数据也得到完整的保留。

二、修改HW Version方式
上述的方法简单,但相当耗费时间。实际上,也不需要这么麻烦。
我们都知道,vmware创建的虚拟硬盘实际上就是由一堆文件构成的,以.vmdk结尾。例如:
引用
# ll *.vmdk
-rwxrwxrwx 1 root root 2147221504 Feb 23 17:15 hatest1-f001.vmdk
-rwxrwxrwx 1 root root 2147221504 Feb 23 17:15 hatest1-f002.vmdk
-rwxrwxrwx 1 root root 2147221504 Feb 23 17:15 hatest1-f003.vmdk
-rwxrwxrwx 1 root root 2147221504 Feb 23 17:15 hatest1-f004.vmdk
-rwxrwxrwx 1 root root    1048576 Dec 20  2007 hatest1-f005.vmdk
-rwxrwxrwx 1 root root        523 Feb 23 17:12 hatest1.vmdk

查看这些文件的内容,不难发现其中就定义了HW Version的版本。这样,就提供了一种快速实现2.0到1.x虚拟机迁移的方法。

如果我们直接把这些从Vmware Server 2.0上磁盘文件(HW Version 7)加入到Vmware Server 1.0.8的虚拟机上,启动时,会报错误的:
点击在新窗口中浏览此图片
针对创建磁盘文件时的方式不同,修改方式有:

1、对于由分块的文件组成的磁盘
首先,把Vmware Server 2.0删掉,然后安装Vmware Server 1.0.8;
然后,按照实际需要,创建一个新的虚拟机环境,并加入一个新的硬盘(仅临时使用);
接着,进入Vmware Server后台Host环境中,把希望迁移的磁盘文件拷贝到新的虚拟机目录下;
对于,由分块的文件组成的磁盘,修改第一个.vmdk文件,并删掉创建时建立的临时硬盘文件:

# sed -i 's/ddb.virtualHWVersion = "7"/ddb.virtualHWVersion = "4"/' hatest1.vmdk

最后,在Vmware Server Console环境中,编辑该虚拟机,去掉原来的临时硬盘文件,添加新的(已经存在的)磁盘,选择上述的文件;修改其余不兼容的配置信息,启动新虚拟机即可。

2、对于由单个文件组成的磁盘
由于,建立虚拟机的硬件时,有多种模式:可以在创建时预先分配(或按需分配)空间、把大文件分割为多个小文件存放,或不分割而用一个大的文件存放。所以,这就存在一个问题。如果我们使用的是单个大文件存放的方式,例如:
引用
# ll *.vmdk
-rw------- 1 root root 2452619264 Feb 23 13:22 emos1.4.vmdk

这个文件就是使用单个文件,并用按需分配空间的方式创建的。虽然可以用vi或sed按照上面的方式来修改HW Version,但vi打开会非常慢,sed修改也需要一段不短的时间。没有简单方法吗?当然有啦!HW Version仅放在该文件的前面一部分,我们只要修改这部分就可以了。
首先,用dd拿到开头的一部分文件:
引用
# dd if=./emos1.4.vmdk of=./tmp.vmdk bs=1024k count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.04213 seconds, 24.9 MB/s

然后,修改这个临时文件:

# sed -i 's/\(ddb.virtualHWVersion = "\)7/\14/' tmp.vmdk

接着,用这个临时文件和原来的文件合并为一个新的文件:
引用
# dd if=emos1.4.vmdk of=./tmp.vmdk bs=1024k skip=1 seek=1
2338+0 records in
2338+0 records out
2451570688 bytes (2.5 GB) copied, 60.314 seconds, 40.6 MB/s
# ll *.vmdk
-rw------- 1 root root 2452619264 Feb 23 13:22 emos1.4.vmdk
-rw-r--r-- 1 root root 2452619264 Feb 23 18:15 tmp.vmdk

最后,在Vmware Server Console环境中,加入这个临时文件tmp.vmdk,修改虚拟机中不兼容的参数,启动虚拟机,可以正常启动了吧。
确认没问题后,删掉旧的磁盘文件即可:

# rm emos1.4.vmdk
# mv tmp.vmdk emos1.4.vmdk

把临时文件改名后,记得修改虚拟机配置文件哦。

◎ 无论使用上述方法二的那种方式,肯定都会比方法一快很多,操作也十分简单,注意备份好原有数据即可。O(∩_∩)O哈哈~
Tags:
Chung
2011/11/03 14:29
Vmware Server 2 可以用vSphere Client 去連接就是VMWARE ESX用的那個CLIENT
linuxing 回复于 2011/11/15 10:26
好的。但VMware Server 已经好久没新版本了。现都转到ESXi上了。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]