我在 virtualbox 上安装了 CentOS(主机操作系统是 Windows 7)。我创建了磁盘映像文件,即 VDI 文件(动态分配的映像)。最近,当我在 CentOS 中删除大文件时,我磁盘上的 VDI 文件并没有减少。为什么?如何解决这个问题?
2 回答
当您删除 VM 中的文件时,VirtualBox 不会自动回收磁盘空间(在主机上)。要缩小磁盘映像,您需要
首先,将所有可用空间清零(对于 HDD 上的所有分区和逻辑卷),然后关闭 VM。
cat /dev/zero > z;sync;sleep 3;sync;rm -f z
然后,使用以下命令压缩 VDI。
VBoxManage modifyhd /path/to/image.vdi --compact
使用 --compact 选项,可用于压缩磁盘映像,即删除仅包含零的块。这将再次缩小动态分配的图像;它将减小映像的物理大小,而不会影响虚拟磁盘的逻辑大小。压缩既适用于基础图像,也适用于作为快照的一部分创建的差异图像。
顺便说一句:对于 VMWare (.vmdk),您需要使用vmware-vdiskmanager -k xxx.vmdk
来执行相同的操作。
主机如何知道提供给 VM 的哪些扇区正在被 VM 使用,哪些是免费的?
它唯一知道的是当虚拟机请求一个仍未在磁盘文件中分配的扇区时(当它增加它时)。
也许“碎片整理”或类似的过程可以很好地重新组织磁盘使用,以便您可以手动告诉主机减少空间。到目前为止,我不知道有任何提供该功能的 VM 主机(并且使用它总是非常危险)。
最简单的替代方法是将您的虚拟机克隆到新的虚拟机。