HYPER-V 上运行 Linux 的最佳实践

 

适用对象:Hyper-V Server 2012, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 R2, Microsoft Hyper-V Server Technical Preview, Windows Server 2012, Hyper-V Server 2012 R2, Windows 10 Technical Preview, Windows Server Technical Preview, Windows 8

本文档包含针对运行 HYPER-V 的 Linux 虚拟机的建议的列表。

优化的动态的 VHDX 文件上的 Linux 文件系统

即使在文件系统主要是为空时,某些 Linux 文件系统可能会占用大量的实际磁盘空间。 若要减少的量的动态的 VHDX 文件的实际磁盘空间使用情况,请考虑以下建议:

  • 在创建 VHDX 时,使用 1 MB BlockSizeBytes (从默认值 32 MB) 在 PowerShell 中,例如:

    PS > New-VHD –Path C:\MyVHDs\test.vhdx –SizeBytes 127GB –Dynamic –BlockSizeBytes 1MB
    
  • 为 ext3 优先 ext4 格式,因为 ext4 是比 ext3 与动态的 VHDX 文件一起使用时有效的更多空间。

  • 当创建文件系统指定组为 4096,例如的数:

    # mkfs.ext4 –G 4096 /dev/sdX1 
    

在第 2 代虚拟机上的 grub 菜单超时时间

由于正在从仿真第 2 代虚拟机中删除过时硬件),而 grub 菜单倒计时计时器倒过快 grub 菜单要显示的立即加载默认条目。 修复 grub 以使用 EFI 支持计时器之前, 修改**/boot/grub/grub.conf**,/etc/default/grub,或等效身份具有"超时 = 100000" 而不是默认值"超时 = 5"。

在第 2 代虚拟机上的 PxE 启动

因为不存在生成 2 虚拟机中 PIT 计时器,则与 PxE TFTP 服务器的网络连接将可以提前终止并防止从读取 Grub 配置和从服务器加载一个内核引导加载程序。

RHEL 上 6.x,旧 grub v0.97 EFI 引导加载程序可用来代替 grub2,与此处所述: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config-efi.html

RHEL 以外的 Linux 分发上 6.x,可以执行类似的步骤来配置 grub v0.97 从 PxE 服务器加载 Linux 内核。

此外,在 RHEL/CentOS 6.6 键盘和鼠标输入不起作用与预安装内核这样可防止在菜单中指定的安装选项。 串行控制台必须配置为允许选择安装选项。

  • efidefault PxE 服务器上的文件中,添加以下内核参数 “console=ttyS1”

  • 在 HYPER-V 中虚拟机,安装程序使用此 PowerShell cmdlet 的 COM 端口:

    Set-VMComPort –VMName <Name> -Number 2 –Path \\.\pipe\dbg1
    

指定对预安装内核启动文件还会避免对键盘和鼠标在安装过程中输入的需求。

使用故障转移群集的静态 MAC 地址。

将使用故障转移群集部署的 Linux 虚拟机应配置与每个虚拟网络适配器的静态媒体访问控制 (MAC) 地址。 在某些版本的 Linux,网络配置可能会丢失在故障转移后因为新的 MAC 地址分配给虚拟网络适配器。 若要避免丢失网络配置,确保每个虚拟网络适配器具有静态 MAC 地址。 可以通过编辑在 HYPER-V 管理器或故障转移群集管理器中的虚拟机的设置来配置 MAC 地址。

使用超 V 特定网络适配器,不是旧版网络适配器。

配置和使用虚拟的以太网适配器是超 V 特定网络卡具有更高性能。 如果旧和超 V 特定网络适配器附加到虚拟机,网络名称的输出中ifconfig –a可能会显示随机值如**_tmp12000801310**。 若要避免此问题,请在 Linux 虚拟机中使用超 V 特定网络适配器时删除所有旧网络适配器。

为更好的磁盘 I/O 性能使用 I/O 计划程序 NOOP。

Linux 内核有四个不同的 I/O 计划进行重新排序具有不同的算法的请求。 NOOP 是传递的计划决定由虚拟机监控程序的先进先出队列。 建议 NOOP 为计划程序运行时要使用 Linux 虚拟机在 HYPER-V 上。 若要更改的计划程序的启动加载器配置中的某个特定设备 (/ etc/grub.conf,例如),添加elevator=noop到内核参数,然后重新启动。

添加"numa = off"如果 Linux 虚拟机具有超过 7 虚拟处理器或多个 30 GB RAM。

配置为使用超过 7 虚拟处理器的 Linux 虚拟机应添加numa=off到 GRUB boot.cfg 若要解决 2.6.x Linux 内核中的已知问题。 Linux 虚拟机配置为使用超过 30 GB RAM 还应该添加numa=off到 GRUB boot.cfg。

保留为 kdump 的更多内存

以防转储捕获内核会得到与死机上启动,则保留为内核的更多内存。 例如,将参数更改crashkernel=384M-:128Mcrashkernel=384M-:256MUbuntu grub 配置文件中。

收缩或扩展 VHD 文件可能导致错误的 GPT 磁盘分区表

HYPER-V 允许收缩而不考虑任何分区、 卷或磁盘可能存在的文件系统数据结构的虚拟磁盘 (VHD) 文件。 如果 VHD 收缩到 VHD 末尾用武之地的分区的结束之前,可能会丢失数据,分区的内容可能已损坏或无效的数据会变得可以读取该分区时返回。

后调整 VHD 的大小,管理员应使用 fdisk 之类的实用程序或 parted 更新分区、 卷和文件系统结构以反映该磁盘的大小的更改。 缩小或扩展具有 GUID 分区表 (GPT) 的 VHD 的大小将导致警告当分区管理工具用于检查的分区布局中,并将管理员会警告您若要解决的第一个和第二的 GPT 标头。 这一手动步骤可以安全地执行无数据丢失。

另请参阅