如何从VirtualBox中缩小动态增长的VDI磁盘?

来自Virtual Box中各种Ubuntu安装的动态增长的虚拟磁盘(VDI)实际上正稳步“增长”。

删除虚拟机中的文件不会释放我的VDI文件从主机硬盘空间占用的空间。

如何收缩这些文件以将未使用的硬盘空间返回给主机?

动态增长的Virtual Box虚拟硬盘驱动器文件能够根据我们在设置此文件时定义的最大大小按需增长。 但它不会释放我们在来宾操作系统中删除的文件空间。

如果磁盘已经增长太多,我们可以再次压缩它,只要未使用的空间用零填充,并且驱动器是VDI格式。

对于ext2到ext 4文件系统,可以使用命令行实用程序zerofree从Ubuntu guest 虚拟机完成此操作 安装zerofree *

zerofree /dev/sdxX 

这需要驱动器不使用,并且要卸载 。 因此,我们可能必须将它临时绑定到我们为此目的创建的另一个VM,或者我们需要在此VM上引导Ubuntu实时环境。

/dev/sdxX替换为有问题的ext2,ext3或ext4格式化分区

在多个分区上,我必须为每个分区重复zerofree 。 请记住,通过填充零,虚拟文件​​将暂时增长到最大大小。

一旦所有未使用的驱动器空间都填充了零,我们就会缩小驱动器

 VBoxManage modifyhd .vdi --compact 

这将大大减少VDI文件的文件大小。

*在Windows客户机中,我们可以使用实用程序sdelete替换未使用的空间。

以下是将可用磁盘空间归零的一些替代方法(这可能是最耗时的部分)。 之后,您仍然需要运行VBoxManage modifyhd --compact来压缩实际的磁盘文件。


此命令可以在卸载磁盘时将磁盘归零:

 apt-get install zerofree zerofree -v /dev/sdxN 

这是一个如何让dd定期打印输出的例子:

 dd if=/dev/zero of=temp-file-on-disk bs=20M # run this to get the process ID of the dd command pgrep -l '^dd$' # then put the process ID on the command line to "kill -USR1" # this will tell dd to print the current status (in another terminal) kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}') 

这是一个类似dd的程序,它会定期自动打印输出:

 apt-get install dcfldd dcfldd if=/dev/zero of=temp-file-on-disk bs=20M