31 Xen:将半虚拟 (PV) Guest 转换为全虚拟 (FV/HVM) Guest #
本章介绍如何将 Xen 半虚拟机转换为 Xen 全虚拟机。
要在 FV 模式下启动 Guest,需要在 Guest 中执行以下步骤。
在转换 Guest 之前,安装所有待应用的补丁并重引导 Guest。
FV 计算机使用
-default
内核。如果尚未安装此内核,请安装kernel-default
软件包(在 PV 模式下运行时)。PV 计算机通常使用
vda*
这样的磁盘名称。这些名称必须更改为 FVhd*
语法。此更改必须在以下文件中进行:/etc/fstab
/boot/grub/menu.lst
(仅 SLES 11)/boot/grub*/device.map
/etc/sysconfig/bootloader
/etc/default/grub
(仅 SLES 12 和 15)
注意:建议使用 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 上,打开或创建
/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 套件(有关详细信息,请参见第 19.3 节 “Guestfs 工具”)。有许多工具可以帮助修改磁盘映像。