在 Hyper-V 上运行 FreeBSD 的最佳做法

适用于:Windows Server 2022、Azure Stack HCI 版本 20H2;Windows Server 2019、Windows Server 2016、Hyper-V Server 2016、Windows Server 2012 R2、Hyper-V Server 2012 R2、Windows Server 2012、Hyper-V Server 2012、Windows Server 2008 R2、Windows 10、Windows 8.1、Windows 8、Windows 7.1、Windows 7

本主题包含有关如何在 Hyper-V 虚拟机上将 FreeBSD 作为来宾操作系统运行的建议的列表。

在 Hyper-V 上的 FreeBSD 10.2 中启用 CARP

通用地址冗余协议 (CARP) 允许多台主机共享相同的 IP 地址和虚拟主机 ID (VHID),以便为一项或多项服务提供高可用性。 如果一个或多个主机发生故障,其他主机会以透明方式进行接管,因此用户不会注意到服务故障。若要在 FreeBSD 10.2 中使用 CARP,请按照 FreeBSD 手册中的说明进行操作,并在 Hyper- V 管理器中执行以下操作。

  • 验证虚拟机是否有一个网络适配器以及是否为其分配了一个虚拟交换机。 选择虚拟机,然后选择“操作”>“设置”。

Screenshot of virtual machine settings with network adapter selected

  • 启用 MAC 地址欺骗。 为此,请按以下步骤操作:

    1. 选择虚拟机,然后选择“操作”>“设置”。

    2. 展开“网络适配器”,然后选择“高级功能”。

    3. 选择“启用 MAC 地址欺骗”。

为磁盘设备创建标签

启动期间,在发现新设备时创建设备节点。 这可能意味着添加新设备时设备名称可能会更改。 如果在启动期间收到 ROOT MOUNT ERROR,则应为每个 IDE 分区创建标签,以避免冲突和更改。 若要了解如何操作,请参阅标记磁盘设备。 下面是示例。

重要

在进行任何更改之前,请创建 fstab 的备份副本。

  1. 将系统重启到单用户模式。 这可以通过选择 FreeBSD 10.3+ 的启动菜单选项 2(FreeBSD 8.x 的选项 4)或从启动提示执行“boot -s”来完成。

  2. 在单用户模式下,为 fstab 中列出的每个 IDE 磁盘分区(root 和 swap)创建 GEOM 标签。 下面是 FreeBSD 10.3 的示例。

    # cat  /etc/fstab
    # Device           Mountpoint      FStype  Options   Dump   Pass#
    /dev/da0p2         /               ufs     rw        1       1
    /dev/da0p3         none            swap    sw        0       0
    
    # glabel  label rootfs  /dev/da0p2
    # glabel  label swap   /dev/da0p3
    # exit
    

    有关 GEOM 标签的其他信息,可参阅标记磁盘设备

  3. 系统将继续进行多用户启动。 启动完成后,编辑 /etc/fstab,将传统设备名称替换为各自的标签。 最终的 /etc/fstab 如下所示:

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/label/rootfs       /               ufs     rw              1       1
    /dev/label/swap         none            swap    sw              0       0
    
  4. 现在可以重启系统。 如果一切顺利,它会正常启动,mount 会显示:

    # mount
    /dev/label/rootfs on / (ufs, local, journaled soft-updates)
    devfs on /dev (devfs, local, mutilabel)
    

使用无线网络适配器作为虚拟交换机

如果主机上的虚拟交换机基于无线网络适配器,请通过以下命令将 ARP 过期时间缩短到 60 秒。 否则,VM 的网络可能会在一段时间后停止工作。

   # sysctl net.link.ether.inet.max_age=60

另请参阅