我在 Windows 8 上运行 Hyper-V,还有几个虚拟机,如 XP、Ubuntu 等。我已将硬盘设置为按需,因此它从小处开始。
现在我已经在我的虚拟 XP 上下载了一些文件,我注意到硬盘使用的空间大约为 12 GB,因此我决定删除一些文件,即使从回收站中删除,硬盘现在大约为 6GB,但问题是当我检查 VHDX 的读取大小时它仍然大约为 12GB !!
我尝试关闭电源并编辑/压缩硬盘,但其大小仍然相同!!
任何帮助都将受到赞赏。
谢谢。
答案1
删除大文件只会改变(虚拟)硬盘的很小一部分:块分配。文件的内容数据会保留在磁盘上,直到被覆盖。虚拟机管理程序/磁盘映像在文件系统级别不起作用。您必须用零覆盖数据才能成功压缩。使用 Linux(以及在文件完全填满时仍允许您删除文件的文件系统(btrfs 在这种情况下会出现问题)),您可以执行以下操作:
dd if=/dev/zero of=/filldisk.zero bs=100M ; rm /filldisk.zero
将来,您可以使用 删除虚拟机中的文件wipe -z
。可能有一个 Windows 工具可以执行相同操作。
答案2
只要以下任一条件成立,Hyper-V 就会压缩 VHD(或 VHDX):
1)它可以挂载 VHD 和底层文件系统,并使用文件系统内部的数据来确定 VHD 中哪些块不再被文件系统使用。
2) 客户机中的操作系统使用 ATA“trim”命令或 SCSI“unmap”命令向底层磁盘指示正在释放块并且其中的数据不再有用。
(1)除非文件系统是 Windows 非常熟悉的文件系统,否则无法工作,我怀疑虽然您没有提到它,但您在 Ubuntu 安装中并没有使用 NTFS。对于 Windows XP VM,首先在 XP 下对其进行碎片整理可能会有所帮助(这会使 VHD 在此过程中变得更大),然后在关闭 VM 的情况下对其进行压缩。
(2)仅适用于最新的 Windows 版本。您可能能够找到支持 trim 和/或 unmap 的 Ubuntu 版本或补丁。
答案3
您可以使用 SystemRescueCD 压缩 VHD
https://serverfault.com/questions/551053/how-can-i-compact-the-vhd-file-with-ubuntu- 这是这个问题的答案