如何(正确)修剪 Server 2022 上的 Hyper-V Linux VM?

如何(正确)修剪 Server 2022 上的 Hyper-V Linux VM?

我尝试了很多指南,但似乎都没有用。我的问题如下:

  • 我有一台配备 1TB SSD 驱动器的主机
  • 虚拟机几乎不使用~50G/150G的空间(使用时检查df -h),但它们分别消耗了170和260gb的磁盘空间。
  • 我已在虚拟机中启用 Hyper-V 客户服务。
  • 它们不断成长。

主机操作系统:Windows Server 2022 Datacenter 21H2
客户机操作系统:Ubuntu 22.04.1(ext4 根分区)

我尝试过的最新指南是这样的: https://helgeklein.com/blog/faster-trimming-compacting-hyper-v-ubuntu-vms/

简而言之:

  • 虚拟机上的问题:sudo fstrim -v /
  • 关闭虚拟机
  • 从 PowerShell 发出问题(更改命令中的路径以使其匹配您的 vhdx 文件夹):gci -File -Filter *.vhd* -Path D:\VMs -Recurse | % {Mount-VHD $_.FullName -ReadOnly; Optimize-VHD $_.FullName -Mode full; Dismount-VHD $_.FullName}

但实际上,它不起作用。不幸的是,我的虚拟机并没有减少多少。该命令确实运行了几分钟,NVMe SSD 峰值非常高,仅此而已。

这很烦人,因为 SSD 不在 RAID 中,如果虚拟机继续增长,我就会耗尽空间,而这在服务器上添加起来并不那么简单。

谢谢。

答案1

我在 Hyper-V 服务器上运行了一些托管 Web 的 ubuntu VM。因此,我对您在此处遇到的问题并不感到惊讶。真正的问题是文档在很多方面都不太清楚,并且互联网上的许多指南都已过时。

例如,我不会相信 Server 2019 (1809) 发布之前的“ubuntu on hyperv”指南。至于实际的 ubuntu 版本,请丢弃 20.04LTS 之前版本的所有指南。我已成功在各种配置中运行 VM 20.04、21.10、22.04、22.10。

现在真正的答案是检查你的内核。Hyper-v 功能高度依赖于内核。如果你安装了一些轻量级的不合适的内核,不仅你的 fstrim,而且一些其他虚拟化功能(例如动态 RAM 调整大小)可能会停止工作。

附注:我曾经在 hyper-v 上安装过 debian12(预览版)虚拟机,其中动态 RAM 可以增加,但永远不会减少 :D 这意味着它总是增加到定义的限制。这是由不兼容的内核造成的。

简而言之,我的建议是安装 HWE-EDGE 内核。我的 22.04 VM 当前运行在 5.19.0-41-generic 上,这是以下软件包中最新的内核:

 linux-generic-hwe-22.04-edge/jammy-updates,jammy-security,now
 5.19.0.41.42~22.04.14 amd64 [installed]

当然你也可以只在 HWE 上运行,但我在 20.04 或 22.04 上运行 edge 变体时从未遇到任何问题。

另一个选择是,如果您想要一个更小、更优化的内核,那么可以运行 linux-azure 内核。例如,在我目前运行的日期为 20.04 的机器上:

linux-azure-edge/focal-updates,focal-security,now 5.15.0.1038.45~20.04.28 amd64 [installed]

相关内容