我有一台 Virtualbox VM,其中的 .vdi 在主机上占用了 49gb。
我可能曾经使用过虚拟机内部那么多的空间,但现在我实际只使用了大约 6gb。
我尝试对 virtualbox 使用这个命令:
vboxmanage modifyhd /path/to/disk.vdi --compact
它开始工作 0%...10%.....100%。但实际上什么也没发生,.vdi 仍然是 49gb。
然后我在虚拟机中运行“df -h”,发现了这一点:
root@mypc# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/mypc-root 2.0T 38G 1.9T 2% /
udev 1.3G 4.0K 1.3G 1% /dev
tmpfs 502M 784K 501M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.3G 160K 1.3G 1% /run/shm
/dev/sda1 228M 31M 185M 15% /boot
/home/someuser/.Private 2.0T 38G 1.9T 2% /home/someuser
我不知道为什么那里使用了 38gb。
我清理了垃圾,但没有帮助。
还有什么想法我还能做什么吗?
VM 装有 Ubuntu 12,带有加密的 LVM 和主目录(即 .Private 目录)。主机装有 Windows 7。
更新
我能够释放 /dev/sda1 的空间,但无法释放 /dev/mapper/mypc-root 的空间。Zerofree 启动后就再也没有结束,但我可以断定磁盘已停止写入,因为它在一分钟后停止发出噪音。
以下是“df -ih”的输出
root@mypc:/home/someuser# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/mypc-root 128M 208K 128M 1% /
udev 311K 495 310K 1% /dev
tmpfs 314K 428 314K 1% /run
none 314K 4 314K 1% /run/lock
none 314K 7 314K 1% /run/shm
/dev/sda1 122K 230 122K 1% /boot
/home/someuser/.Private 128M 208K 128M 1% /home/someuser
答案1
来自手动的:
为了使此操作有效,需要先使用合适的软件工具将客户机系统中的可用空间清零。对于 Windows 客户机,您可以使用
sdelete
Microsoft 提供的工具。sdelete -c
在客户机中执行以将可用磁盘空间清零,然后再压缩虚拟磁盘映像。对于 Linux,请使用zerofree
支持 ext2/ext3 文件系统的实用程序。
答案2
相对于该有此解决方案的原始答案:
在虚拟机中:
dd if=/dev/zero of=test.file
sync
rm test.file
在主机上:
VBoxManage modifyhd --compact your_image_path.vdi
这是我尝试过的唯一有效的解决方案。zerofree
和sfill
(来自secure-delete
) 在我的 Debian VM (Windows 10 主机) 上不起作用。
答案3
我认为问题的核心在于您的根文件系统 ( /
) 的大小为 2TB。对于这么大的文件系统,相对较小的开销(inode 等)仍然相当大(在您的情况下为 >32GB)。
如果您想缩小虚拟磁盘,您首先需要缩小根文件系统。