星期日, 二月 14, 2010

使用clonezilla进行linux系统的物理机到虚拟机的P2V迁移


写出来还是挺简单的,解决问题的过程还是挺辛苦的,主要是google一些资料,还要甄别出部分资料的误导。


问题的来源:


10号上午,偶打算用ghost备份linux系统,在机房进行实际操作的时候,发现ghost(版本11)提示系统内有LVM,它可以备份,但是可能恢复的时候会有问题,就做了备份,但没敢做恢复试验。回来问专家,并google一些资料,发现大多数人都是说不行的,偶直接放弃恢复的想法。google的时候,发现了clonezilla真么个开源东东。


10号下午,偶和丁丁去机房做测试,用clonezilla还算顺利,成功备份出来,直接傻大胆的测试了一下,也成功了。由于ibm的developworks说可以进行p2v试验,丁丁兴趣就比较大了。


11号,偶在机房,把6台linux机器做了clonezilla的镜像,把1台win2008机器做了ghost镜像。下午在丁丁的虚拟环境中进行恢复试验,到下班的时候接近尾声,后来丁丁给我短信,启动失败。


12号,上午查资料,晚上也抽空google一下。


13号,牛年最后一天了,休息。


14号上午,虎年第一天就要值班,闲来无事,继续恢复linux系统的实验,综合google出来的方法基本上直接成功。


问题点:引导时,kernel panic,找不到硬盘,找不到vg,找不到lv等等。但是如果用引导光盘进去linux rescue发现一切都是好的,lv/pv/vg都可以看到,所以估计还是引导过程出的问题,事实上也仅仅是需要重新编译一下initrd,让它具有vmware环境里硬盘的驱动就可以了。vmware缺省的scsi硬盘是lsilogic型号的。


环境说明:


物理机:DELL R710, Asianux3sp2-64bit


虚拟机:DELL R710, Vmware Esx4(vSphere)


所用软件版本:clonezilla-live-1.2.3-27.iso, rhel-server-5.3-x86_64-dvd.iso


有用的资料:


http://www.ibm.com/developerworks/cn/linux/l-clonezilla/index.html


http://hi.baidu.com/%C7%E1%D2%F7%CD%F9%CA%C2/blog/item/de57aa943bb00f41d0135e07.html


http://tzahid.spaces.live.com/blog/cns!E99E74DBE0A928BC!595.entry


http://www.mondorescue.org/docs/p2v.pdf



http://cdnetworks-kr-1.dl.sourceforge.net/project/clonezilla/clonezilla_live_stable/clonezilla-live-1.2.3-27.iso


丁丁找到的克隆Linux开源资料:


1.g4l http://sourceforge.net/projects/g4l/


2.Mondorescue http://www.mondorescue.org/


3.partimage http://www.partimage.org/


4.Clonezilla http://clonezilla.org/


操作步骤:(测试成功)


1,使用clonezilla live进行备份。


可备份到移动硬盘上,或者网络上。


不管使用哪种方式,都建议将备份好的image放到网络上,便于后续的恢复工作。


记录一下,当前1.2.3版本的clonezilla还不认识R710的网卡,所以引导过程需要超时4次,每次1分钟,因为机器有4块网卡,耗时。当了后边vmware环境中,它就认识那个网卡了,启动非常快速。


2,在虚拟机中创建一个新的虚拟机。


注意硬盘不能小于物理机的硬盘。


3,启动虚拟机,并以clonezilla live光盘引导。


进入shell模式,使用fdisk对本地的硬盘进行分区,只需要创建一个分区,保存分区表。


重启虚拟机。


sudo su -


fdisk -l


fdisk /dev/sda;(创建分区)


reboot


4,再次以clonezilla live光盘引导,启动虚拟机,进行linux系统的恢复。


进行恢复。使用网络资源进行恢复,本地机器设置静态ip即可,我使用的ssh方式挂载镜像数据,非常方便。


5,恢复系统以后,调整一些参数。


如果不执行此步骤,直接启动虚机硬盘引导,会遇到panic之类的严重错误,其实就是找不到合适的引导盘。


用linux的安装光盘(随便哪个版本都可以,只要是Linux即可,版本与主机系统相同是最好)引导虚拟机启动,进入linux rescue模式。


然后执行mkinitrd命令,重建initrd即可。


如果有多余的文件系统,可以修改/etc/fstab文件进行注释,如果原来物理机里有多块本地硬盘,或者加载有iscsi/san等网络磁盘,都需要修改这个文件。


6,重启就好了。


poertoff虚机,修改虚机设置,将光驱挂载去掉,虚拟机可以不要光盘引导了,可以自行引导了。


power on之后,虚机不再报错了,系统正常了!


只需要修改自己的网络地址,所有服务已正常。


==============================================================


linux rescue


chroot /mnt/sysimage/


vi /etc/fstab


vi /etc/modprobe.conf


cp -p /boot/initrd-2.6.18-128.7AXS3.img /boot/initrd-2.6.18-128.7AXS3.img.old


mkinitrd -v -f /boot/initrd-2.6.18-128.7AXS3.img 2.6.18-128.7AXS3


内核版本可以看这里:ls -l /lib/modules/


cat /etc/modprobe.conf


alias scsi_hostadapter mptbase


alias scsi_hostadapter1 mptspi


alias scsi_hostadapter2 ata_piix


需要注释掉原来的有关scsi_hostadpter(n)之类的命令行。


vmware的虚拟硬盘是lsilogic,需要装载mpt系列驱动。


cat /etc/sysconfig/network-scripts/ifcfg-eth0


# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)


DEVICE=eth0


BOOTPROTO=none


HWADDR=00:0C:29:A3:6D:28


ONBOOT=yes


NETMASK=255.255.255.0


IPADDR=10.10.10.250


GATEWAY=10.10.10.254


TYPE=Ethernet


USERCTL=no


IPV6INIT=no


PEERDNS=yes