VirtualBox中的动态硬盘会越来越大,如果不主动压缩,它是不会变小的。
压缩原理就是空白硬盘全部填充为0,这时候在windows下执行。
VBoxManage modifyhd diskPath.vdi --compact
就可以把填充的0,全部压缩掉。所以,关键就是怎样把空白硬盘全部填充为0。
本来填充0来压缩很方便的。
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
但是如果遇到etx4格式的硬盘。就失效了。
etx4 只能用如下方法。必须安装好busybox和zerofree后使用
sudo ./busybox mount -o ro,remount /dev/sda1
sudo zerofree /dev/sda1
sudo ./busybox mount -o rw,remount /dev/sda1
清理运行中的程序。方便挂载。
以下,根据自己虚拟主机的情况,灵活修改代码。
fuser -mv /mnt/
sudo systemctl stop nginx.service
sudo ./busybox mount -o ro,remount /dev/sda3
sudo zerofree /dev/sda3
sudo ./busybox mount -o rw,remount /dev/sda3
sudo ./busybox mount -o ro,remount /dev/sda4
sudo zerofree /dev/sda4
sudo ./busybox mount -o rw,remount /dev/sda4
对于无法执行的硬盘,如sda3。直接修改
/etc/fstab文件,启动时就挂载为ro。这样就可以直接执行zerofree。
sudo zerofree /dev/sda3
执行后,再执行
./busybox mount -o rw,remount /dev/sda3
将/etc/fstab修改回原样,并重启。
最后,执行压缩磁盘。
在windows的cmd中执行命令: VBoxManage modifyhd diskPath.vdi --compact
VBoxManage在virtualbox安装目录中, disPath.vdi为虚拟机磁盘路径
VBoxManage clonehd "C:\Users\admin\VirtualBox VMs\arch\disk1.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd cloned.vdi --compact
VBoxManage clonehd "cloned.vdi" "disk1.vmdk" --format vmdk