第二十四章 虚拟化

第二十四章 虚拟化24.1. 简介24.2. FreeBSD作为macOS®Parallels Desktop的访客24.2.1. 在Mac®上的Parallels Desktop上安装FreeBSD24.2.2. 在Parallels上配置FreeBSD24.3. FreeBSD作为macOS®VMware Fusion的访客24.3.1. 在VMware Fusion上安装FreeBSD24.3.2. 在VMware Fusion上配置FreeBSD24.4. FreeBSD作为VirtualBox™的访客24.5. FreeBSD作为VirtualBox™的主机24.5.1. 安装VirtualBox™24.5.2. VirtualBox™USB支持24.5.3. VirtualBox™主机DVD/CD访问24.6. FreeBSD上QEMU的虚拟化24.6.1. 安装QEMU软件24.6.2. 虚拟机安装24.6.3. 使用技巧24.6.3.1. 使用X Window系统24.6.3.2. 使用QEMU窗口24.6.3.3. 使用QEMU窗口菜单24.6.3.4. 其他QEMU窗口菜单选项24.6.4. 向来宾VM添加串行端口接口24.6.4.1. 串行控制台使用注意事项24.6.5. QEMU用户模式仿真24.6.5.1. 在x86_64主机上设置SPARC64来宾VM24.6.6. 使用QEMU监视器24.6.6.1. 向虚拟机添加新磁盘24.6.6.2. 使用QEMU监视器管理快照24.6.7. 使用QEMU USB设备24.6.8. 通过Passthrough使用主机USB设备24.6.9. QEMU关于FreeBSD的总结24.7. FreeBSD作为bhyve主机24.7.1. 准备主机24.7.2. 创建FreeBSD客户机24.7.3. 创建Linux®客户机24.7.4. 使用UEFI固件引导bhyve虚拟机24.7.5. 面向bhyve访客的图形UEFI帧缓冲区24.7.6. 创建Microsoft Windows®客户机24.7.6.1. 创建Windows 11客户机24.7.7. 将ZFS与bhyve客户机结合使用24.7.8. 创建虚拟机快照24.7.8.1. ZFS快照24.7.8.2. 内存和CPU快照(实验功能)24.7.9. Jailing bhyve24.7.9.1. 为bhyve创建一个Jail24.7.9.2. 配置Jail24.7.9.3. 在Jail内创建虚拟机24.7.10. 虚拟机控制台24.7.11. 管理虚拟机24.7.12. 工具和实用程序24.7.13. 持久配置24.8. FreeBSD作为Xen™主机24.8.1. Xen™Dom0的硬件要求24.8.2. Xen™Dom0控制域设置24.8.3. Xen™DomU客户机VM配置24.8.4 排错24.8.4.1. 主机启动故障排除24.8.4.2. 客户机创建故障排除

24.1. 简介

虚拟化软件允许多个操作系统在同一台计算机上同时运行。这种用于PCs的软件系统通常涉及运行虚拟化软件并支持任何数量的客户操作系统的主机操作系统。

阅读本章以了解:

• 主机操作系统和客户操作系统之间的区别。 • 如何在以下虚拟化平台上安装FreeBSD: ◦ Parallels桌面(苹果®macOS®) ◦ VMware Fusion(苹果®macOS®) ◦ VirtualBox™(微软®Windows®、基于英特尔®的苹果®macOS®、Linux) ◦ QEMU(FreeBSD) ◦ bhyve(FreeBSD) • 如何调整FreeBSD系统以在虚拟化下获得最佳性能。

在阅读本章之前:

• 了解UNIX®和FreeBSD的基础知识。 • 知道如何安装FreeBSD。 • 知道如何设置网络连接。 • 知道如何安装其他第三方软件。

24.2. FreeBSD作为macOS®Parallels Desktop的访客

Parallels Desktop for Mac®是一款商业软件产品,适用于运行macOS®10.14.6或更高版本的Apple®Mac®计算机。FreeBSD是一个完全支持的客户操作系统。在macOS®上安装Parallels后,用户必须配置虚拟机,然后安装所需的客户操作系统。

24.2.1. 在Mac®上的Parallels Desktop上安装FreeBSD

在Parallels上安装FreeBSD的第一步是创建一个新的虚拟机来安装FreeBSD。

选择 Install Windows or another OS from a DVD or image file ,然后继续。

24.2.1-1

选择FreeBSD映像文件:

24.2.1-2

选择 Other as operating system

24.2.1-3

命名虚拟机并在安装前检查 Customize settings before installation

24.2.1-4

当配置窗口弹出时,转到 Hardware 选项卡,选择 Boot order ,然后单击 Advanced 。然后,选择 EFI 64 as BIOS

24.2.1-5

单击 OK ,关闭配置窗口,然后单击 Continue

24.2.1-6

虚拟机将自动启动。按照一般步骤安装FreeBSD。

24.2.1-7

24.2.2. 在Parallels上配置FreeBSD

使用Parallels在macOS®X上成功安装FreeBSD后,可以采取许多配置步骤来优化系统以进行虚拟化操作。

  1. 设置引导加载程序变量

    最重要的一步是减少 kern.hz 可调参数,以降低Parallels环境下FreeBSD的CPU利用率。这是通过在 /boot/loder.conf 中添加以下行来实现的:

    如果没有此设置,空闲的FreeBSD Parallels客户机将使用单处理器iMac®大约15%的CPU。更改后,使用率将接近5%。

    如果安装FreeBSD 14.0或更高版本,并且CPU利用率仍然很高,请在 /boot/loder.conf 中添加以下附加行:

  2. 创建新的内核配置文件

    所有SCSI、FireWire和USB设备驱动程序都可以从自定义内核配置文件中删除。Parallels提供了一个由 ed(4) 驱动程序使用的虚拟网络适配器,因此可以从内核中删除除 ed(4)miibus(4) 之外的所有网络设备。

  3. 配置网络

    最基本的网络设置使用DHCP将虚拟机连接到与主机Mac®相同的局域网。这可以通过在 /etc/rc.conf 中添加 ifconfig.ed0=“DHCP” 来实现。【34. 高级网络】中描述了更高级的网络设置。

24.3. FreeBSD作为macOS®VMware Fusion的访客

VMware Fusion for Mac®是一款商业软件产品,适用于运行macOS®12或更高版本的Apple®Mac®计算机。FreeBSD是一个完全支持的客户操作系统。在macOS®上安装VMware Fusion后,用户可以配置虚拟机,然后安装所需的客户操作系统。

24.3.1. 在VMware Fusion上安装FreeBSD

第一步是启动VMware Fusion,它将加载 Virtual Machine Library 。点击 +→New 创建虚拟机:

