遷移 KVM/VMware 虛擬機或物理機到 Xen PV 虛擬機
使用 KVM, VMware, XenServer/Xen HVM 這些全虛擬技術的虛擬機之間相互轉化比較容易,有的轉化一下虛擬機鏡像文件的格式就可以了,有的可以借助一些免費的自動轉化工具如 VMware vCenter Converter 等。今天要說的是全虛擬機(HVM)或物理機到半虛擬機(PV)的轉化,稍微麻煩點。
HVM 到 PV 的轉化思路是這樣的:
1、把整個系統(tǒng)打包后拷貝到 Xen 服務器;
2、在 Xen 服務器上新建一個磁盤文件,把原系統(tǒng)解壓到這個 “磁盤” 里;
3、掛載磁盤,并利用 chroot 更換原系統(tǒng)的內核為支持 Xen 的內核;
4、更改原系統(tǒng)的幾個必要文件。
下面的操作是遷移一臺 Ubuntu 12.04 物理服務器到 Xen PV 虛擬機,其方法也適用于其他的版本的 Linux.
首先登錄到要轉化的系統(tǒng)上,用 tar 把整個根文件系統(tǒng)打包,***關閉系統(tǒng)后掛載硬盤到另一臺機器上離線打包,如果一定要給一個正在運行的 Linux 系統(tǒng)在線打包的話務必停止一切服務后(如 Apach, MySQL 等)再執(zhí)行打包,盡量減少打包過程中造成的數(shù)據(jù)不一致。給一個在線系統(tǒng)打包需要除去一些系統(tǒng)運行時目錄如 /proc, /sys 等:
# tar -cvpzf test.tar.gz --exclude=/test.tar.gz --exclude=/sys --exclude=/dev --exclude=/proc /
把打包好的壓縮包傳到 Xen 母機上,然后在母機上創(chuàng)建一個磁盤鏡像文件、格式化、掛載這個磁盤鏡像到 /mnt,***把壓縮包的內容解壓(細節(jié)可以參考 如何快速創(chuàng)建 Xen 虛擬機鏡像):
# dd if=/dev/zero of=test.img bs=1 count=1 seek=10G # mkfs.ext3 test.img # mount -o loop test.img /mnt # tar -zxSf test.tar.gz -C /mnt/
創(chuàng)建一些系統(tǒng)運行時需要的目錄,然后 chroot:
# mkdir /mnt/proc # mkdir /mnt/sys # mkdir /mnt/dev # mkdir /mnt/dev/pts # mount -t proc proc /mnt/proc/ # mount -t sysfs sys /mnt/sys/ # mount -o bind /dev /mnt/dev/ # mount -o bind /dev/pts /mnt/dev/pts/ # chroot /mnt
特別的 Xen 需要特別的內核,所以我們需要給原 Linux 系統(tǒng)換內核,chroot 后更新系統(tǒng)并安裝 linux-virtual 內核,當然,不要忘了更新 grub:
# apt-get update & apt-get upgrade # apt-get install linux-virtual # apt-get purge grub2 grub-pc # apt-get install grub # update-grub
換了內核后還需要更新和配置幾個系統(tǒng)文件,menu.lst, fstab, hvc0.conf,以便新內核能在 Xen 虛擬環(huán)境里正常啟動:
# vi /boot/grub/menu.lst ... # kopt=root=UUID=4da51cdc-c6e9-42a2-b3c8-6056f334a124 ro kopt=root=/dev/xvda console=hvc0 ro quiet ... # update-grub
# vi /mnt/etc/fstab proc /proc proc defaults 0 0 /dev/xvda / ext3 noatime,errors=remount-ro 0 1 /dev/xvdb none swap sw 0 0
# vi /etc/init/hvc0.conf # hvc0 - getty # # This service maintains a getty on hvc0 from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[2345] stop on runlevel [!2345] respawn exec /sbin/getty -8 38400 hvc0
基本上搞定了,退出 chroot 后記得按逆順序卸載剛才掛載的目錄:
# umount /mnt/proc/ # umount /mnt/sys/ # umount /mnt/dev/pts/ # umount /mnt/dev/ # umount /mnt/
創(chuàng)建一個 Xen 虛擬機配置文件,用 xm create 啟動虛擬機:
# vi /etc/xen/test bootloader = "/usr/bin/pygrub" root = "/dev/xvda ro" name = "test" vcpus = "1" memory = "2048" disk = [ "file:/root/test.img,xvda,w","file:/root/test.swp,xvdb,w" ] vif = [ "bridge=xenbr0" ] # xm create test