遷移 KVM/VMware 虛擬機(jī)或物理機(jī)到 Xen PV 虛擬機(jī)
使用 KVM, VMware, XenServer/Xen HVM 這些全虛擬技術(shù)的虛擬機(jī)之間相互轉(zhuǎn)化比較容易,有的轉(zhuǎn)化一下虛擬機(jī)鏡像文件的格式就可以了,有的可以借助一些免費(fèi)的自動(dòng)轉(zhuǎn)化工具如 VMware vCenter Converter 等。今天要說(shuō)的是全虛擬機(jī)(HVM)或物理機(jī)到半虛擬機(jī)(PV)的轉(zhuǎn)化,稍微麻煩點(diǎn)。
HVM 到 PV 的轉(zhuǎn)化思路是這樣的:
1、把整個(gè)系統(tǒng)打包后拷貝到 Xen 服務(wù)器;
2、在 Xen 服務(wù)器上新建一個(gè)磁盤文件,把原系統(tǒng)解壓到這個(gè) “磁盤” 里;
3、掛載磁盤,并利用 chroot 更換原系統(tǒng)的內(nèi)核為支持 Xen 的內(nèi)核;
4、更改原系統(tǒng)的幾個(gè)必要文件。
下面的操作是遷移一臺(tái) Ubuntu 12.04 物理服務(wù)器到 Xen PV 虛擬機(jī),其方法也適用于其他的版本的 Linux.
首先登錄到要轉(zhuǎn)化的系統(tǒng)上,用 tar 把整個(gè)根文件系統(tǒng)打包,***關(guān)閉系統(tǒng)后掛載硬盤到另一臺(tái)機(jī)器上離線打包,如果一定要給一個(gè)正在運(yùn)行的 Linux 系統(tǒng)在線打包的話務(wù)必停止一切服務(wù)后(如 Apach, MySQL 等)再執(zhí)行打包,盡量減少打包過程中造成的數(shù)據(jù)不一致。給一個(gè)在線系統(tǒng)打包需要除去一些系統(tǒng)運(yùn)行時(shí)目錄如 /proc, /sys 等:
# tar -cvpzf test.tar.gz --exclude=/test.tar.gz --exclude=/sys --exclude=/dev --exclude=/proc /
把打包好的壓縮包傳到 Xen 母機(jī)上,然后在母機(jī)上創(chuàng)建一個(gè)磁盤鏡像文件、格式化、掛載這個(gè)磁盤鏡像到 /mnt,***把壓縮包的內(nèi)容解壓(細(xì)節(jié)可以參考 如何快速創(chuàng)建 Xen 虛擬機(jī)鏡像):
# 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)運(yùn)行時(shí)需要的目錄,然后 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 需要特別的內(nèi)核,所以我們需要給原 Linux 系統(tǒng)換內(nèi)核,chroot 后更新系統(tǒng)并安裝 linux-virtual 內(nèi)核,當(dāng)然,不要忘了更新 grub:
# apt-get update & apt-get upgrade # apt-get install linux-virtual # apt-get purge grub2 grub-pc # apt-get install grub # update-grub
換了內(nèi)核后還需要更新和配置幾個(gè)系統(tǒng)文件,menu.lst, fstab, hvc0.conf,以便新內(nèi)核能在 Xen 虛擬環(huán)境里正常啟動(dòng):
# 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)建一個(gè) Xen 虛擬機(jī)配置文件,用 xm create 啟動(dòng)虛擬機(jī):
# 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