24.3.1-1

这将加载 New Virtual Machine Assistant 。选择 Create a custom virtual machine ,然后单击 Continus 继续:

24.3.1-2

选择 Other 作为操作系统,并在提示时选择 FreeBSD XFreeBSD X 64 位作为版本:

24.3.1-3

选择固件(建议使用UEFI):

24.3.1-4

选择 Create a new virtual disk ,然后单击 Continue

24.3.1-5

检查配置并单击 Finish

24.3.1-6

选择虚拟机的名称及其应保存的目录:

24.3.1-7

command+E 打开虚拟机设置,然后单击 CD/DVD

24.3.1-8

选择FreeBSD ISO镜像或CD/DVD:

24.3.1-9

启动虚拟机:

24.3.1-10

像往常一样安装FreeBSD:

24.3.1-11

安装完成后,可以修改虚拟机的设置,例如内存使用情况和虚拟机可以访问的CPU数量:

24.3.1-12

CD-ROM设备的状态。通常,当不再需要CD/DVD/ISO时,它会与虚拟机断开连接。

24.3.1-13

最后要更改的是虚拟机将如何连接到网络。要允许从主机以外的其他机器连接到虚拟机,请选择直接连接到物理网络(桥接)。否则,共享主机的互联网连接(NAT)是首选,这样虚拟机就可以访问互联网,但网络无法访问虚拟机。

24.3.1-14

修改设置后,启动新安装的FreeBSD虚拟机。

24.3.2. 在VMware Fusion上配置FreeBSD

使用VMware Fusion在macOS®X上成功安装FreeBSD后,可以采取许多配置步骤来优化系统以进行虚拟化操作。

  1. 设置引导加载程序变量

    最重要的一步是减少 kern.hz 可调,以降低VMware Fusion环境下FreeBSD的CPU利用率。这是通过在 /boot/loder.conf 中添加以下行来实现的:

    如果没有此设置,空闲的FreeBSD VMware Fusion客户机将使用单处理器iMac®大约15%的CPU。更改后,使用率将接近5%。

  2. 创建新的内核配置文件

    可以从自定义内核配置文件中删除所有FireWire和USB设备驱动程序。VMware Fusion提供了一个由 em(4) 驱动程序使用的虚拟网络适配器,因此可以从内核中删除除 em(4) 之外的所有网络设备。

  3. 配置网络

    最基本的网络设置使用DHCP将虚拟机连接到与主机Mac®相同的局域网。这可以通过在 /etc/rc.conf 中添加 ifconfig.em0=“DHCP” 来实现。【34. 高级网络】中描述了更高级的网络设置。

  4. 安装驱动程序并打开虚拟机工具

    为了在VMWare上顺利运行FreeBSD,应该安装驱动程序:

  5. 启用鼠标

    一些用户报告了在虚拟机中使用鼠标时出现的问题。可以通过在 /boot/loder.conf 中附加以下内容来启用鼠标:

24.4. FreeBSD作为VirtualBox™的访客

FreeBSD在VirtualBox™中作为访客运行良好。虚拟化软件可用于大多数常见的操作系统,包括FreeBSD本身。

VirtualBox™客户机新增功能支持:

• 剪贴板共享。 • 鼠标指针集成。 • 主机时间同步。 • 窗口缩放。 • 无缝模式。

首先,在FreeBSD客户机中安装 emulators/virtualbox-ose-additions 包或端口。这将安装端口:

将以下行添加到 /etc/rc.conf

如果使用 ntpd(8)ntpdate(8) ,请禁用主机时间同步:

Xorg将自动识别 vboxvideo 驱动程序。也可以在 /etc/X11/xorg.conf 中手动输入:

要使用 vboxmouse 驱动程序,请调整 /etc/X11/xorg.conf 中的鼠标部分:

通过使用 mount_vboxvfs 挂载用于主机和VM之间文件传输的共享文件夹,可以访问它们。可以使用VirtualBox GUI或通过 vboxmanager 在主机上创建共享文件夹。例如,要在 /mnt/bsdboxshare 下为名为 BSDBox 的VM创建一个名为 myshare 的共享文件夹,请运行:

请注意,共享文件夹名称不得包含空格。从来宾系统中装载共享文件夹,如下所示:

24.5. FreeBSD作为VirtualBox™的主机

VirtualBox™是一个积极开发的完整虚拟化软件包,适用于大多数操作系统,包括Windows®、macOS®、Linux®和FreeBSD。它同样能够运行类似Windows®或UNIX®的客户机。它作为开源软件发布,但在单独的扩展包中提供了闭源组件。这些组件包括对USB 2.0设备的支持。更多信息可以在 VirtualBox™wiki的下载页面 上找到。目前,这些扩展不适用于FreeBSD。

24.5.1. 安装VirtualBox™

VirtualBox™可作为FreeBSD包或 emulators/VirtualBox-ose 中的端口提供。可以使用以下命令安装端口:

端口配置菜单中的一个有用选项是 GuestAdditions 程序套件。这些在客户机操作系统中提供了许多有用的功能,如鼠标指针集成(允许在主机和客户机之间共享鼠标,而无需按特殊的键盘快捷键进行切换)和更快的视频渲染,特别是在Windows®客户机中。访客安装完成后,可以在 Devices 菜单中添加访客。

在VirtualBox™首次启动之前,需要进行一些配置更改。该端口在 /boot/modules 中安装一个内核模块,该模块必须加载到正在运行的内核中:

为确保模块在重新启动后始终加载,请将此行添加到 /boot/loader.conf

要使用允许桥接或仅主机联网的内核模块,请将此行添加到 /etc/rc.conf 并重新启动计算机:

vboxusers 组是在VirtualBox™安装过程中创建的。所有需要访问VirtualBox™的用户都必须添加为此组的成员。pw 可用于添加新成员:

/dev/vboxnetctl 的默认权限是限制性的,需要更改以实现桥接网络:

要使此权限更改永久化,请在 /etc/devfs.conf 中添加以下行:

要启动VirtualBox™,请在Xorg会话中键入:

有关配置和使用VirtualBox™的更多信息,请参阅官方网站。有关FreeBSD的特定信息和故障排除说明,请参阅FreeBSD wiki中的相关页面。

24.5.2. VirtualBox™USB支持

VirtualBox™可以配置为将USB设备传递到客户操作系统。OSE版本的主机控制器仅限于模拟USB 1.1设备,直到支持USB 2.0和3.0设备的扩展包在FreeBSD上可用。

要让VirtualBox™知道连接到机器的USB设备,用户需要是 operator 组的成员。

