24.7.基于 FreeBSD 的 Xen™ 虚拟机
Xen 是一款基于 GPLv2 许可的 Intel®和 ARM®架构的类型 1 虚拟机监控程序。自 FreeBSD 8.0 以来,FreeBSD 已经包含了 i386™和 AMD® 64 位 DomU 以及 Amazon EC2 非特权域(虚拟机)支持,并在 FreeBSD 11.0 中包括了 Dom0 控制域(宿主)支持。在 FreeBSD 11 中,对 para-virtualized(PV)域的支持已被移除,改为支持硬件虚拟化(HVM)域,这能提供更好的性能。
Xen™ 是一种裸金属虚拟化程序,这意味着它是在 BIOS 之后加载的第一个程序。然后启动一个特权的特殊客户端,称为 Domain-0(简称为 Dom0 )。Dom0 利用其特权直接访问底层物理硬件,使其成为高性能解决方案。它能够直接访问磁盘控制器和网络适配器。Xen™ 管理工具用于管理和控制 Xen™ 虚拟化程序,Dom0 还用于创建、列出和销毁虚拟机。Dom0 为非特权域提供虚拟磁盘和网络,通常称为 DomU。Xen™ Dom0 可以与其他虚拟化解决方案的服务控制台进行比较,而 DomU 是运行各个客户端虚拟机的地方。
Xen™ 可以在不同的 Xen™ 服务器之间迁移虚拟机。当两个 Xen 主机共享相同的底层存储时,迁移可以在不必先关闭虚拟机的情况下完成。相反,迁移是在 DomU 运行时执行的,无需重启或计划停机时间。这在维护场景或升级窗口中非常有用,以确保 DomU 提供的服务仍在提供。Xen™ 的许多其他功能列在 Xen Wiki 概述页面上。请注意,并非所有功能都在 FreeBSD 上得到支持。
24.7.1. Xen™ Dom0 的硬件要求
要在主机上运行 Xen™虚拟机监控程序,需要一定的硬件功能。硬件虚拟化域需要主机处理器中的扩展页表(EPT)和输入/输出内存管理单元(IOMMU)支持。
24.7.2. Xen™ Dom0 控制域设置
用户应安装基于 Xen™ 4.18 的 emulators/xen-kernel 和 sysutils/xen-tools 软件包。
安装 Xen 软件包后,必须编辑配置文件以准备 Dom0 集成。在 /etc/sysctl.conf 中添加条目以禁用内存页线缆的限制。否则,具有更高内存需求的 DomU VM 可能无法运行。
另一个与内存相关的设置涉及更改 /etc/login.conf,将 memorylocked 选项设置为 unlimited。否则,创建 DomU 域可能会失败,显示 Cannot allocate memory 错误。在修改 /etc/login.conf 后,运行 cap_mkdb 更新能力数据库。有关详细信息,请参阅资源限制。
在/etc/ttys 中添加 Xen™控制台的条目:
在/boot/loader.conf 中选择 Xen™内核会激活 Dom0。Xen™还需要来自主机的 CPU 和内存等资源,用于自身和其他 DomU 域。CPU 和内存的需求量取决于个体需求和硬件能力。在本例中,为 Dom0 提供了 8 GB 的内存和 4 个虚拟 CPU。串行控制台也被激活,并定义了日志选项。
用于 Xen 4.7 软件包的以下命令:
对于 Xen 版本 4.11 及更高版本,应改用以下命令:
在系统启动期间激活 xencommons 服务:
这些设置足以启动一个启用 Dom0 的系统。然而,对于 DomU 虚拟机来说,它缺少网络功能。为了解决这个问题,请使用系统的主网卡定义一个桥接接口,DomU 虚拟机可以使用它连接到网络。将 em0 替换为主机网络接口名称。
重启主机以加载 Xen™ 内核并启动 Dom0。
成功启动 Xen™ 内核并再次登录系统后,Xen™ 管理工具 xl 用于显示有关域的信息。
输出确认 Dom0(称为 Domain-0 )具有 ID 0 并正在运行。它还具有在 /boot/loader.conf 中定义的内存和虚拟 CPU。更多信息可以在 Xen™ 文档中找到。现在可以创建 DomU 客户 VM。
24.7.3. Xen™ DomU 客户 VM 配置
非特权域包括配置文件和虚拟或物理硬盘。DomU 的虚拟磁盘存储可以是由 truncate(1) 创建的文件或 ZFS 卷,如“创建和销毁卷”中所述。在这个示例中,使用了一个 20 GB 的卷。使用 ZFS 卷、FreeBSD ISO 映像、1 GB RAM 和两个虚拟 CPU 创建了一个 VM。ISO 安装文件使用 fetch(1) 检索并保存在名为 freebsd.iso 的本地文件中。
创建一个名为 xendisk0 的 20 GB 的 ZFS 卷,用作 VM 的磁盘空间。
在文件中定义新的 DomU 客户 VM。还定义了一些特定的设置,如名称、键盘映射和 VNC 连接详细信息。以下是 freebsd.cfg,其中包含此示例的最小 DomU 配置:
这些行将进行更详细的解释:
用于区分此虚拟机与在同一 Dom0 上运行的其他虚拟机的名称。必需的。
要为 VM 提供的以兆字节为单位的 RAM 数量。此量减去超控程序的可用内存总量,而不是 Dom0 的内存。
宿主机上可用于虚拟机客户机的虚拟 CPU 数量。为了获得最佳性能,请不要为客户机创建比主机上物理 CPU 数量更多的虚拟 CPU。
虚拟网络适配器。这是连接到主机网络接口的桥接器。mac 参数是设置在虚拟网络接口上的 MAC 地址。此参数是可选的,如果没有提供 MAC 地址,Xen™ 将生成一个随机的 MAC 地址。
用于此虚拟机的磁盘、文件或 ZFS 卷的完整路径。选项和多个磁盘定义用逗号分隔。
定义从中安装初始操作系统的启动介质。在此示例中,这是之前下载的 ISO 镜像。请参阅 Xen™ 文档,了解其他类型的设备和设置选项。
控制 VNC 连接到 DomU 串行控制台的选项。依次,这些是:激活 VNC 支持,定义要监听的 IP 地址,串行控制台的设备节点,以及用于鼠标精确定位和其他输入方法的输入方法。keymap 定义要使用的键盘映射表,默认情况下为 english。
在创建具有所有必要选项的文件后,通过将其传递给 xl create 作为参数来创建 DomU。
xl list 的输出确认了 DomU 已被创建。
要开始安装基本操作系统,请启动 VNC 客户端,将其定向到主机的主网络地址或指向 freebsd.cfg 中定义的 IP 地址行。在安装操作系统后,关闭 DomU 并断开 VNC 查看器。编辑 freebsd.cfg,删除包含 cdrom 定义的行,或在该行开头插入 # 字符对其进行注释。要加载此新配置,需要使用 xl destroy 删除旧的 DomU,并传递名称或 ID 作为参数。然后,使用修改后的 freebsd.cfg 重新创建它。
机器可以使用 VNC 查看器再次访问。这次,它将从已安装操作系统的虚拟磁盘启动,并可用作虚拟机。
24.7.4. 故障排除
本节包含基本信息,以帮助解决在将 FreeBSD 用作 Xen™ 主机或客户机时遇到的问题。
24.7.4.1. 主机引导故障排除
请注意,以下故障排除技巧适用于 Xen™ 4.11 或更新版本。如果你仍在使用 Xen™ 4.7 并且遇到问题,请考虑迁移到更新版本的 Xen™。
为了排除主机引导问题,你可能需要串行电缆或调试 USB 电缆。可以通过向 loader.conf 中找到的 xen_cmdline 选项添加选项来获取详细的 Xen™ 引导输出。一些相关的调试选项包括:
iommu=debug :可用于打印有关 iommu 的附加诊断信息。
dom0=verbose :可用于打印有关 dom0 构建过程的附加诊断信息。
sync_console :用于强制同步控制台输出的标志。用于调试以避免由于速率限制而丢失消息,非常有用。绝不要在生产环境中使用此选项,因为它可以能让恶意的客户端通过控制台对 Xen™执行 DoS 攻击。
FreeBSD 也应该以详细模式启动,以便识别任何问题。要激活详细启动,请运行此命令:
如果这些选项都没有帮助解决问题,请将串行启动日志发送到 freebsd-xen@FreeBSD.org 和 xen-devel@lists.xenproject.org 以进行进一步分析。
24.7.4.2. 客户端创建故障排除
创建来宾时也可能出现问题,以下尝试为那些试图诊断来宾创建问题的人提供一些帮助。
创建来宾失败的最常见原因是 xl 命令输出某些错误并以与 0 不同的返回代码退出。如果提供的错误不足以帮助识别问题,则还可以通过重复使用 v 选项从 xl 处获得更详细的输出。
如果详细输出无法帮助诊断问题,则 /var/log/xen 中还有 QEMU 和 Xen™ toolstack 日志。请注意,域的名称会附加到日志名称中,因此如果域命名为 freebsd,则应找到 /var/log/xen/xl-freebsd.log 和可能是 /var/log/xen/qemu-dm-freebsd.log。两个日志文件都可能包含有用的调试信息。如果所有这些都无法解决问题,请将面临的问题描述和尽可能多的信息发送至 freebsd-xen@FreeBSD.org 和 xen-devel@lists.xenproject.org,以获取帮助。
最后更新于