我尝试了很多指南,但似乎都没有用。我的问题如下:
- 我有一台配备 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]