目前 x86 平臺上最流行的虛擬化軟體是 VMware 公司的系列產品,而基於開源技術的 KVM 虛擬化軟體也得到了廣泛的應用。本文是虛擬化遷移技術系列文章的第三部分,詳細介紹瞭如何使用 virt-v2v 開源工具或者手動方法遷移建立在 VMware 軟體上的 Window 及 Linux 虛擬機器到基於 KVM 的虛擬機器,並且從功能上比較了虛擬機器系統遷移前後的變化,最後總結了 VMware 虛擬機器到 KVM 遷移的不足和注意事項。

前言

隨著虛擬化技術的不斷髮展,虛擬機器的應用也越來越廣泛。日常應用中可能出現資源不足,系統管理調整或者系統備份等原因,希望將某一虛擬機器從原來物理主機遷移到另一個物理主機上,即 V2V(Virtual-to-Virtual)遷移。虛擬機器的遷移需要物理主機上 VMM(Virtual Machine Monitor)的支援。相同型別 VMM 之間,使用相同的 API 介面,通常具有強大的遷移能力。例如本系列第二篇文章介紹的 KVM 虛擬機器之間的遷移,它支援三種遷移方式:離線遷移、線上共享儲存遷移和線上塊遷移。而不同的 VMM 之間,由於虛擬化實現技術的不同、開發廠商的不同、API 介面的不同,使虛擬機器遷移困難重重。本文分別介紹如何靜態遷移 VMware ESX/ESXi、VMware Workstation 及 VMware Player 上的虛擬機器到 KVM 主機。


VMware 虛擬機器遷移到 KVM 的方式

虛擬機器 V2V(Virtual-to-Virtual)遷移是在虛擬機器之間移動作業系統和資料, 照顧主機級別的差異和處理不同的虛擬硬體。V2V 的遷移方法有兩種,靜態遷移和線上遷移。靜態遷移(offline migration)也叫做常規遷移、離線遷移。在遷移之前將虛擬機器暫停,同時拷貝虛擬機器映象和狀態到目的主機。相比較於線上遷移(online migration),其缺點是靜態遷移方式的過程需要顯式的停止虛擬機器的執行,而線上遷移的過程僅有非常短暫的停機時間,保證遷移過程中虛擬機器服務的持續可用;優點是相容性強,不需要 VMM 的有統一的 API 介面,可以藉助第三方工具輔助遷移。由於目前 VMM 的開發沒有統一的標準,不同的虛擬化廠商,尤其是閉源的商業廠商開發的 VMM 各成一套,靜態遷移是解決不同型別虛擬機器之間遷移的有效辦法。本文采用 V2V 靜態遷移的方法實現 VMware 虛擬機器到 KVM 的遷移,同時介紹開源遷移工具 virt-v2v 的使用。

VMware 虛擬化產品及虛擬機器檔案

VMware 產品簡介

VMware 是全球虛擬化解決方案的領導廠商,提供了一套虛擬機器解決方案,按產品特點可分為如下四類。  

  • VMware ESX/ESXi:這個產品不需要安裝任何作業系統,它本身就是一個用來管理硬體資源的特殊的作業系統,所有的虛擬機器都安裝在它的上面。ESX Server 帶有遠端 web 管理和客戶端管理功能。
  • VMware Server、Workstation 和 Fusion:與 ESX 相比,這三個產品都是要安裝在作業系統上的。Server 和 Workstation 執行在 Windows 和 Linux 上,Fusion 執行在蘋果的 Mac OS 上。
  • VMware VMotion:是 VMware 開發出的一項獨特技術,它將伺服器、儲存和網路裝置完全虛擬化,使得正在執行的整個虛擬機器能夠在瞬間從一臺伺服器移到另一臺伺服器上。
  • Virtual Center、Importer、Convertor、P2V、Player:這些是為了配合 VMware 虛擬引擎,主要是為了配合 ESX 開發的管理軟體和工具,這些工具中很多是免費的。

本文主要遷移建立在 VMware ESX/ESXi、VMware Workstation 和 VMware Player 上的虛擬機器到 KVM 主機上,遷移後的虛擬機器可以被開源的 libvirt 軟體管理。

VMware 虛擬機器檔案介紹