然后,将以下内容添加到 /etc/devfs.rules 中,或者如果还不存在,则创建此文件:

要加载这些新规则,请在 /etc/rc.conf 中添加以下内容:

然后,重新启动 devfs

重新启动登录会话和VirtualBox™以使这些更改生效,并根据需要创建USB过滤器。

24.5.3. VirtualBox™主机DVD/CD访问

客人可以通过共享物理驱动器访问主机DVD/CD驱动器。在VirtualBox™中,这是通过虚拟机设置中的存储窗口设置的。如果需要,请先创建一个空的IDECD/DVD设备。然后从虚拟CD/DVD驱动器选择的弹出菜单中选择主机驱动器。将出现一个标记为 Passthrough 的复选框。这允许虚拟机直接使用硬件。例如,只有选择了此选项,音频CD或刻录机才能工作。

为了使用VirtualBox™DVD/CD功能,用户需要访问 /dev/xpt0/dev/cdN/dev/passN 。这通常是通过让用户成为操作员的一员来实现的。必须通过在 /etc/devfs.conf 中添加以下行来更正这些设备的权限:

24.6. FreeBSD上QEMU的虚拟化

QEMU是一个完全开源的通用机器模拟器和虚拟器。它由一个庞大而活跃的社区开发,为FreeBSD、OpenBSD和NetBSD以及其他操作系统提供支持。

来自QEMU文档:

QEMU可以模拟多种架构,包括 Arm™i386x86_64MIPS™s390XSPARC™(SPARC™和Sparc64™)等。QEMU系统仿真器目标列表 会定期更新。

本节介绍如何在FreeBSD上使用QEMU进行系统仿真和用户模式仿真,并提供使用QMEU命令和命令行实用程序的示例。

24.6.1. 安装QEMU软件

QEMU可以作为FreeBSD包或 emulators/qemu 中的端口提供。对于大多数用户来说,包构建包括健全的选项和默认值,是推荐的安装方法。

软件包安装包括几个依赖项。安装完成后,创建一个指向最常用的QEMU主机版本的链接。如果主机是Intel™或AMD™64位系统,则:

以非root用户身份运行以下命令来测试安装:

这将打开一个窗口,其中QEMU正在尝试从硬盘、软盘、DVD/CD和PXE启动。尚未设置任何内容,因此该命令将产生几个错误,并以 No bootable device 结束,如下图所示。然而,它确实表明QEMU软件已正确安装。

24.6.1

24.6.2. 虚拟机安装

按照以下步骤创建两个名为 leftright 的虚拟机。大多数命令可以在没有root权限的情况下执行。

  1. 创建一个测试环境来使用QEMU:

    SCRIPTS 目录用于启动脚本和实用程序。ISO 目录用于来宾ISO引导映像。VM 目录是虚拟机映像(VMs)将驻留的位置。

  2. 将FreeBSD的最新版本下载到 ~/QEMU/ISO

    下载完成后,创建一个简写链接。下面的启动脚本中使用了此简写链接。

  3. 将目录更改为虚拟机的位置(~/QEMU/VM)。运行 qemu-img(1)left VM创建磁盘映像:

    QEMU raw 格式是为性能而设计的。该格式简单明了,没有开销,因此速度更快,特别是在高性能或高吞吐量的情况下。用例是在不需要快照等其他功能的情况下实现最大性能。此格式用于下面 left VM的脚本中。

    另一种格式是 qcow2 ,它使用QEMU的“写时复制”技术来管理磁盘空间。此技术不需要完整的15G磁盘,只需要一个由VM直接管理的存根版本。当VM写入磁盘时,磁盘会动态增长。这种格式支持快照、压缩和加密。此格式的用例用于开发、测试和需要这些高级功能的场景。此格式用于下面 right VM的脚本中。

    再次运行 qemu-img(1) ,使用 qcow2right VM创建磁盘映像:

    要查看文件的实际大小,请使用:

  4. 使用以下命令为两个虚拟机设置网络。在这个例子中,主机网络接口是 em0 。如有必要,请更改它以适应主机系统的接口。这必须在每次主机重启后完成,以使QEMU客户机能够通信。

    上述命令创建了两个 tap(4) 设备(tap0tap1)和一个 if_bridge(4) 装置(bridge0)。然后,他们将 tap 设备和本地主机接口(em0)添加到 bridge 中,并设置两个 sysctl(8) 条目,以允许普通用户打开抽头设备。这些命令将允许虚拟机与主机上的网络堆栈进行通信。

  5. 更改为 ~/QEMU/SCRIPTS ,使用以下脚本启动第一个虚拟机 left 。此脚本使用QEMU原始磁盘格式。

QEMU将在一个单独的窗口中启动一个虚拟机,并引导FreeBSD iso,如下图所示。QEMU手册页 qemu(1) 中详细描述了所有命令选项,如 -cpu-boot

24.6.2-1

24.6.2-2

在安装过程中,有几点需要注意:

安装完成后,虚拟机将重新启动到新安装的FreeBSD映像中。

以root身份登录并按如下方式更新系统:

再次以 root 身份登录并添加所需的任何包。要在客户机中使用X Window系统,请参阅下面的“使用X Windows系统”一节。

这就完成了“左”VM的设置。

要安装 right 的虚拟机,请运行以下脚本。此脚本具有tap1、format=qcow2、映像文件名、MAC地址和终端窗口名称所需的修改。如果需要,请按照上述注释中的描述包含 -runas 参数。

安装完成后, leftright 机器可以相互通信并与主机通信。如果主机上有严格的防火墙规则,请考虑添加或修改规则,以允许网桥和抽头设备相互通信。

24.6.3. 使用技巧

24.6.3.1. 使用X Window系统

