如果是在Linux上使用虛擬化技術(shù)的話,就會有基于Xen Hypervisor部署一個系統(tǒng)的機會。因為基于內(nèi)核的虛擬機(KVM:Kernel-Based Virtual Machine)已經(jīng)逐漸成為Linux上面虛擬化的主流,用戶也有可能會希望把基于Linux的虛擬化工作環(huán)境從Xen轉(zhuǎn)換到KVM。本篇文章給出了把基于Xen的虛擬機遷移到KVM上的六步方針。
到目前為止,還沒有成熟的管理產(chǎn)品可以自動地把Xen虛擬機轉(zhuǎn)換為KVM。但是現(xiàn)在卻有一項技術(shù)解決方案可以輔助把Xen上面安裝的虛擬機轉(zhuǎn)換到KVM上。下面的幾個步驟將會介紹針對Linux虛擬機需要如何實施。我盡可能從不基于任何發(fā)行版的高度來描述這個流程,但是需要注意的是對于特定步驟,所有的工具是和Linux發(fā)行版相關(guān)的。
1. 確保在宿主工作環(huán)境(即可以看做是Dom0工作環(huán)境)中安裝了parted和kpartx實用程序。Parted可以輔助分區(qū);kpartx完成掛載分區(qū),這個分區(qū)在虛擬機內(nèi)定義。
2. 啟動要遷移的虛擬機,安裝GRUB引導裝載程序。默認情況下,Xen虛擬機內(nèi)沒有安裝引導裝載程序,因為該程序由Xen虛擬工作環(huán)境自身提供。因此需要在遷移之前確保該程序已經(jīng)安裝。
3. 關(guān)閉Xen虛擬機,把整個虛擬機復制到一個鏡像文件。開始之前需要確保系統(tǒng)有足夠的磁盤空間,這里需要很多GB的空間;同時確保使用的是正確的流程。例如,Xen后端虛擬存儲可以已經(jīng)是一個鏡像文件,但是也可以是使用設備安裝的,如一個分區(qū)或者一個邏輯卷管理器(LVM:Logic Volume Manager)卷作為一個后端存儲設備。例如,如果使用“/dev/images/xenvm1” LVM邏輯卷作為Xen后端存儲設備的話,可以使用下面的這個命令寫入鏡像文件:
dd if=/dev/images/xevvm1 f=xen.img bs=1M
注意:如果在虛擬機內(nèi)有復雜的分區(qū),就需要為每一個分區(qū)創(chuàng)建一個鏡像文件。該流程假定虛擬機內(nèi)的一切信息都位于一個大根分區(qū)中。
4. 為KVM虛擬機創(chuàng)建一個新鏡像文件。該鏡像文件應該和為要遷移的虛擬機所創(chuàng)建的鏡像文件一樣大小。在下面的例子中,我將會假定使用的是一個10GB的Xen鏡像;在實際部署中注意把這個值調(diào)整為虛擬機實際占用的空間大?。?/p>
dd if=/dev/zero f=kvm.img bs=1M count=10240
5. 在上述步驟所創(chuàng)建的KVM鏡像文件中創(chuàng)建分區(qū)。創(chuàng)建分區(qū)的唯一方法就是使用parted命令行實用程序。下面這幾個步驟將會創(chuàng)建一個9GB的根分區(qū)和一個1GB的交換分區(qū)。需要在根特權(quán)下才可以執(zhí)行這幾個命令:
parted kvm.img mklabel msdos
parted kvm.img mkpart primary ext2 0 9000
parted kvm.img mkpart primary linux-swap 9000 10000
parted kvm.img set 1 boot on
6. 把Xen鏡像文件拷貝到KVM鏡像文件中。以根權(quán)限執(zhí)行下述命令:
following commands:
modprobe dm-mod
losetup /dev/loop kvm.img
kpartx -a /dev/loop0
dd if=xen.img f=/dev/mapper/loop0p1 bs=1M
fsck.ext3 -f /dev/mapper/loop0p1
到此為止,就已經(jīng)把原來鏡像中的所有文件拷貝到了新鏡像中。接下來需要進行測試,使用下面的這個命令:
qemu kvm.img
小結(jié)
目前,還沒有工具可以很好地完成從Xen虛擬機到KVM虛擬機的轉(zhuǎn)換。但是如果虛擬機使用Linux的話,可以使用命令行實用程序完成該轉(zhuǎn)換。本文雖然介紹了如何實施,但是也存在一些局限性,如主要問題是該方法僅僅適用于Linux虛擬機。鑒于當前Linux工作環(huán)境中到KVM虛擬化的轉(zhuǎn)換,更多適用工具的問世只是一個時間上的問題了。