成功遷移虛擬機器的一個重要的驗證標準就是檔案的正確性和完整性。下圖中列出與 VMware 虛擬機器相關的檔案,但是遷移 VMware 虛擬機器到 KVM 並不需要用到所有的檔案。

圖 1. VMware 虛擬機器檔案
圖 1. VMware 虛擬機器檔案

VMware 虛擬機器的檔案主要包括 .nvram 檔案,.vmx 檔案,vmdk 檔案,.vswp 檔案,.vmss 檔案,.vmsd 檔案,.vmsn 檔案,.log 檔案,.vmxf 檔案。與遷移相關的最主要的是 .vmx 檔案和 .vmdk 檔案。

  • .vmx 檔案:包括虛擬機器所有配置資訊與硬體設定。不管你對虛擬機器的設定做了何種編輯,所有的資訊都會以文字形式儲存在這個檔案裡。如特殊硬體配置(例如 RAM 大小,網路介面資訊,硬碟驅動資訊,序列與並行資訊),高階能源與資源配置、VMware 工具選項及能源管理選項。遷移虛擬機器時,需要更改這個檔案的格式到 KVM 支援的 xml 檔案,並且重新確認檔案資訊的有效性。
  • .vmdk 檔案:包含虛擬磁碟的資訊。虛擬機器的檔案系統就建立在 .vmdk 檔案上。遷移時需要拷貝這個檔案到 KVM 主機,並且轉換成能夠被 libvirt 識別的檔案格式。

以下的虛擬機器檔案有些只在虛擬機器處於的某種狀態時出現,遷移過程中不會用到。例如當虛擬機器開啟時出現 .vswp 檔案,當虛擬機器暫停時出現 .vmss 檔案。

  • .nvram 檔案:包括虛擬機器啟動過程一部分的 Phoenix BIOS。它類似於擁有 BIOS 晶片的物理伺服器,能夠設定硬體配置選項。如果刪除的話,在虛擬機器啟動時會自動地重新建立。
  • .vswp file:這些檔案的大小等於分配給虛擬機器的記憶體大小,再減去任何記憶體預留(預設是 0)。這些檔案通常建立在虛擬機器裡,但是隻有當 ESX 主機耗盡所有實體記憶體時才使用。當虛擬機器關閉或暫停時,這些檔案將刪除。
  • .vmss 檔案:這個檔案用於虛擬機器暫停時,儲存虛擬機器的儲存內容,以便在重新開始時繼續執行。
  • .vmsd 檔案:這個檔案與快照一起使用,用於儲存元資料和其他活動在虛擬機器裡的每個快照的資訊。這個文字檔案在建立快照之前的初始大小是 0 位元組,並在每次建立或刪除快照時更新資訊。
  • .vmsn 檔案:這個檔案與快照一起使用,用於儲存虛擬機器在進行快照時的狀態。每在虛擬機器上建立一個快照就會生成一個 .vmsn 檔案,在刪除快照時,檔案自動刪除。
  • .log 檔案:這些檔案建立來用於儲存虛擬機器的日誌資訊,並常常用於故障檢查。在虛擬機器目錄裡,有大量的這樣的檔案。當前的日誌檔案通常命名為 vmware.log。
  • .vmxf 檔案:這是一個附加配置檔案,不用於 ESX,用於與 Workstation 相容的目的。這個檔案是文字格式,Workstation 用來聚合虛擬機器(VM teaming),將多個虛擬機器分配成一組,作為一個單一物件開啟或關閉、暫停或恢復它們。

virt-v2v 遷移 VMware ESX 虛擬機器

從 RHEL6(Red Hat Enterprise Linux 6)開始,RHEL 發行版中包含了 Red Hat 公司開發的 virt-v2v 工具。它是由 perl 語言編寫的指令碼,可以自動化的將建立在 Xen,KVM 和 VMware ESX 上的虛擬機器拷貝到 virt-v2v 的主機,並且自動的更改配置,使之能夠被 libvirt 進行管理。目前,virt-v2v 支援靜態遷移下列虛擬機器:RHEL4、RHEL5, RHEL6,Windows XP,Windows Vista, Windows 7, Windows Server 2003 和 Windows Server 2008。

圖 2. virt-v2v 遷移 VMware/Xen/KVM 虛擬機器示意圖
圖 2. virt-v2v 遷移 VMware/Xen/KVM 虛擬機器示意圖