【5.4. [安装Xorg】描述了如何设置 X Window 系统。有关初始 X Window 设置,请参阅该指南,然后咨询【8. 桌面环境】以了解如何设置完整的桌面。

本节演示XFCE桌面的使用。

安装完成后,以普通用户身份登录,然后键入:

XFCE4窗口管理器应启动并显示一个功能正常的图形桌面,如下图所示。初次启动时,可能需要一分钟才能显示桌面。有关使用详细信息,请参阅XFCE网站上的文档。

24.6.3-1

在这里, left VM已安装了 X Window 系统,而 right VM仍处于文本模式。

24.6.3.2. 使用QEMU窗口

QEMU窗口作为一个完整的FreeBSD控制台,能够运行多个虚拟终端,就像裸机系统(bare-metal system)一样。

要切换到另一个虚拟控制台,请单击QEMU窗口并键入 Alt+F2Alt+F3 。FreeBSD应该切换到另一个虚拟控制台。下图显示了在 ttyv3 上显示虚拟控制台的 left VM。

24.6.3-2

24.6.3.3. 使用QEMU窗口菜单

QEMU窗口的另一个功能是 View 菜单和缩放控件。最有用的是 Zoom to Fit 。单击此菜单选项后,可以通过单击窗口角控件并调整窗口大小来调整QEMU窗口的大小。下图显示了在图形模式下调整 left 窗口大小的效果。

24.6.3-3

24.6.3.4. 其他QEMU窗口菜单选项

View 菜单中还显示了

QEMU窗口的 Machine 菜单允许对来宾VM进行四种类型的控制:

24.6.4. 向来宾VM添加串行端口接口

要实现串行控制台,运行FreeBSD的客户机VM需要向 /boot/loader.conf 插入

以允许使用FreeBSD串行控制台。

下面更新的配置显示了如何在来宾VM上实现串行控制台。运行脚本以启动VM。

24.6.4

在上图中,在VM启动时,串行端口被重定向到主机系统上的TCP端口,QEMU监视器等待(wait=on)激活来宾VM,直到在指定的localhost端口上发生 telnet(1) 连接。在从单独的会话接收到连接后,FreeBSD系统开始启动,并在 /boot/loader.conf 中查找控制台指令。使用指令 console=comconsole ,FreeBSD在串行端口上启动控制台会话。QEMU监视器检测到这一点,并将该串行端口上必要的字符I/O定向到主机上的telnet会话。系统启动,完成后,在串行端口(ttyu0)和控制台(ttyv0)上启用登录提示。

值得注意的是,TCP上的串行重定向发生在虚拟机外部。与虚拟机上的任何网络都没有交互,因此它不受任何防火墙规则的约束。把它想象成一个坐在真实机器上RS-232或USB端口上的哑终端(dumb terminal)。

24.6.4.1. 串行控制台使用注意事项

在串行控制台上,如果调整了窗口大小,请执行 resizewin(1) 以更新终端大小。

停止向控制台(QEMU控制台和串行端口)发送syslog消息可能是可取的(甚至是必要的)。有关重定向控制台消息的详细信息,请参阅 syslog.conf(5)

24.6.5. QEMU用户模式仿真

QEMU还支持在与主机CPU不同的架构上运行预编译的应用程序。例如,可以在x86_64主机上运行Sparc64架构操作系统。下一节将对此进行演示。

24.6.5.1. 在x86_64主机上设置SPARC64来宾VM

设置一个与主机架构不同的新虚拟机需要几个步骤:

在以下过程中,OpenBSD 6.8 SPARC64软件的副本用于此QEMU用户模式仿真练习。

  1. 从OpenBSD档案下载OpenBSD 6.8 Sparc64。

    在OpenBSD下载网站上,只维护最新版本。有必要搜索档案以获取过去的版本。

  2. 为Sparc64虚拟机创建新的磁盘映像类似于上面的 right 虚拟机。本例对磁盘使用QEMU qcow2格式:

  3. 使用下面的脚本创建新的Sparc64架构。与上面的示例一样,运行脚本,然后启动一个新的会话,并在指定的端口上将 telnet 连接到localhost:

注意以下事项:

如果一切设置正确,系统将如下图所示启动。

24.6.5

安装系统后,修改脚本并将引导参数更改为 -boot c 。这将指示QEMU从提供的硬盘而不是CDROM引导。

安装的系统可以像任何其他客户虚拟机一样使用。然而,客户机的底层架构是Sparc64,而不是x86_64。

下图显示了已安装系统的root登录并运行 uname(1)

24.6.5-1

24.6.6. 使用QEMU监视器

QEMU监视器控制正在运行的QEMU仿真器(客户VM)。

使用监视器,可以:

以及许多其他操作。

监视器最常见的用途是检查VM的状态,以及添加、删除或更改设备。某些操作,如迁移,仅在KVM、Xen等管理程序加速器下可用,在FreeBSD主机上不受支持。

在使用图形桌面环境时,使用QEMU监视器的最简单方法是从终端会话启动QEMU时使用 -monitor stdio 选项。

这将在终端窗口中产生一个新的提示(qemu),如下图所示。

24.6.6-1

该图还显示了在FreeBSD引导序列中冻结系统的 stop 命令。在监视器中输入 cont 命令之前,系统将保持冻结状态。

24.6.6.1. 向虚拟机添加新磁盘

要将新磁盘添加到正在运行的VM中,需要如上所述准备磁盘:

下图显示了在VM中添加新磁盘所需的监视器命令序列。在监视器中使用 device_add 命令添加设备后,它就会显示在图下半部分所示的FreeBSD系统控制台上。可以根据需要配置磁盘。

请注意,如果要在VM重新启动后使用新磁盘,则必须将其添加到启动脚本中。

24.6.6-2

24.6.6.2. 使用QEMU监视器管理快照

QEMU的文档描述了使用术语快照时的几个类似概念。命令行上有 -snapshot 选项,它指的是使用驱动器或驱动器的一部分来包含设备的副本。然后是监视器命令 snapshot_blkdevsnapshot_brkdev_internal ,它们描述了复制blockdev设备的实际行为。最后,还有监视器命令 savevmloadvmdelvm 命令,它们涉及创建和保存、加载或删除整个虚拟机的副本。与后者一起,监视器 info snapshot 命令列出了最近快照的详细信息。

本节将重点介绍创建、保存和加载完整的VM映像,并将为此使用快照一词。

首先,从头开始重新创建 left VM,这次使用 qcow2 格式。

安装完成后,重新启动,这次使用 -monitor stdio 选项允许使用监视器。

要演示快照,可以使用以下过程:

  1. 从头开始安装FreeBSD
  2. 准备环境并使用savevm monitor命令拍摄快照
  3. 安装多个软件包
  4. 关闭系统
  5. 重新启动一个裸QEMU实例,并使用monitor命令loadvm还原VM
  6. 观察恢复的VM没有任何包

Prepare the environment 步骤中,在单独的虚拟控制台(ttyv1)中,使用vi(1) 启动编辑会话,模拟用户活动。如果需要,可以启动其他程序。快照应考虑拍摄快照时运行的所有应用程序的状态。

下图显示了新安装的没有软件包的FreeBSD系统,以及ttyv1上的编辑会话。vi(1) 编辑器当前处于插入模式,打字员正在键入单词“broadcast”。

24.6.6-3

要生成快照,请在监视器中输入 savevm 。一定要给它一个标签(比如 original_install )。

接下来,在主控制台窗口中,安装一个没有依赖关系的包,如 zip(1) 。完成后,租用监视器并创建另一个快照(snap1_pkg+zip)。

下图显示了上述命令的结果和 info shapshots 命令的输出。

24.6.6-4

重新启动系统,在FreeBSD启动之前,切换到监视器并输入 stop 。VM将停止。

使用上面使用的标签输入 loadvm(此处为 original_install)。

VM屏幕将立即切换到上面输入 savevm 命令的确切时刻。请注意,VM仍然停止。

输入 cont 启动VM,切换到 ttyv1 上的编辑会话,然后在键盘上键入一个字母。编辑器仍处于插入模式,应相应地做出响应。拍摄快照时运行的任何其他程序都不应受到影响。

以上步骤显示了如何拍摄快照、修改系统,然后通过还原上一个快照进行“回滚”。

默认情况下,QEMU将快照数据存储在与映像相同的文件中。使用 qemu-img(1) 查看快照列表,如下图所示。

24.6.6-5

24.6.7. 使用QEMU USB设备

QEMU支持创建由映像文件支持的虚拟USB设备。这些是虚拟USB设备,可以像真正的USB设备一样进行分区、格式化、挂载和使用。

此配置包括 id=usbstick-drive 规范、原始格式和映像文件(必须由 qemu-img(1) 创建)。下一行包含 USB EHCI 控制器的 -device usb-ehci 规范,id=ehci 。最后, -device usb-storage 规范将上述驱动器连接到EHCI USB总线。

当系统启动时,FreeBSD将识别一个USB集线器,添加连接的USB设备,并将其分配给 da0 ,如下图所示。

24.6.7

该设备已准备好使用 gpart(8) 进行分区,并使用 newfs(8) 格式化。由于USB设备由 qemu-img(1) 创建的文件支持,因此写入设备的数据将在重新启动后持续存在。

24.6.8. 通过Passthrough使用主机USB设备

QEMU USB直通支持在版本9.0.1(Summer,2024)中被列为实验性支持。但是,以下步骤显示了来宾VM如何使用安装在主机上的USB记忆棒。

有关更多信息和示例,请参阅:

https://www.qemu.org/docs/master/system/devices/usb.html

下图的上半部分显示了QEMU监视器命令:

24.6.8-1

如前所述,一旦 device_add 完成,FreeBSD内核就会识别出一个新的USB设备,如下半部分所示。

使用新设备如下图所示。

24.6.8-2

如果USB设备被格式化为FAT16或FAT32文件系统,则可以使用 mount_msdosfs(8) 将其挂载为MS-DOS™文件系统,如图所示。将 /etc/hosts 文件复制到新安装的驱动器,并进行校验和以验证USB设备上文件的完整性。然后使用 umount(8) 卸载设备。

如果USB设备格式化为NTFS,则需要安装 fusefs-ntfs 包并使用 ntfs-3g(8) 访问设备:

更改上述设备标识符以匹配安装的硬件。有关使用NTFS文件系统的更多信息,请参阅 ntfs-3g(8)

24.6.9. QEMU关于FreeBSD的总结

如上所述,QEMU与几个不同的管理程序加速器一起工作。

QEMU支持的虚拟化加速器列表包括:

本节中的所有示例都使用了 Tiny Code Generatortcg)加速器,因为这是目前FreeBSD上唯一支持的加速器。

