原理
大概是对可用空间写 0,文件系统自动整理
然后 VBoxManage 回收文件系统中的未分配的大块 0 区域
所以,应该可以使用 dd 按以下步骤操作,替代 zerefree。
# 写临时文件,直至报磁盘空间不足(No space left on device)退出
dd if=/dev/zero of=zerofree.bin bs=1M
# 然后删除临时文件
rm zerofree.bin
当然,manpage 中列出了 zerofree 比 dd 命令优秀的几条理由:
- 速度快
- 不需要真的写满整个磁盘(如果是动态分配的虚拟磁盘,
dd会使磁盘实际分配空间 = 虚拟分配空间) - 不干扰其他程序的写磁盘操作
步骤
- 用一个 ISO 文件,挂载目标磁盘,进入 Live 模式
- 安装 zerofree:
sudo apt install -y zerofree - 填充 0:
sudo zerofree -v /dev/sdb1 - 执行结束之后,关闭 Live 系统
- 在 VBOX 宿主机上:
VBoxManage modifymedium disk --compact /path/to/vdi
参考
- Ubuntu manpages,zerofree
- Oracle® VM VirtualBox® User Manual,8.24. VBoxManage modifymedium