5

我在 virtualbox 上安装了 CentOS(主机操作系统是 Windows 7)。我创建了磁盘映像文件,即 VDI 文件(动态分配的映像)。最近,当我在 CentOS 中删除大文件时,我磁盘上的 VDI 文件并没有减少。为什么?如何解决这个问题?

4

2 回答 2

6

当您删除 VM 中的文件时,VirtualBox 不会自动回收磁盘空间(在主机上)。要缩小磁盘映像,您需要

首先,将所有可用空间清零(对于 HDD 上的所有分区和逻辑卷),然后关闭 VM。

cat /dev/zero > z;sync;sleep 3;sync;rm -f z

然后,使用以下命令压缩 VDI。

VBoxManage modifyhd /path/to/image.vdi --compact

VBox 文档

使用 --compact 选项,可用于压缩磁盘映像,即删除仅包含零的块。这将再次缩小动态分配的图像;它将减小映像的物理大小,而不会影响虚拟磁盘的逻辑大小。压缩既适用于基础图像,也适用于作为快照的一部分创建的差异图像。

顺便说一句:对于 VMWare (.vmdk),您需要使用vmware-vdiskmanager -k xxx.vmdk来执行相同的操作。

于 2013-02-17T22:48:26.800 回答
1

主机如何知道提供给 VM 的哪些扇区正在被 VM 使用,哪些是免费的?

它唯一知道的是当虚拟机请求一个仍未在磁盘文件中分配的扇区时(当它增加它时)。

也许“碎片整理”或类似的过程可以很好地重新组织磁盘使用,以便您可以手动告诉主机减少空间。到目前为止,我不知道有任何提供该功能的 VM 主机(并且使用它总是非常危险)。

最简单的替代方法是将您的虚拟机克隆到新的虚拟机。

于 2013-02-17T13:43:03.973 回答