24.7. FreeBSD作为bhyve主机

bhyve BSD许可的管理程序成为FreeBSD 10.0-RELEASE基础系统的一部分。此管理程序支持多个客户机,包括FreeBSD、OpenBSD、许多Linux®发行版和Microsoft Windows®。默认情况下,bhyve提供对串行控制台的访问,并且不模拟图形控制台。较新CPU的虚拟化卸载功能用于避免翻译指令和手动管理内存映射的传统方法。

bhyve设计要求

ARM仅支持纯ARMv8.0虚拟化,目前未使用虚拟化主机扩展。使用多个vCPU托管Linux®客户机或FreeBSD客户机需要VMX无限制模式支持(UG)。

判断英特尔或AMD处理器是否支持bhyve的最简单方法是运行 dmesg 或在 /var/run/dmesg.boot 中查找AMD®处理器 Features2 行上的 POPCNT 处理器功能标志,或英特尔®处理器 VT-x 行上的 EPTUG

24.7.1. 准备主机

在bhyve中创建虚拟机的第一步是配置主机系统。首先,加载bhyve内核模块:

有几种方法可以将虚拟机访客连接到主机的网络;实现这一点的一种直接方法是为虚拟机中的网络设备创建一个分接接口(tap interface)进行连接。为了使网络设备参与网络,还创建一个包含分接接口和物理接口作为成员的网桥接口。在这个例子中,物理接口是 igb0

24.7.2. 创建FreeBSD客户机

创建一个文件用作来宾计算机的虚拟磁盘。指定虚拟磁盘的大小和名称:

下载FreeBSD的安装镜像进行安装:

FreeBSD附带了一个示例脚本 vmrun.sh ,用于在bhyve中运行虚拟机。它将启动虚拟机并在循环中运行,因此如果崩溃,它将自动重新启动。vmrun.sh 有几个选项来控制机器的配置,包括:

最后一个参数是虚拟机的名称,用于跟踪正在运行的机器。以下命令列出了所有可用的程序参数选项:

此示例在安装模式下启动虚拟机:

虚拟机将引导并启动安装程序。在虚拟机中安装系统后,当系统询问是否在安装结束时放入shell时,选择 【Yes】。

重新启动虚拟机。当重新启动虚拟机导致bhyve退出时,vmrun.sh 脚本会在循环中运行 bhyve 并自动重新启动它。发生这种情况时,从引导加载程序菜单中选择reboot选项以退出循环。现在可以从虚拟磁盘启动来宾:

24.7.3. 创建Linux®客户机

Linux客户机可以像任何其他基于UEFI的常规客户机虚拟机一样启动,也可以使用 sysutils/grub2-bhyve 端口启动。

为此,首先确保端口已安装,然后创建一个文件作为来宾机的虚拟磁盘:

使用 grub2-bhyve 启动Linux虚拟机是一个两步过程。

  1. 首先必须加载内核,然后才能启动客户机。
  2. Linux®内核加载了sysutils/grub2-bhyve。

创建一个 device.map ,grub将使用它将虚拟设备映射到主机系统上的文件:

使用 sysutils/grub2-bhyve 从ISO映像加载Linux®内核:

这将启动 grub 。如果安装CD包含 grub.cfg ,将显示一个菜单。如果没有,则必须手动定位和加载 vmlinuzinitrd 文件:

现在Linux®内核已经加载,可以启动客户机了:

