安装及运用一台全虚拟化的 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