Answers:
动态增长的Virtual Box虚拟硬盘驱动器文件能够根据虚拟机的需求增长到我们在设置该文件时定义的最大大小。但是,它不会释放我们在来宾操作系统中删除的文件的空间。
如果磁盘增长太多,我们可以再次压缩它,前提是未使用的空间用零填充,并且驱动器采用VDI格式。
对于ext2到ext 4文件系统,可以从Ubuntu guest 虚拟机 使用命令行实用程序zerofree *来完成。
zerofree /dev/sdxX
这需要不使用驱动器并卸下驱动器。因此,我们可能必须将其临时绑定到为此目的而创建的另一个VM,或者我们需要在该VM上启动Ubuntu Live环境。
替换为/dev/sdxX
有问题的ext2,ext3或ext4格式化分区。
在多个分区上,我们必须zerofree
为每个分区重复。请记住,通过填充零,虚拟文件将临时增长到其最大大小。
一旦所有未使用的驱动器空间都填满了零,我们将使用
VBoxManage modifyhd <name>.vdi --compact
这将大大减少我们的VDI文件的文件大小。
*在Windows guest虚拟机中,我们可以使用实用程序替换未使用的空间sdelete
。
ecryptfs
,则加密文件在磁盘实用程序中看起来就像普通文件一样,并且可以使用。如果您使用的是全盘加密,则无论如何它都不会被识别为ext格式化的分区:)
mount -n -o remount,ro -t ext4 /dev/sda1
,然后再以方式挂载zerofree -v /dev/sda1
。
这是将可用磁盘空间归零的一些替代方法(这可能是最耗时的部分)。之后,您仍然必须运行VBoxManage modifyhd <disk> --compact
以压缩实际的磁盘文件。
apt-get install zerofree
zerofree -v /dev/sdxN
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
zerofree
在已挂载的文件系统上使用过,但是以只读方式挂载时。即使对于根FS:sudo mount -o remount,ro /
-但在GUI会话中,根也会很忙,因此会失败。但是可以在运行级别1(telinit 1
)中使用,因此您无需从实时CD引导即可完成此操作。