本節中,將分別介紹如何使用 virt-v2v 工具遷移 Vmware ESXi 上的 RHEL 虛擬機器和 Windows 7 虛擬機器到 KVM 主機。

遷移前的環境設定

本文的 KVM 主機安裝最新的 RHEL6.1 作業系統(釋出於 2011 年 5 月 19 日)。這樣,最基本的支援 KVM 虛擬機器的軟體 qemu-kvm、libvirt、virt-manager 和 virt-v2v 工具都在發行版中安裝了。

清單 1. 支援 KVM 虛擬機器的軟體包
 [[email protected] ~]# rpm -qa qemu-kvm 
 qemu-kvm-0.12.1.2-2.160.el6.x86_64 
 [[email protected] ~]# rpm -qa libvirt 
 libvirt-0.8.7-18.el6.x86_64 
 [[email protected] ~]# rpm -qa virt-manager 
 virt-manager-0.8.6-4.el6.noarch 
 [[email protected] ~]# rpm -qa virt-v2v 
 virt-v2v-0.7.1-3.el6.x86_64
.

為了使 virt-v2v 工具能夠自動化的遷移 VMware ESX 虛擬機器,儘量減少手動干預,還需要在 KVM 主機上做一些設定。

1. 安裝支援 Windows 虛擬機器遷移的軟體。

對於 Windows 虛擬機器的遷移需要安裝 libguestfs-winsupport 包來支援 NTFS 檔案系統和 virtio-win 包來支援 Windows para-virtualized 儲存和網路裝置驅動。

清單 2. 安裝 Windows 虛擬機器遷移的支援包
 [[email protected] v2v]# rpm -ivh libguestfs-winsupport-1.0-7.el6.x86_64.rpm  \
 virtio-win-1.2.0-1.el6.noarch.rpm 
 Preparing...                ########################################### [100%] 
   1:virtio-win             ########################################### [ 50%] 
   2:libguestfs-winsupport  ########################################### [100%]

2. 建立 KVM 主機儲存域

virt-v2v 在遷移虛擬機器的過程中,需要拷貝被遷移虛擬機器到 KVM 主機預先定義的儲存池中。儲存池可以用 libvirt 工具建立。最簡單的方法就是使用 virt-manager 來建立新的儲存池。本文中建立了一個檔案目錄型別的儲存池,位置在 KVM 主機系統的 /home/images/migration 目錄。

圖 3. 使用 virt-manager 建立本地儲存域
圖 3. 使用 virt-manager 建立本地儲存域

3. 建立 KVM 主機網路介面

虛擬機器在遷移之後將連線 KVM 主機網路, 因此主機必須有一個與之相匹配的網路介面,比如說網橋。Linux 系統上有很多工具可以建立網橋,其中 RHEL6.1 發行版上的 virt-manager 已經支援建立和管理網橋。本文建立了網橋 br0,並且繫結在 eth0 的介面上,具體配置如下圖。

圖 4. 使用 virt-manager 建立網橋
圖 4. 使用 virt-manager 建立網橋

4. 建立配置檔案 virt-v2v.conf

在 virt-v2v.conf 檔案中設定 virt-v2v 遷移的規則,包括網路介面遷移後的對映,遷移的方式,儲存的位置,輸出的格式等等。這些規則也能以命令列引數的方式輸入,如 - - network,-o,-os,-of 等。

virt-v2v 遷移 VMware 虛擬機器的步驟

在 KVM 主機上完成上節的準備工作後,可以正式開始遷移 VMware ESX 上的虛擬機器了。下面是遷移的具體步驟:

1. 如果虛擬機器上安裝了 VMware Tools,必須先解除安裝它。因為 KVM 的虛擬機器不支援 VMware Tools 裡面的虛擬驅動。

2. 在 VMware ESX 上停止等待遷移的虛擬機器,因為 virt-v2v 只支援靜態遷移。

3. 為自動登入 VMware ESX 伺服器建立 .netrc 檔案。VMware ESX 伺服器的連線需要授權,virt-v2v 支援密碼方式的授權連線,可以從 $HOME/.netrc 檔案中讀取密碼並自動登入。如果主機系統沒有這個檔案,就手動建立它。並且 .netrc 檔案需要 0600 許可權,使 virt-v2v 工具可以正確讀取它。