系统将引导并启动安装程序。在虚拟机中安装系统后,重新启动虚拟机。这将导致bhyve退出。虚拟机的实例需要先销毁,然后才能再次启动:

现在可以直接从虚拟磁盘启动客户机。加载内核:

启动虚拟机:

Linux®现在将在虚拟机中启动,并最终显示登录提示。登录并使用虚拟机。完成后,重新启动虚拟机以退出bhyve。销毁虚拟机实例:

24.7.4. 使用UEFI固件引导bhyve虚拟机

除了 bhyveloadgrub-bhyve ,bhyve管理程序还可以使用UEFI固件引导虚拟机。此选项可能支持其他加载器不支持的客户操作系统。

要使用bhyve中的UEFI支持,请首先获取UEFI固件映像。这可以通过安装 sysutils/bhyve 固件端口或软件包来完成。

固件就绪后,将 -l bootrom/path/to/firmware 标志添加到 bhyve 命令行中。实际的bhyve命令可能看起来像这样:

要允许来宾存储UEFI变量,请使用附加在 -l 标志后的变量文件。请注意,bhyve会将客户修改写入给定的变量文件。因此,请确保首先创建变量模板文件的每个客户副本:

然后,将该变量文件添加到bhyve参数中:

要查看或修改变量文件内容,请从主机使用 efivar(8)

sysutils/bhyve 固件还包含一个启用CSM的固件,用于在传统BIOS模式下引导不支持UEFI的客户机:

24.7.5. 面向bhyve访客的图形UEFI帧缓冲区

UEFI固件支持对于主要是图形客户操作系统(如Microsoft Windows®)特别有用。

还可以使用 -s 29,fbuf,tcp=0.0.0.0:5900 标志启用对UEFI-GOP帧缓冲区的支持。帧缓冲区分辨率可以配置为 w=800h=600 ,并且可以通过添加 wait 来指示bhyve在引导访客之前等待VNC连接。帧缓冲区可以从主机访问,也可以通过VNC协议通过网络访问。此外,可以添加 -s 30,xhci,tablet 来实现与主机的精确鼠标光标同步。

生成的bhyve命令如下:

注意,在BIOS仿真模式下,一旦控制权从固件传递到客户操作系统,帧缓冲区将停止接收更新。

24.7.6. 创建Microsoft Windows®客户机

为Windows 10或更早版本设置来宾可以直接从原始安装介质完成,这是一个相对简单的过程。除了最低资源要求外,以来宾身份运行Windows还需要

使用Windows安装ISO启动虚拟机客户机的示例:

安装过程中只应使用一两个VCPUs,但安装Windows后可以增加此数量。

必须安装VirtIO驱动程序才能使用定义的 virtio-net 网络接口。另一种方法是通过在上述命令行中将 virtio-net 更改为 e1000 来切换到E1000(Intel E82545)仿真。然而,性能将受到影响。

24.7.6.1. 创建Windows 11客户机

从Windows 11开始,微软引入了TPM 2模块的硬件要求。bhyve支持将硬件TPM传递给访客。可以修改安装介质以禁用相关硬件检查。这个过程的详细描述可以在 FreeBSD Wiki 上找到。

24.7.7. 将ZFS与bhyve客户机结合使用

如果主机上有ZFS可用,使用ZFS卷而不是磁盘映像文件可以为客户机提供显著的性能优势。ZFS卷可以通过以下方式创建:

启动VM时,将ZFS卷指定为磁盘驱动器:

在主机和客户机内部使用ZFS时,请记住缓存虚拟机内容的两个系统的竞争内存压力。为了缓解这种情况,可以考虑将主机的ZFS文件系统设置为仅使用元数据缓存。为此,将以下设置应用于主机上的ZFS文件系统,将 <name> 替换为虚拟机的特定zvol数据集名称。

24.7.8. 创建虚拟机快照

现代管理程序允许用户创建其状态的“快照”;这样的快照包括客户机的磁盘、CPU和内存内容。通常可以独立于来宾是正在运行还是已关闭来拍摄快照。然后,可以重置虚拟机并将其恢复到拍摄快照时的精确状态。

24.7.8.1. ZFS快照

使用ZFS卷作为虚拟机的后备存储可以对客户机的磁盘进行快照。例如:

虽然可以在客户机运行时以这种方式快照ZFS卷,但请记住,当客户机处于活动状态时,虚拟磁盘的内容可能处于不一致的状态。因此,建议在执行此命令之前先关闭或暂停客户机。默认情况下不支持暂停客户机,需要先启用(请参阅【24.7.8.2. 内存和CPU快照】)

24.7.8.2. 内存和CPU快照(实验功能)

从FreeBSD 13开始,bhyve有一个实验性的“快照”功能,用于将客户机的内存和CPU状态转储到文件中,然后停止虚拟机。稍后可以从快照文件内容中恢复客户机。

但是,默认情况下不启用此功能,需要从源代码重建系统。有关使用自定义选项编译内核的过程的深入描述,请参阅从源代码构建。

首先,在/etc/src.conf中添加以下内容:

然后按照 【26.6.2. 快速启动.从源代码更新】一章中概述的步骤构建和安装world和内核。

要验证快照功能的成功激活,请输入

并检查输出是否列出了 --suspend 标志。如果标志缺失,则该功能未正确激活。

然后,快照并挂起所选的正在运行的虚拟机:

这将创建三个文件:

要从快照还原客户机,请在 bhyve 中使用 -r 标志:

在不同的CPU架构上还原来宾快照将不起作用。通常,在与快照创建者不同的系统上尝试还原可能会失败。

24.7.9. Jailing bhyve

为了提高安全性并将虚拟机与主机操作系统分离,可以在jail中运行bhyve。有关jail及其安全福利的深入描述,请参阅【17. Jails】。

24.7.9.1. 为bhyve创建一个Jail

第一,创建jail环境。如果使用UFS文件系统,只需运行:

如果使用ZFS文件系统,使用以下命令:

然后为虚拟机 bhyvevm0 创建ZFS zvol:

如果不使用ZFS,请使用以下命令直接在jail目录结构中创建磁盘映像文件:

下载FreeBSD镜像,最好是与主机相同或更早的版本,并将其解压缩到jail目录中:

接下来,将devfs规则集添加到 /etc/devfs.rules 中:

这些规则将导致bhyve

这些规则可以根据需要扩展和变化,以适应不同的访客和界面名称。

重新启动devfs以加载更改:

然后在 /etc/jail.conf/etc/jail.conf.d 中添加新监狱的定义。将接口号 $if 和IP地址替换为个人变体。

示例33. 使用NAT或防火墙路由流量

