KVM克隆及在不同物理機下的移植
KVM 虛擬機器的管理工具
準確來說,KVM 僅僅是 Linux 核心的一個模組。管理和建立完整的 KVM 虛擬機器,需要更多的輔助工具
QEMU-KVM
- 在 Linux 系統中,首先我們可以用 modprobe 系統工具去載入 KVM 模組,如果用 RPM 安裝 KVM 軟體包,系統會在啟動時自動載入模組。
- 載入了模組後,才能進一步通過其他工具建立虛擬機器。但僅有 KVM 模組是遠遠不夠的,因為使用者無法直接控制核心模組去做事情,還必須有一個使用者空間的工具。
- 關於使用者空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟體 QEMU。QEMU 是一個強大的虛擬化軟體,它可以虛擬不同的 CPU 構架。比如說在 x86 的 CPU 上虛擬一個 Power 的 CPU,並利用它編譯出可執行在 Power 上的程式。
- KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 核心模組的使用者空間工具 QEMU-KVM。所以 Linux 發行版中分為 kernel 部分的 KVM 核心模組和 QEMU-KVM 工具。這就是 KVM 和 QEMU 的關係
Libvirt、virsh、virt-manager
- 儘管 QEMU-KVM 工具可以建立和管理 KVM 虛擬機器,RedHat 為 KVM 開發了更多的輔助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易於使用。
- Libvirt 是一套提供了多種語言介面的 API,為各種虛擬化工具提供一套方便、可靠的程式設計介面,不僅支援 KVM,而且支援 Xen 等其他虛擬機器。
- 使用 libvirt,你只需要通過 libvirt 提供的函式連線到 KVM 或 Xen 宿主機,便可以用同樣的命令控制不同的虛擬機器了。Libvirt 不僅提供了 API,還自帶一套基於文字的管理虛擬機器的命令—— virsh,可以通過使用 virsh 命令來使用 libvirt 的全部功能。但終端使用者更渴望的是圖形使用者介面,這就是 virt-manager,它是一套用 python 編寫的虛擬機器管理圖形介面,使用者可以通過它直觀地操作不同的虛擬機器。Virt-manager 就是利用 libvirt 的 API 實現的
KVM 虛擬機器遷移方式
2. KVM 虛擬機器靜態遷移
虛擬機器之間使用共享儲存:如果源主機和目的主機都能夠訪問虛擬機器的映象,則只需要遷移虛擬機器配置檔案。virt-manager 管理的虛擬機器配置檔案在 /etc/libvirt/qemu/”your vm name.xml”。拷貝 XML 配置檔案到目的主機的相同目錄後,進行適當的修改,比如:與源主機相關的檔案或路徑等。無論你何時在 /etc/libvirt/qemu/ 中修改了虛擬機器的 XML 檔案,必須重新執行 define 命令,以啟用新的虛擬機器配置檔案
virsh define /etc/libvirt/qemu/"your vm name.xml"
虛擬機器映象使用本地儲存:本地儲存是指虛擬機器的檔案系統建立在本地硬碟上,可以是檔案或者磁碟分割槽
本地檔案儲存:如果虛擬機器是基於映象檔案,直接從源主機拷貝映象檔案和 XML 配置檔案到目的主機中,然後對 XML 進行適當的修改並激活。
本地磁碟分割槽:如果虛擬機器使用了磁碟分割槽(物理分割槽或者邏輯分割槽)為儲存裝置,首先用 dump 工具把磁碟分割槽轉換成映象檔案再拷貝到目的主機。在目的主機恢復虛擬機器時,把映象檔案恢復到目的主機的磁碟分割槽中去。對於虛擬機器系統使用了多個磁碟分割槽的,需要每個分割槽單獨 dump 成映象檔案。例如使用“/dev/VolGroup00/lv001” LVM 邏輯卷作為儲存裝置,可以使用下面的命令轉換邏輯卷為映象檔案,輸出成映象檔案:
dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M
KVM具體遷移步驟
筆者在實際開發中採用的 KVM 靜態遷移,且使用虛擬機器映象本地儲存。因為操作簡單方便。操作中,虛擬機器的執行狀態的變化情況?靜態遷移虛擬的過程中,虛擬機器系統處於關機狀態,這樣虛擬機器關機前的執行狀態不會保留。如果希望保留遷移前的系統狀態,並且在遷移後能夠恢復,需要對虛擬機器做快照備份或者以休眠的方式關閉系統
我們知道,vmware可以直接啟動虛擬機器檔案,因此,拷貝虛擬機器檔案並用vmware開啟即可實現新虛擬機器的使用。然後,KVM中的情況不同,主要源於KVM不止需要虛擬機器檔案還需要關聯的XML檔案。
方案一 (筆者未採用,從網上借鑑的)
假設通過KVM已經安裝虛擬機器vHost_1,此機的虛擬機器檔案存放在/disk4/VM/ 而關關聯的xml檔案在/etc/libvirt/qemu/vHost_2.xml。建立虛擬機器vHost_2,需要如下簡單操作:
拷貝vHost_1
cp vHost_1 /disk4/VM/vHost_3
拷貝vHost_1的關聯檔案
virsh dumpxml vHost_1 >/etc/libvirt/qemu/vHost_3.xml
修改vHost_3.xml檔案,主要修改UUID和source;
啟用新的虛擬機器配置檔案
virsh define /etc/libvirt/qemu/vHost_3.xml virsh start vHost_3
至此,虛擬機器vHost_3啟動!
方案二(主要利用 virt-manager 圖形介面移植)
- 配置需求分析
主機 | IP | 映象配置檔案位置 | 映象位置 | 映象名稱 |
---|---|---|---|---|
源主機 | 10.6.2.163 | /etc/libvirt/qemu | /var/lib/libvirt/images/ | qoe_179 |
目的主機 | 10.6.2.167 | /etc/libvirt/qemu | /var/lib/libvirt/images/ | qoe_192 |
- 先檢視當前已安裝的虛擬機器
virsh list --all
說明當前沒有安裝任何虛擬機器
- 將遠端的的虛擬機器的xml以及img檔案通過scp拷貝到本機下
scp root@10.6.2.163:/opt/qoe_wzf.xml /etc/libvirt/qemu
scp root@10.6.2.163:/opt/qoe_wzf.img /var/lib/libvirt/images/
- 然後開啟 virt-manager
virt-manager
- 在出現的畫面中點選 New VM按鈕
- 填寫虛擬機器名稱,然後選擇匯入已經存在的映象檔案
- 選擇複製的映象img檔案,kvm預設顯示的是在 /var/lib/libvirt/images/ 下已有的img檔案
- 選擇好虛擬記憶體和虛擬CPU核數
- 這裡的步驟2是保證新建虛擬機器依舊是處在網橋br0中
- 當遇到下列情況時: 新的虛擬機器名為 qoe_192。且它的配置檔案就是以虛擬機器名為命名的xml檔案,即
qoe_192.xml。但是它的映象檔案卻是其他
接下來就是慢慢地等待了….
然後就出現如上了,就是這麼簡單… ^_^
- 因為虛擬機器在不同物理機上的移植,所以其 MAC地址一定會自動改變,這點無需我們操心,但是原有以 MAC
為基礎的網路配置卻失效了,故需要重新配置下網路
- 先進入超級使用者模式下,然後檢視本機的 MAC 地址
ifconfig eth0
- eth0 是虛擬機器的預設乙太網卡,實際中當然是虛擬的,並不是都取名為 eth0,根據實際情況而定。這裡務必記住新的 MAC 地址,即圖中的 52:54:00:f6:bf:e7。補充一句,如果找不到eth0網絡卡,請參考這篇博文《KVM虛擬機器克隆Linux系統後找不到eth0網絡卡》
- 然後編輯網絡卡配置檔案
vim /etc/sysconfig/network-scripts/ifcfg-eth0
- 將HWADDR後面的地址改為實際的地址(52:54:00:f6:bf:e7),舊的已經被筆者我註釋了,然後其餘步驟就是配置IP,這裡就不多解釋了,因為筆者的虛擬機器是 Centos7 並非 Centos6.5,所以具體的語句有一點點不同,僅此而已!
- 接著就是重啟虛擬裡的網路
service network restart
OK,大功告成了,配置完畢!
克隆虛擬機器
需求分析:克隆qoe_192虛擬機器為新的虛擬機器 qoe_193
克隆已有的虛擬機器,首先需要將被複制的虛擬機器 power off,然後再右擊,選擇 clone, 在彈出的介面中
首先在 Name一欄中,填入所需的新虛擬機器名稱,預設就是 xx-clone(暫不改,等等教後續如何修改,當然改了是最直接方便的)。
其次在 Storage一欄中選擇 Details一項,在彈出的下面介面中,可以看到克隆的磁碟位置在 /var/lib/libvirt/images/qoe_192.img
- 而新的虛擬機器的磁碟位置為該目錄下的 qoe_192-clone,這裡建議直接改為需求的qoe_193.img。然而為了說明當忘記修改後續如何調整,現暫不動
- 選擇的過程也可以點選 Browse一欄(圖中4),然後選擇 Browse Local(圖中5),最終在 (圖中6)處選擇你要的磁碟檔案,然後點選 Choose Volume
可以看到已經克隆出了新的虛擬機器了,現在返回修改虛擬機器的名稱以及映象檔案的名稱。
首先進入 /var/lib/libvirt/images 中,修改 映象檔案的名稱
cd /var/lib/libvirt/images mv qoe_192-clone.img qoe_193.img
然後右擊關閉著的 qoe_192-clone,選擇 open,然後點選位置1 的修改虛擬機器硬體位置的地方
- 點選位置2 “Overview”, 在右欄中位置3 “Name” 中編輯你想修改的新名稱即可
- 點選位置4 “VirlO Disk”,就突然彈出 5的報錯資訊,因為先前已經將qoe_192-clone.img 重新命名為 qoe_193.img了,不報錯才怪~,這時將右擊位置4 ,選擇 “Remove Hardware”,刪除它!
點選位置6 “Add Hardware”
-- 點選位置 1 “Storage”,選擇 “Select managed or other existing storage”,點選 “Browse”
- 選擇之前更名後的 qoe_193.img,選擇 Choose Volume
- 將 “Device type” 更改為 “Virtio Disk” 型別
接著就是將修改後的 qoe_193 啟動 “Run” 就OK了,完畢!但別忘了網路配置還是要改的… -_-!