清單 3. .netrc 檔案的格式
 machine esx.example.com login root password xxxxxx

4. 使用 virt-v2v 命令進行遷移。VMware ESX 伺服器採用 HTTPS 連線方式,連線時需要配置 SSL 證書。本文通過新增'?no_verify=1'; 到 VMware 伺服器的 URI 連線中,來關閉證書檢查。

清單 4. virt-v2v 遷移命令及引數
 virt-v2v -ic esx://esx.example.com/?no_verify=1 -os pool --bridge brname vm-name 
    
 esx.example.com – 是 ESX 伺服器主機名或 IP Address 
 pool – 本地主機儲存池,用來儲存映象
 brname – 本地主機網橋名字,用來連線遷移後的虛擬機器網路
 vm-name – 虛擬機器的名字

5. 遷移成功後,虛擬機器出現在 virt-manager 管理的虛擬機器列表中。通過 virt-manager 工具啟動虛擬機器。

6. 檢查遷移後的虛擬機器的裝置驅動。如果需要,重新安裝虛擬裝置驅動。

7. 驗證遷移後的虛擬機器的配置和系統是否和遷移之前一致。

virt-v2v 遷移例項:Linux 虛擬機器 RHEL5.5

本例將遷移建立在 VMWare ESXi 伺服器上的 RHEL5.5 虛擬機器到 KVM 主機上,並使遷移後的虛擬機器被 libvirt 管理。本例的環境中,VMware ESXi 伺服器和 KVM 主機通過網路連線,虛

擬機映象被各自的儲存管理。

圖 5. virt-v2v 遷移 RHEL5 虛擬機器的環境
圖 5. virt-v2v 遷移 RHEL5 虛擬機器的環境

下面就開始正式的遷移 :

1. 在 VMware ESXi 上檢測 RHEL5.5 虛擬機器,如果安裝了 VMware Tools,先解除安裝它。

2. 在 VMware ESXi 上關閉 RHEL5.5 虛擬機器。

3. 在 KVM 主機上建立或修改 $HOME/.netrc 檔案,新增 VMware ESXi 伺服器的使用者名稱和密碼。

清單 5. 修改 .netrc 檔案
 [[email protected] home]# cat ~/.netrc 
 machine 9.123.99.913 login root password xxxxxx 

 [[email protected] home]# chmod 0600 ~/.netrc

4. 開始遷移虛擬機器。KVM 的儲存是遷移前準備好的儲存域 migration,檔案格式採用 libvirt 支援的 qcow2,網路連線方式與 VMware 虛擬機器相同,採用網橋。