本例假设使用 pfipfw 等防火墙对监狱流量进行NAT。有关实现此功能的可用选项的更多详细信息,请参阅【33. 防火墙】一章。

示例34. 使用桥接网络连接

24.7.9.2. 配置Jail

要首次启动jail并进行一些额外的配置工作,请输入:

重新启动并启用jail:

然后,在jail内创建一个虚拟机。对于FreeBSD客户机,请先下载安装ISO:

24.7.9.3. 在Jail内创建虚拟机

要创建虚拟机,请先使用 bhyvectl 对其进行初始化:

最后,使用首选的开始客户机的方式。

示例35. 从vmrun.sh和ZFS开始

示例36. 使用vmrun.sh和UFS开始

示例37. 使用ZFS为UEFI客户机启动bhyve

当想要使用UEFI客户机时,请记住首先在jail中安装所需的固件包 sysutils/bhyve-firmware

然后直接使用 bhyve

这允许通过VNC连接到虚拟机 bhyvevm0 ,以及位于 /dev/nmdbbhyve0B 的串行控制台。

24.7.10. 虚拟机控制台

将bhyve控制台封装在会话管理工具(如 sysutils/tmuxsysutils/screen )中是有利的,以便分离和重新连接到控制台。也可以将bhyve的控制台设置为可以使用 cu 访问的空调制解调器设备。为此,请加载nmdm内核模块,并将 -l com1, stdio 替换为 -l com2, /dev/nmdm0A 。根据需要自动创建 /dev/nmdm 设备,其中每个设备都是一对,对应于零调制解调器电缆的两端( /dev/nmdm0A/dev/nmdm0B )。有关更多信息,请参见 nmdm(4)

要断开与控制台的连接,请输入换行符(即按 RETURN ),后跟波浪号(~),最后输入点(.)。请记住,只有在登录会话保持活动状态时才会断开连接。因此,连接到同一控制台的另一个用户可以使用任何活动会话,而无需首先进行身份验证。出于安全原因,建议在断开连接之前注销。

nmdm 设备路径中的数字对于每个虚拟机都必须是唯一的,并且在bhyve启动之前不得被任何其他进程使用。该数字可以任意选择,不需要从连续的数字序列中选取。设备节点对(即 /dev/nmdm0a/dev/nmdm0b )在bhyve连接其控制台时动态创建,并在关闭时销毁。在创建启动虚拟机的脚本时,请记住这一点:确保为所有虚拟机分配了唯一的nmdm设备。

24.7.11. 管理虚拟机

/dev/vmm 中为每个虚拟机创建一个设备节点。这允许管理员轻松查看正在运行的虚拟机列表:

可以使用 bhyvectl 销毁指定的虚拟机:

以这种方式销毁虚拟机意味着立即将其杀死。任何未保存的数据都将丢失,打开的文件和文件系统可能会损坏。要优雅地关闭虚拟机,请向其bhyve进程发送 TERM 信号。这将触发客户机的ACPI关闭事件:

24.7.12. 工具和实用程序

端口中有许多实用程序和应用程序可以帮助简化bhyve虚拟机的设置和管理:

表34. bhyve管理器

名称授权文档
vm-bhyveBSD-2sysutils/vm-bhyve文档
CBSDBSD-2sysutils/cbsd文档
Virt-ManagerLGPL-3deskutils/virt-manager文档
Bhyve RC ScriptUnknownsysutils/bhyve-rc文档
bmdBSD-2sysutils/bmd文档
vmstatedBSD-2sysutils/vmstated文档

24.7.13. 持久配置

为了将系统配置为在启动时启动bhyve客户机,需要更改一些配置文件。

  1. /etc/sysctl.conf

    当使用抽头接口作为网络后端时,可以手动将每个使用的抽头接口设置为UP,也可以简单地设置以下sysctl:

  2. /etc/rc.conf

    要通过网桥将虚拟机的抽头设备连接到网络,需要将设备设置持久化在 /etc/rc.conf 中。此外,通过 kld_list 配置变量为bhyve和 nmdm 设备加载必要的内核模块 vmmnmdm 。配置 ifconfig_bridge0 时,请确保将 <ipaddr>/<netmask> 替换为物理接口的实际IP地址(本例中为 igb0 ),并从物理设备中删除IP设置。

示例38. 设置网桥设备的IP

对于具有连接到IP 10.10.10.1 和网络掩码 255.255.255.0 的网络的 igb0 接口的主机,请使用以下命令:

24.8. FreeBSD作为Xen™主机

Xen是用于Intel®和ARM®架构的GPLv2许可类型1管理程序。自FreeBSD 8.0以来,FreeBSD已包含i386™和AMD®64位DomU以及Amazon EC2无特权域(虚拟机)支持,并在FreeBSD 11.0中包含Dom0控制域(主机)支持。对准虚拟化(PV)域的支持已从FreeBSD 11中删除,转而支持硬件虚拟化(HVM)域,这提供了更好的性能。

Xen™是一个裸机管理程序(bare-metal hypervisor),这意味着它是BIOS之后加载的第一个程序。然后启动一个名为Domain-0(简称 Dom0 )的特殊特权访客。Dom0使用其特权直接访问底层物理硬件,使其成为高性能解决方案。它能够直接访问磁盘控制器和网络适配器。Dom0还使用Xen™管理工具来管理和控制Xen™虚拟机管理程序,以创建、列出和销毁虚拟机。Dom0为非特权域(通常称为 DomU)提供虚拟磁盘和网络。Xen™Dom0可以与其他虚拟机监控程序解决方案的服务控制台进行比较,而DomU是运行单个客户机虚拟机的地方。

Xen™可以在不同的Xen™服务器之间迁移虚拟机。当两个xen主机共享相同的底层存储时,迁移可以在不必先关闭VM的情况下完成。相反,迁移是在DomU运行时实时执行的,不需要重新启动它或计划停机时间。这在维护场景或升级窗口中很有用,可以确保DomU提供的服务仍然可用。Xen™的更多功能列在Xen Wiki概述页面上。请注意,FreeBSD还不支持所有功能

24.8.1. Xen™Dom0的硬件要求

要在主机上运行Xen™管理程序,需要某些硬件功能。将FreeBSD作为Xen主机(Dom0)运行需要主机处理器中的Intel扩展页表(Extended Page Tables,EPT)或AMD嵌套页表(Nested Page Tables,NPT)和输入/输出内存管理单元(Input/Output Memory Management Unit,IOMMU)支持。

24.8.2. Xen™Dom0控制域设置

用户应安装基于xen™4.18的 emulators/xen-kernelsysutils/xentools 包。

