对于VirtualBox虚拟机使用一段时间后,动态磁盘可能会多余未用的磁盘空间可被压缩回收,以下分别针对虚拟机是Windows和Ubuntu系统两种进行介绍。

一、Windows虚拟机

  1. 在Windows虚拟机中下载SDelete
  2. 打开Windows命令行终端,执行cd命令切换到SDelete.zip解压缩后的目录;
  3. 执行sdelete.exe -z C:对C盘进行减缩,如果Virtualbox的Windows虚拟机中还有其他磁盘,替换相应的盘符进行减缩;
  4. sdelete减缩完毕后,关闭虚拟机;
  5. 在Virtualbox宿主机上使用VBoxManage命令对虚拟机磁盘进行减缩,如VBoxManage modifyvm disk 9da36c51-acf4-494d-b142-db36abde1c66 --compact,其中9da36c51-acf4-494d-b142-db36abde1c66为对于虚拟机磁盘的UUID,该UUID可通过VBoxManage list hdds查到。如不用UUID也可直接用对应虚拟机磁盘的全路径,如VBoxManage modifyvm disk /data/vbox/windows/windows.vdi --compact

二、Ubuntu/Linux虚拟机

  1. 使用sudo apt-get install zerofree安装zerofree;
  2. 重启Ubuntu/Linux虚拟机,虚拟机启动引导前按Esc键进入Grub启动引导菜单,选择*Advanced options for Ubuntu并按下Enter键;
  3. 选择内核版本最高的recovery mode引导菜单项;
  4. Recovery Menu菜单中选root Drop to root shell prompt项,按提示输入root密码后进入root shell中;
  5. 执行sudo systemctl stop systemd-journal*停止所有的磁盘日志服务;
  6. 执行sudo swapoff -a关闭所有交换分区;
  7. 执行sudo mount -n -o remount,ro -t ext2 /dev/sda1 //分区(root分区,根分区)重新已只读方式挂载,其中/dev/sda1是根分区所对应的设备;
  8. 执行zerofree -v /dev/sda1对根分区进行减缩,如还有其他磁盘分区需要减缩,替换上一步和本步中的/dev/sda1
  9. zerofree命令运行完毕后,执行shutdown -HP now关闭Ubuntu/Linux虚拟机;
  10. 在Virtualbox宿主机上使用VBoxManage命令对虚拟机磁盘进行减缩,如VBoxManage modifyvm disk 9da36c51-acf4-494d-b142-db36abde1c66 --compact,其中9da36c51-acf4-494d-b142-db36abde1c66为对于虚拟机磁盘的UUID,该UUID可通过VBoxManage list hdds查到。如不用UUID也可直接用对应虚拟机磁盘的全路径,如VBoxManage modifyvm disk /data/vbox/windows/windows.vdi --compact

三、参考文献

  1. SDelete
  2. zerofree
  3. VBoxManage modifymedium