清單 6. 遷移 RHEL5.5 虛擬機器
 [[email protected] ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \
 -os migration -of qcow2 --bridge br0 RHEL5.5 
 Using CPU model "cpu64-rhel6"
 RHEL5.5_RHEL5.5: 100% [=============================================]D 0h22m52s 
 Using CPU model "cpu64-rhel6"
 virt-v2v: RHEL5.5 configured with virtio drivers 

引數說明
 -os migration:  遷移虛擬機器的映象檔案到主機上的儲存池
 -of qcow2:     轉換遷移後虛擬機器的檔案格式
 --bridge br0:  設定遷移後虛擬機器的網路對映到網橋 br0 
 RHEL5.5:        Vmware ESXi 上虛擬機器的名字,遷移後保持名字一致

5. 在 KVM 主機上啟動 virt-manager 軟體,就會發現遷移後的虛擬機器已經被 libvirt 管理了。

圖 6. virt-manager 管理遷移後的 RHEL5.5 虛擬機器
圖 6. virt-manager 管理遷移後的 RHEL5.5 虛擬機器

6. 深入比較遷移前在 VMware ESXi 上的虛擬機器和遷移後在 KVM 上的虛擬機器。

表 1. RHEL5.5 虛擬機器遷移前後在 VMware ESXi 和 KVM 上的比較
RHEL5.5 VMware ESXi KVM/Libvirt 結論
CPUs Intel Xeon 5160 x2 QEMU vCPU 
(cpu64-rhel6)
數量一致,型別和轉化為虛擬 CPU,主頻和支援的 flags 有變化
Memory 1384M 1384M 數量一致
Hard Disk 18GB,
LSI Logic SCSI
VMDK
18GB
virtio SCSI
qcow2
大小一致,匯流排介面和檔案系統轉換為適合 libvirt 的型別
CDROM IDE IDE 型別一致
Network Adaptor MAC 00:0c:29:a9:7b:83
Type: e1000
vSwitch0
DHCP
MAC 00:0c:29:a9:7b:83
Type: virtio
bridge br0
DHCP
Mac 相同,網絡卡型別和連線方式轉換為適合 libvirt 的型別
Video Card Vmware SVGA
4M Video RAM
Model: Cirrus
9M RAM
轉換為 libvirt 支援的型別
系統使用者 root/admin001 root/admin001 一致
磁碟分割槽 VolGroup00
/dev/sda
VolGroup00
/dev/vda
邏輯卷一致,物理碟符有變化。

從表中的比較看出,RHEL5.5 從 VMware ESXi 伺服器遷移到 KVM 主機上後,由於 Hypervisor 的不同,硬體發生了很大的變化。但是 virt-v2v 工具很好的解決的這個問題,使用 virtio 虛擬裝置驅動使 RHEL5.5 系統遷移後能夠流暢的執行。除了 RHEL5,virt-v2v 還支援 RHEL4 及 RHEL6 版本的遷移。

virt-v2v 遷移例項:Windows 虛擬機器 WinXP,Win7

本例中將介紹如何使用 virt-v2v 工具遷移建立在 VMware ESXi 上的 Windows 虛擬機器,包括 Windows XP SP3 32bit 中文版和 Windows 7 Professional 32bit 中文版。本節的環境中,KVM 主機上安裝了 virt-v2v 及相應的支援包 libguestfs-winsupport 和 virtio-win。VMware ESXi 伺服器和 KVM 主機通過網路連線,虛擬機器映象被各自的儲存管理。

圖 7. virt-v2v 遷移 Windows 虛擬機器的環境
圖 7. virt-v2v 遷移 Windows 虛擬機器的環境

下面是正式的遷移步驟:

1. 在 VMware ESXi 上檢測 WinXP 和 Win7 虛擬機器,如果安裝了 VMware Tools,先解除安裝它。

2. 在 VMware ESXi 上關閉 WinXP 和 Win7 虛擬機器。

3. 在 KVM 主機上建立或修改 $HOME/.netrc 檔案,新增 VMware ESXi 伺服器的使用者名稱和密碼。

4. 開始遷移虛擬機器。KVM 的儲存是遷移前準備好的儲存域 migration,檔案格式採用 libvirt 支援的 qcow2,網路連線方式與 VMware 虛擬機器相同,採用網橋。

清單 7. 遷移 WinXP 虛擬機器
 [[email protected] ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \
 -os migration -of qcow2 --bridge br0 WinXP 
 Using CPU model "cpu64-rhel6"
 WinXP_WinXP: 100% [=========================================================]D 0h11m13s 
 Using CPU model "cpu64-rhel6"
 virt-v2v: WARNING: There is no virtio net driver available in the directory 
 specified for this version of Windows. The guest will be configured with 
 a rtl8139 network adapter, but no driver will be installed for it.
  If the rtl8139 driver is not already installed in the guest, you must install 
  it manually after conversion. 
 virt-v2v: WinXP configured with virtio storage only.
清單 8. 遷移 Win7 虛擬機器
 [[email protected] ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \
 -os migration -of qcow2 --bridge br0 Win7 
 Using CPU model "cpu64-rhel6"
 Win7_Win7: 100% [====================================
 ===================================
 =======================================]D 0h35m41s 
 Using CPU model "cpu64-rhel6"
 virt-v2v: Win7 configured with virtio drivers 
 [[email protected] ~]#

5. 遷移完成後,在 KVM 主機上啟動 virt-manager 軟體,會發現遷移後的 Windows 虛擬機器已經被 libvirt 管理了。

6. 在 KVM 上啟動虛擬機器後,由於更新了一些虛擬硬體裝置,可能需要重新安裝驅動程式和重啟系統。

7. 深入比較遷移前在 VMware ESXi 上的虛擬機器和遷移後在 KVM 上的虛擬機器,

表 2. WinXP 虛擬機器遷移前後在 VMware ESXi 和 KVM 上的比較
WinXP VMware ESXi KVM/Libvirt 結論
CPUs Intel Xeon 5160 Intel Pentium II 處理器 相關文章
0.001291036605835