2010/08/13

Kernel-based Virtual Machines

# 作業系統環境:Ubuntu 9.10 Server x86_64

一、安裝 KVM (Kernel-based Virtual Machines)

首先,確認 CPU 是否支援虛擬指令集。

開啟終端機,執行:
egrep '(vmx|svm)' --color=always /proc/cpuinfo

如果畫面印出相關資訊,並且有 highlight 的 vmx 或 svm 的字串,代表 CPU 有支援。

執行:
sudo apt-get update && sudo apt-get upgrade

執行:
sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils

# 安裝過程中會出現 Postfix 的問項,可以選 Internet。

安裝完成,執行:
sudo adduser `id -un` libvirtd

將當前登入的使用者加入 libvirtd 群組,方能執行 virsh 指令。
執行完畢,請登出,再重新登入,讓設定生效。

執行:
virsh -c qemu:///system list

有成功印出訊息,代表安裝成功。

***

二、設定橋接網路 ( bridge network )

# 如果您打算使用 KVM 預設 NAT 網路,請直接跳過這一步驟。
# 但在新增虛擬機器的時候,請注意調整符合的網路參數!
# 以下操作可能無法從遠端執行,因為涉及網路的中斷及重開。

安裝橋接用的套件,執行:
sudo apt-get install bridge-utils

# 注意!執行以下指令會讓網路切斷,SSH 將無法遠端連線!
為了確保設定期間沒有特殊問題,要先停掉網路服務,執行:
sudo invoke-rc.d networking stop

先備份原始網路設定檔:
sudo cp /etc/network/interfaces /etc/network/interfaces-backup

執行:
sudo vim /etc/network/interfaces

將 interfaces 內容編輯成類似:
# 以下為 TKG 網格的 Private Network 設定,請根據需求自行調整。
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.100.主機號碼
network 192.168.100.0
netmask 255.255.255.0
broadcast 192.168.100.255
gateway 192.168.100.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

存檔離開後,執行:
sudo invoke-rc.d networking stop && sudo /etc/init.d/networking restart

網路順利啟動後,可以試著用 SSH 遠端登入看看。
可以執行更新或 ping DNS 等動作進行測試。

虛擬機器的各項預設值,可以參考 /etc/vmbuilder/libvirt/libvirtxml.tmpl 檔案。

***

三、安裝第一台虛擬機器

KVM 目前有三套主流管理工具:
virt-manager:一個圖形介面的管理工具,可以安裝在有 X window 的 Linux 機器上。
virt-install:一個用 python 撰寫的文字介面管理工具,Red Hat 開發。
ubuntu-vm-builder:文字介面管理工具,Canonical 開發。

virt-install 有比較大的操作自由度,所以選用它進行管理操作。

先把它裝起來,執行:
sudo apt-get install python-virtinst

查看 virt-install 各項的參數,執行:
virt-install --help

查看 virt-install 完整的使用說明,執行:
man virt-install

執行:
virt-install \
--connect qemu:///system \
--name=虛擬機器的名稱 \
--ram=分配的記憶體大小 [MB] \
--os-type=作業系統類型 [ex: linux] \
--os-variant=作業系統的版本名稱 [ex: ubuntujaunty] \
--hvm [全虛擬化,hvm 與 paravirt 擇其一,請參考附錄] \
--paravirt [半虛擬化,hvm 與 paravirt 擇其一,請參考附錄] \
--accelerate [KVM 加速器] \
--cdrom=系統安裝光碟的路徑 [ex: *.iso] \
--file=虛擬硬碟的路徑 [ex: *.qcow2] \
--file-size=虛擬硬碟的大小 [GB] \
--bridge=br0 [注意:如果您沒有使用橋接網路,請設定成 --network=default] \
--vnc \
--noautoconsole \
--debug

