原理
大概是对可用空间写 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