如何用零填充可用磁盘空间,以便我的虚拟化主机不再认为它已被使用?

如何用零填充可用磁盘空间,以便我的虚拟化主机不再认为它已被使用?

对于我的虚拟机主机,我使用具有 Hyper-V 角色的 Windows Server 2008r2,而来宾 VM 是 Ubuntu 12.04 LTS。它位于动态虚拟硬盘 (2TB) 上。此 VM 的 VHD 大小为 360 GB。但 Ubuntu 中显示的实际大小约为 50 GB。

使用标准 Hyper-V 工具显然不可能减小此 VHD 的大小,因为 Ubuntu VM 使用的文件系统不是 NTFS。

在 Ubuntu 上是否有另一种方法可以导致重置 VHD 外部的可用空间?

答案1

在Ubuntu中,你可以使用zerofree(http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

须藤 aptitude 安装 Zerofree

DD可以,但根据上面的链接可能有一些缺点

答案2

更新从2019年开始(自从有人投票后我再次注意到)

同时,我的答案中详细说明使用的部分dd本身是正确的,如何让虚拟机管理程序知道其来宾块存储中有一些实际上未占用的磁盘空间的问题的正确答案是利用 TRIM/Discard 命令


如何在 Ubuntu 12.04 (ext4) 中用零填充可用空间?

这相当简单:

dd if=/dev/zero of=/some/path/to/zerofile bs=128M count=NumOf128MBlocksToFillTheDiskWith

你最好留出一些空间不被这些命令影响,比如 1%。默认情况下,EXT…FS 为 root 用户保留了特殊数量的空间(AFAIR,5%),因此,如果您以普通用户身份运行此命令,则不会填满整个磁盘,这很好,因为另一个系统软件root在这种情况下运行可能会发生故障。但即使dd以普通用户身份运行,您也最好不要使用剩余的可用空间(95%),否则其他程序(例如 Firefox)不会高兴地意识到它们无法再写入磁盘,您最终可能会遇到这样的情况:数据不一致。因此,请保持该空间不变。最好在单一模式下运行它,这样你就可以发挥最大作用并且不会伤害任何东西。

之后,不用说,但为了以防万一 - 只需删除/some/path/to/zerofile.

PS感谢@伟健为了分享zerofree相关信息更适合EXT2// EXT3EXT4

相关内容