VirtualBox 虚拟机的容量会随着使用自动扩容,这本来是个好事;不过在实际使用过程中,由于系统错误日志疯狂写入等原因,也可能会导致系统容量被明显扩充变大。容量变大之后,无论是转换虚拟盘格式,还是导入导出,均不能减小容量。特别是做虚拟机备份导出时,白白浪费了大量的空间。因此,进行虚拟机磁盘容量的压缩,势在必行!
以下两个系统我都用了很长时间,也都测试过方法的可行性,可供参考。
虚拟机磁盘格式转换
需要注意的是,虽然 VirtualBox 默认的磁盘格式为 vdi,可是经过导入、导出等一系列操作后,硬盘格式往往都是 wmdk;本文所讨论的磁盘压缩方法,只对 vdi 格式的磁盘有效;因此,磁盘压缩之前,往往都需要进行磁盘格式转换!
在 VirtualBox 管理界面上,还需要重新删除原有的 vmdk 磁盘(否则 uuid 冲突导致无法导入 vdi 磁盘)、然后指定系统需要使用的磁盘为新的 vdi 磁盘(否则无法使用后续的磁盘压缩功能)。
转换虚拟机磁盘文件格式为 vdi
cd "C:\Program Files\Oracle\VirtualBox\" "VBoxManage.exe" clonehd "e:\source.vmdk" "e:\target.vdi" --format vdi
将新磁盘关联到虚拟机中
Windows 虚拟机磁盘的压缩
毫无疑问,Windows 平台的磁盘压缩比较简单,在主机系统中直接执行以下命令即可。
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "e:\target.vdi" --compact
多年前,我曾进行过上述操作,并截图,可是现在找不到之前的截图了,有空再补了。
CentOS 虚拟机磁盘的压缩
一开始,我尝试使用网上泛滥的手动将磁盘剩余空间写 0 的方法,可是,过了很久,不过没有看到磁盘空间变小,反而越来越大——我本来虚拟机才25GB,不到半个小时变成了 60 GB,本来主机硬盘容量就很小,吓得我赶紧终止了。
dd if=/dev/zero of=/empty bs=1M #dd if=/dev/zero of=/dev/sda3 rm -f /empty
多天以后,做完了手上的工作,重新去外网上学习相应的处理方法,发现了有个叫做 zerofree 工作的做法没有尝试过,因此我重新导入了一个虚拟机进行尝试,结果成功了,过程如下:
使用 yum 下载安装 zerofree 程序包
su yum -y install zerofree
重新启动系统,并在系统 GRUB 启动菜单出现时点击
Enter
键进入编辑模式选择含有
vmlinuz
字样菜单行,按e
进入内容编辑状态在菜单末尾增加
init=/bin/bash
后Enter
返回上级菜单内核启动参数 含义 备注 init=/sbin/init 告诉内核用 /sbin/init
作为它的 init 程序init=/bin/bash 只启动 bash,在紧急恢复时有用 救援模式 root=/dev/foo 告诉内核用 /dev/foo
作为根设备single 引导进入单用户模式 单用户模式 然后按
b
重新启动系统进入救援模式初始界面
查看系统的磁盘名称
df
执行清理(请根据前一步的查询结果进行确定需要清理的磁盘)
zerofree -v /dev/sda1 zerofree -v /dev/sda3
至此,虚拟机磁盘容量 已经明显变小。然后强制关机,重新进入系统。
在宿主机中,打开命令行,笔者这里是Windows系统,如下执行
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "e:\target.vdi" --compact
版本说明
参考文献
mowkeeper.
VirtualBox压缩vdi文件
[EB/OL].http://mowblog.com/virtualbox%E5%8E%8B%E7%BC%A9vdi%E6%96%87%E4%BB%B6/, 2021/01/08.Canonical Ltd.
Ubuntu Manpage: zerofree — zero free blocks from ext2, ext3 and ext4 file-systems
[EB/OL].http://manpages.ubuntu.com/manpages/hirsute/en/man8/zerofree.8.html, 2021/01/10.
变更说明
1.0.0,2021/01/19 20:55:03,初始版本。
1.0.1,2021/02/12 19:36:23,补充 Linux 内核启动参数表。
最后更新: 2021/02/14 21:24:07
作者: David Faraday
主用链接: https://faradays-studio.gitee.io/202101101604/
备用链接: https://faradays-studio.github.io/202101101604/
引用、演绎等请注明出处,共创和谐社会,谢谢你的合作!