安裝及運用一台全虛擬化的 Xen 客端系統
1. 引言
除了安裝半虛擬化的客端系統外,Xen 亦可以在擁有合適硬件的機器上寄存全虛擬化的客端系統。這代表你可以執行未經修改的操作系統如 CentOS 3 或微軟 Windows。
這份教學文件描述你可以如何安裝一台全虛擬化的客端系統,而不須使用 virt-manager,或它的文字版 virt-install。很多時候,用戶須要這些工具無法提供的自訂設定,因此用它們背後的工具多數會更好。這份教學文件利用來自 libvirt 套件的 virsh 工具,它是一件用來管理虛擬機器的萬用工具。
我們會看一個安裝 CentOS 3 的範例。之後我們會討論可在設定上作出的改動。
2. 檢查你的硬件
要安裝一台全虛擬化的客端系統,你須要一個支援 VT-X(Intel)或 AMD-V(AMD)延伸的處理器。你可以簡易地檢查這個功能,就是透過檢視 /proc/cpuinfo 內的 flags 檔案內是否含有 vmx 或 svm 旗標。譬如:
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
某些系統預設並不啟用 VT-X 或 AMD-V 的支援,請檢查你的 BIOS 設定來確定你的 CPU 延伸已被啟用。來自 cpuinfo 的內容在這方面不能作準。就算 BIOS 內的虛擬化設定已被停用,vmx 這個旗標仍會被顯示。
3. 建立一個映像
第一步是要建立存有 domU 虛擬硬盤的映像檔。由於它只需要是一個被零填滿的檔案,我們的好朋 dd 便大派用場。在這個教學文檔內,我們會將映像放在 /srv/xen 內,雖然官方普遍認可的位置似乎是 /var/lib/xen/images。假若你希望在檔案增長時才分配資料塊,你可以建立一個有洞的檔案。以下的指令會建立一個 4096MB 的 /srv/xen/centos3.img 檔案,雖然實際資料塊是以遲緩的方式來分配:
# dd if=/dev/zero of=/srv/xen/centos3.img oflag=direct bs=1M seek=4095 count=1
如果你想立即分配所有資料塊,你亦可以這樣做:
# dd if=/dev/zero of=/srv/xen/centos3.img oflag=direct bs=1M count=4096
這個方法可以避免日後存有映像檔的磁碟區滿載時,無法分配資料塊的問題。
假如你使用 SELinux,你一定要確保映像檔擁有正確的安全性脈絡(xen_image_t),否則 domU 系統存取虛擬硬盤時便會被拒絕。你可以用 ls 進行檢查:
# ls -Z /srv/xen/centos3.img -rw-r--r-- root root user_u:object_r:xen_image_t /srv/xen/mailserver.img
假如你在設定檔案脈絡時遇到問題,請參閱 Xen 提示與技巧這一頁。無論如何,停用 SELinux,一如某些有關這方面的教學文檔所建議,是個很壞的權宜之計。反過來,透過閱讀兩篇手冊(semanage(8) 及 restorecon(8))來換取多一層保障更為化算!
4. 安裝客端系統
在安裝之前,我們須要一個設定檔來定義客端系統。你可以利用以下範例來安裝 CentOS 3:
<domain type='xen'> <name>CentOS3</name> <os> <type>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='cdrom'/> </os> <memory>262144</memory> <vcpu>1</vcpu> <on_poweroff>destroy</on_poweroff> <on_reboot>destroy</on_reboot> <on_crash>destroy</on_crash> <features> <acpi/> <apic/> <pae/> </features> <devices> <emulator>/usr/lib/xen/bin/qemu-dm</emulator> <interface type='bridge'> <source bridge='xenbr0'/> <script path='vif-bridge'/> </interface> <disk type='file' device='disk'> <driver name='file'/> <source file='/srv/xen/centos3.img'/> <target dev='hda'/> </disk> <disk type='file' device='cdrom'> <source file='/srv/xen/boot-centos3.iso'/> <target dev='hdc'/> <readonly/> </disk> <graphics type='vnc' port='5900'/> </devices> </domain>
此刻,設定檔內的下列方面是最要的:
- 由於硬盤映像亦未有資料,你必須用另一個媒體來開機。
在這個例子中,我們會採用一個 ISO 映像(它會以光碟的形式出現在客端系統上)。預設的開機裝置可以用 boot 這個標籤來指定:
<boot dev='cdrom'/>
客端系統的記憶體數量是用 boot 這個標籤,以 kilobytes 單位來指定:
<memory>262144</memory>
- 由於我們不想在安裝完成後以同一組參數啟動客端系統,我們要確定這台虛擬機器在重新啟動後會被毀滅。我們在當機或關機後亦會這樣做:
<on_poweroff>destroy</on_poweroff> <on_reboot>destroy</on_reboot> <on_crash>destroy</on_crash>
- 我們要為客端系統的硬盤加入一個裝置記錄。在這裡,也就是我們剛才建立的硬盤映像:
<disk type='file' device='disk'> <driver name='file'/> <source file='/srv/xen/centos3.img'/> <target dev='hda'/> </disk>
另外,我們會新增一個光碟裝置。虛擬光碟是以 ISO 映像來提供的(在這裡我們採用了收藏在 CentOS 3 目錄樹內的 boot.iso 檔案):<disk type='file' device='disk'> <driver name='file'/> <source file='/srv/xen/centos3.img'/> <target dev='hda'/> </disk>
- 最後,我們將會將一個圖像主控台接駁到這台虛擬機器上,好讓我們能用一個 VNC 檢視器來與它連線:
<graphics type='vnc' port='5900'/>
你現在可以用 virsh 開啟這台虛擬系統。假設它的設定檔被儲存為 /srv/xen/centos3.xml,你可以用下面的指令來啟動這台虛擬系統:
virsh create /srv/xen/centos3.xml
當指令在沒有錯誤的情況下完成,這個客端系統便在運作中。你須要透過一個 VNC 檢視器才能檢視它的圖像主控台。要連接到這個區域,你首先需要它的區域編號。你可以利用 virsh list 這個指令來取得它:
$ virsh list Id Name State ---------------------------------- 0 Domain-0 running 12 CentOS3 running
在這個例子中,客端系統是以 12 這個編號來運行。你現在可以用 vncviewer localhost:<編號> 來連線到這個系統。在這裡,要執行的指令便是 vncviewer localhost:12。運氣好的話,你應該會看見 ISOLinux 的提示字元,讓你可以按既往的方法來進行安裝 :^)。
安裝完成後,客端系統將會被關閉。
5. 應用客端系統
針對日常運作,你需要對客端系統的設定作出調整。首先,你必須將開機裝置由 cdrom 改為 hd,好讓它能用硬盤的映像開機。此外,為了一致性,把 on_reboot 及 on_crash 的選項改為 restart 亦是一個好主意。以下的設定檔已包含了這些改動,以及刪除了 cdrom 這個裝置:
<domain type='xen'> <name>CentOS3</name> <os> <type>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='hd'/> </os> <memory>262144</memory> <vcpu>1</vcpu> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <features> <acpi/> <apic/> <pae/> </features> <devices> <emulator>/usr/lib/xen/bin/qemu-dm</emulator> <interface type='bridge'> <source bridge='xenbr0'/> <script path='vif-bridge'/> </interface> <disk type='file' device='disk'> <driver name='file'/> <source file='/srv/xen/centos3.img'/> <target dev='hda'/> </disk> <graphics type='vnc' port='5900'/> </devices> </domain>
現在你可以利用這個設定檔來啟動客端系統:
virsh create /srv/xen/centos3.xml
你可以利用上面描述的步驟來連線到圖像主控台。
6. 應用一台實體的光碟機
你亦可以在虛擬客端系統內應用一台實體的光碟機。請採用以下的客端光碟機項目,並在 source 選項內列出被應用的光碟機的裝置名稱:
<disk type='block' device='cdrom'> <driver name='phy'/> <source dev='/dev/hdc'/> <target dev='hdc'/> <readonly/> </disk>
7. 安裝 Windows
如果 Windows 的安裝程式在啟動 Windows 內核時當機(xentop 這個指令多數會匯報客端的工作量是 100%),這個問題很大機會可以借著停用客端的 ACPI 及 APIC 而得以解決。你可以透過註釋掉以下選項來達至這個目的。請將
<acpi/> <apic/>
改為
<!-- <acpi/> --> <!-- <apic/> -->
然後重新啟動客端系統。
Translation of revision 11