33 Xen:将半虚拟 (PV) Guest 转换为全虚拟 (FV/HVM) Guest #
本章介绍如何将 Xen 半虚拟机转换为 Xen 全虚拟机。
要在 FV 模式下启动 Guest,需要在 Guest 中执行以下步骤。
- 在转换 Guest 之前,安装所有待应用的补丁并重引导 Guest。 
- FV 计算机使用 - -default内核。如果尚未安装此内核,请安装- kernel-default软件包(在 PV 模式下运行时)。
- PV 计算机通常使用 - vda*这样的磁盘名称。这些名称必须更改为 FV- hd*语法。此更改必须在以下文件中进行:- /etc/fstab
- /boot/grub/menu.lst(仅适用于 SLES 11)
- /boot/grub*/device.map
- /etc/sysconfig/bootloader
- /etc/default/grub(SLES 12、15、openSUSE)
 注意:建议使用 UUID- 应在 - /etc/fstab中使用 UUID 或逻辑卷。通过 UUID 可以方便地使用挂接的网络存储设备、多路径和虚拟化。要确定磁盘的 UUID,请使用- blkid命令。
- 为了避免在使用所需模块重新生成 - initrd时出现任何错误,可以使用- ln创建一个从- /dev/hda2到- /dev/xvda2等的符号链接:- ln -sf /dev/xvda2 /dev/hda2 ln -sf /dev/xvda1 /dev/hda1 ..... 
- PV 和 FV 计算机使用不同的磁盘和网络驱动程序模块。必须手动将这些 PV 模块添加到 initrd。需要的模块为 - xen-vbd(用于磁盘)和- xen-vnif(用于网络)。这些是全虚拟化 VM Guest 仅有的 PV 驱动程序。所有其他模块(例如- ata_piix、- ata_generic和- libata)应该会自动添加。提示:将模块添加到 initrd- 在 SLES 11 上,可以将模块添加到 - /etc/sysconfig/kernel文件中的- INITRD_MODULES行。例如:- INITRD_MODULES="xen-vbd xen-vnif" - 运行 - dracut以构建包含这些模块的新 initrd。
- 在 SLES 12、15 和 openSUSE 上,打开或创建 - /etc/dracut.conf.d/10-virt.conf,并按以下示例所示添加一行来使用- force_drivers添加这些模块(注意前导空格)。- force_drivers+=" xen-vbd xen-vnif" - 运行 - dracut -f --kver KERNEL_VERSION-default以构建包含所需模块的新 initrd(用于内核的默认版本)。- 确定您的内核版本: 使用 - uname -r命令可获取系统上当前使用的版本。
 
- 在关闭 Guest 之前,使用 - yast bootloader将默认引导参数设置为- -default内核。
- 在 SUSE Linux Enterprise Server 11 下,如果 Guest 上正在运行 X 服务器,您需要调整 - /etc/X11/xorg.conf文件来调整 X 驱动程序。搜索- fbdev并将其更改为- cirrus。- Section "Device" Driver "cirrus" ...... EndSection注意:SUSE Linux Enterprise Server 12/15 和 Xorg- 在 SUSE Linux Enterprise Server 12/15 下,Xorg 将自动调整 X 服务器能够正常运行所需的驱动程序。 
- 关闭 Guest。 
以下步骤说明了需要在主机上执行的操作。
- 要以 FV 模式启动 Guest,必须修改 VM 的配置以匹配 FV 配置。使用 - virsh edit [DOMAIN]可轻松编辑 VM 的配置。建议进行以下更改:- 确保在 OS 部分中,将 machine、type 和 - loader项中的- xenpv更改为- xenfv。更新后的 OS 部分应如下所示:- <os> <type arch='x86_64' machine='xenfv'>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='hd'/> </os>
- 在 OS 部分,去除所有特定于 PV Guest 的内容: - <bootloader>pygrub</bootloader> 
- <kernel>/usr/lib/grub2/x86_64-xen/grub.xen</kernel> 
- <cmdline>xen-fbfront.video=4,1024,768</cmdline> 
 
- 在 devices 部分,采用以下形式添加 qemu 模拟器: - <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator> 
- 更新磁盘配置,使目标设备和总线使用 FV 语法。这需要将 - xen磁盘总线替换为- ide,并将- vda目标设备替换为- hda。更改应如下所示:- <target dev='hda' bus='ide'/> 
- 将鼠标和键盘的总线从 - xen更改为- ps2。另外添加一个新的 USB 绘图板设备:- <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <input type='tablet' bus='usb'/>
- 将控制台目标类型从 - xen更改为- serial:- <console type='pty'> <target type='serial' port='0'/> </console>
- 将视频配置从 - xen更改为- cirrus,其中 VRAM 大小为 8 MB:- <video> <model type='cirrus' vram='8192' heads='1' primary='yes'/> </video>
- 如果需要,向 VM 的功能添加 - acpi和- apic:- <features> <acpi/> <apic/> </features>
 
- 启动 Guest(使用 - virsh或- virt-manager)。如果 Guest 运行的是 kernel-default(通过- uname -a校验),计算机将以全虚拟模式运行。
要编写此过程的脚本,或直接在磁盘映像上工作,可以使用 guestfs-tools 套件(有关详细信息,请参见第 21.3 节 “Guestfs 工具”)。有多种工具可以帮助修改磁盘映像。