一個完整的例子如下:
virt-install \
--connect qemu:///system \
--name=imVM \
--ram=1024 \
--os-type=linux \
--os-variant=ubuntujaunty \
--hvm \
--accelerate \
--cdrom=~/ubuntu-9.04.iso \
--file=~/imVM.qcow2 \
--file-size=8 \
--bridge=br0 \
--vnc \
--noautoconsole \
--debug

順利執行完畢,虛擬機器就存在了。
新建的虛擬機器,其描述檔為:
/etc/libvirt/qemu/虛擬機器名稱.xml

要將新建的虛擬機器進行第一次開機,執行:
virsh

virsh # start 虛擬機器名稱
virsh # list --all
virsh # quit

確定虛擬機器開機後,到 X window 環境的機器底下,執行:
sudo apt-get install virt-viewer

執行:
virt-viewer --connect qemu+ssh://使用者帳號@虛擬機器的母體主機位址/system 虛擬機器名稱

成功登入之後,將會出現遠端的虛擬機器畫面。
進行正常的作業系統安裝動作,完成後關機。

再次進入 virsh 開機,然後從其他機器 SSH 連線測試。
如果出現問題,請使用 virt-viewer 檢查虛擬機器狀況。

***

四、使用已存在的虛擬硬碟檔安裝新的虛擬機器

執行:
virt-install \
--connect=qemu:///system \
--name=新的虛擬機器名稱 \
--ram=新的虛擬機器記憶體大小 [MB] \
--os-type=作業系統類型 \
--os-variant=作業系統名稱 \
--accelerate \
--file=已存在的虛擬硬碟路徑 [ex: *.qcow2] \
--bridge=br0 [注意:如果您沒有使用橋接網路,請設定成 --network=default] \
--vnc \
--noautoconsole \
--debug \
--import

***

五、複製虛擬機器

執行:
virt-clone \
--connect=qemu:///system \
-o 舊的虛擬機器名稱 \
-n 新的虛擬機器名稱 \
-f 新的虛擬硬碟路徑 [ex: *.qcow2]

***

六、虛擬機器的管理

執行:
virsh

# 查看所有可以用指令
virsh # help

# 取出虛擬機器描述檔
virsh # dumpxml 虛擬機器名稱 /tmp/虛擬機器描述檔 [ex: *.xml]

# 使用虛擬機器描述檔建立虛擬機器
virsh # define /etc/libvirt/qemu/虛擬機器描述檔 [ex: *.xml]

# 移除虛擬機器
virsh # undefine 虛擬機器名稱

# 列出所有虛擬機器
virsh # list --all

# 啟動虛擬機器
virsh # start 虛擬機器名稱

# 關閉虛擬機器
virsh # shutdown 虛擬機器名稱

# 拔除虛擬機器電源
virsh # destory 虛擬機器名稱

***

附錄:

Full Virtualization specific options

Parameters specific only to fully virtualized guest installs.

--sound
Attach a virtual audio device to the guest.

--noapic
Override the OS type / variant to disables the APIC setting for fully virtualized guest.

--noacpi
Override the OS type / variant to disables the ACPI setting for fully virtualized guest.

Virtualization Type options

Options to override the default virtualization type choices.

-v, --hvm
Request the use of full virtualization, if both para & full virtualization are available on the host. This parameter may not be available if connecting to a Xen hypervisor on a machine without hardware virtualization support. This parameter is implied if connecting to a QEMU based hypervisor.

-p, --paravirt
This guest should be a paravirtualized guest. If the host supports both para & full virtualization, and neither this parameter nor the "--hvm" are specified, this will be assumed.

--accelerate
When installing a QEMU guest, make use of the KVM or KQEMU kernel acceleration capabilities if available. Use of this option is recommended unless a guest OS is known to be incompatible with the accelerators. The KVM accelerator is preferred over KQEMU if both are available.

***

Reference :
01. https://help.ubuntu.com/community/KVM
02. http://thundersha.blogspot.com/2008/07/ubuntu-kvmgui-sector2.html
03. http://www.boobooke.com/v/bbk1819/
04. http://southbrain.com/south/2009/08/youtube-examples-of-xvm-virtin.html