安装Xen软件包后,必须编辑配置文件,为Dom0集成准备主机。/etc/sysctl.conf 中的一个条目禁用了允许连接多少页内存的限制。否则,具有更高内存要求的DomU VM将无法运行。

另一个与内存相关的设置涉及更改 /etc/login.conf ,将 memorylocked 选项设置为 unlimited 。否则,创建DomU域可能会失败,并出现Cannot allocate memory (无法分配内存)错误。在对 /etc/login.conf 进行更改后,运行 cap_mkdb 以更新功能数据库。有关详细信息,请参阅【16.14. 资源限制】。

将Xen™控制台的条目添加到 /etc/ttys

/boot/loader.conf 中选择Xen™内核会激活Dom0。Xen™还需要主机为其自身和其他DomU域提供CPU和内存等资源。多少CPU和内存取决于个人要求和硬件能力。在这个例子中,8GB内存和4个虚拟CPU可用于Dom0。串行控制台也被激活,并定义了日志记录选项。

以下命令用于Xen 4.7软件包:

对于Xen 4.11及更高版本,应使用以下命令:

在系统启动期间激活 xencommons 服务:

这些设置足以启动启用Dom0的系统。然而,它缺乏DomU机器的网络功能。要解决此问题,请定义一个与系统主NIC的桥接接口,DomU VM可以使用该接口连接到网络。将 em0 替换为主机网络接口名称。

重新启动主机以加载Xen™内核并启动Dom0。

成功启动Xen™内核并再次登录系统后,Xen™管理工具xl用于显示有关域的信息。

输出确认Dom0(称为 Domain-0 )的ID为 0 并且正在运行。它还具有之前在 /boot/loader.conf 中定义的内存和虚拟CPU。更多信息可以在Xen™文档中找到。现在可以创建DomU客户机。

24.8.3. Xen™DomU客户机VM配置

非特权域由配置文件和虚拟或物理硬盘组成。DomU的虚拟磁盘存储可以是由 truncate(1) 或ZFS卷创建的文件,如【22.4.2. 创建和销毁卷】中所述。在这个例子中,使用了20 GB的卷。VM由ZFS卷、FreeBSD ISO映像、1GB RAM和两个虚拟CPU创建。使用 fetch(1) 检索ISO安装文件,并将其保存在本地名为 freebsd.iso 的文件中。

创建了一个名为xendisk0的20 GB ZFS卷,作为VM的磁盘空间。

新的DomU客户VM在文件中定义。还定义了一些特定的定义,如名称、键映射和VNC连接详细信息。以下 freebsd.cfg 包含此示例的最小DomU配置:

这些行将得到更详细的解释:

① 这定义了要使用哪种虚拟化。hvm 是指硬件辅助虚拟化或硬件虚拟机。客户操作系统可以在具有虚拟化扩展的CPU上无需修改即可运行,提供与在物理硬件上运行几乎相同的性能。generic 是默认值,并创建PV域。

② 此虚拟机的名称,以将其与在同一Dom0上运行的其他虚拟机区分开来。必修的。

③ VM可用的RAM数量(MB)。这个量是从管理程序的总可用内存中减去的,而不是Dom0的内存。

④ 客户机VM可用的虚拟CPU数量。为了获得最佳性能,不要创建虚拟CPU数量超过主机上物理CPU数量的客户机。

⑤ 虚拟网络适配器。这是连接到主机网络接口的网桥。mac 参数是在虚拟网络接口上设置的MAC地址。此参数是可选的,如果没有提供MAC,Xen™将生成一个随机的MAC。

⑥ 此VM的磁盘存储的磁盘、文件或ZFS卷的完整路径。选项和多个磁盘定义用逗号分隔。

⑦ 定义安装初始操作系统的引导介质。在这个例子中,它是之前下载的ISO映像。有关其他类型的设备和要设置的选项,请参阅Xen™文档。

⑧ 控制VNC连接到DomU串行控制台的选项。依次为:主动VNC支持、定义监听的IP地址、串行控制台的设备节点、鼠标精确定位的输入法和其他输入法。keymap 定义了要使用的keymap,默认情况下是 english 的。

在使用所有必要的选项创建文件后,通过将其作为参数传递给 xl create 来创建DomU。

xl list 的输出确认DomU已创建。

要开始安装基本操作系统,请启动VNC客户端,将其定向到主机的主网络地址或 freebsd.cfgvnclisten 行上定义的IP地址。安装操作系统后,关闭DomU并断开VNC查看器。编辑 freebsd.cfg ,删除带有 cdrom 定义的行,或在行首插入 # 字符将其注释掉。要加载此新配置,需要使用 xl destroy 删除旧的DomU,并将名称或id作为参数传递。然后,使用修改后的 freebsd.cfg 重新创建它。

然后,可以使用VNC查看器再次访问该机器。这一次,它将从安装了操作系统的虚拟磁盘启动,并可以用作虚拟机。

24.8.4 排错

本节包含基本信息,以帮助解决将FreeBSD用作Xen™主机或客户机时发现的问题。

24.8.4.1. 主机启动故障排除

请注意,以下故障排除提示适用于Xen™4.11或更高版本。当仍在使用Xen™4.7并遇到问题时,请考虑迁移到较新版本的Xen™。

为了解决主机启动问题,需要串行电缆或调试USB电缆。通过在 loader.conf 中的 xen_cmdline 选项中添加选项,可以获得详细的Xen™引导输出。几个相关的调试选项是:

FreeBSD也应该以详细模式启动,以识别任何问题。要激活详细引导,请运行以下命令:

如果这些选项都无法解决问题,请将串行启动日志发送至 freebsdxen@FreeBSD.orgxen-devel@lists.xenproject.org 以供进一步分析。

24.8.4.2. 客户机创建故障排除

创建来宾时也可能出现问题,以下尝试为那些试图诊断来宾创建问题的人提供一些帮助。

访客创建失败的最常见原因是 xl 命令吐出一些错误,并以不同于0的返回代码退出。如果提供的错误不足以帮助识别问题,也可以通过反复使用 v 选项从 xl 获得更详细的输出。

如果详细输出无法帮助诊断问题,/var/log/Xen 中还有QEMU和Xen™工具堆栈日志。请注意,域的名称附加在日志名称后面,因此如果域名为freebsd,请找到 /var/log/xen/xl-freebsd.log ,可能还有 /var/log/xne/qemu-dm-febsd.log 。这两个日志文件都可以包含调试的有用信息。如果这些都没有帮助解决问题,请将问题的描述和尽可能多的信息发送至 freebsdxen@FreeBSD.orgxen-devel@lists.xenproject.org 寻求帮助。