总结说明
环境说明:
- VMDK硬盘格式
- VirtualBox虚拟机
- Windows机器,centos虚拟机,机械硬盘
压缩前后空间说明
- 原VMDK空间 776G
- 转换VDI格式后 492G
- 压缩VDI格式后 492G
- 转换为VMDK格式后 484G
减少了37.88% 压缩率为62.11%
存在疑问,实际df -h
查看空间,实际只使用了 51+67远远 不到 484G,差距甚大 ???
[root@WOM ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_xcdw-lv_root
493G 51G 417G 11% /
tmpfs 7.7G 1.2G 6.5G 16% /dev/shm
/dev/sda1 477M 116M 336M 26% /boot
/dev/mapper/vg_xcdw-lv_home
493G 67G 401G 15% /home
share 1.9T 1.8T 56G 98% /media/sf_share
share_c 237G 199G 38G 85% /media/sf_share_c
share_d 239G 199G 40G 84% /media/sf_share_d
share_e 1.9T 1.8T 56G 98% /media/sf_share_e
在关闭虚拟机,导出备份时,出现如下错误
Virtual Box UUID does not match the value stored in the media registry
解决步骤:
- 重命名原有VMDK/VDI文件
- 管理-虚拟介质管理 释放/删除无效VMDK文件**(删除前必须确认名称已修改或文件已备份)**
- 改回原有VMDK/VDI文件名称
- 设置-存储-添加控制器(VMDK/VID硬盘)即可。
压缩步骤
网上的说法是:“虚拟机上的Linux等系统认为.vmdk是一个硬盘,将文件删除后其可用空间可以恢复,重新利用;而对windos系统来说.vmdk是一个文件其变大后是不可能自动变小的。 针对以上原理,已变大的.vmdk文件是无法减肥的,即使你将所有数据删除,此文件依占用windows的硬盘空间仍然不会改变。”
虚拟机操作
- 清理虚拟机文件
- 填0操作
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
物理机操作
- 物理主机 执行 VBoxManage modifyhd /the-path-of-VDI.vdi –compact”
如果是VMDK格式,需要先转换格式
VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi # 空间减小
VBoxManage modifyhd cloned.vdi --compact # 进行压缩,但是实际空间未减小
VBoxManage clonehd "cloned.vdi" "compressed.vmdk" --format vmdk
VMDK 的压缩,也可以使用 vmware-vdiskmanager,需要一条命令(参考)
vmware-vdiskmanager -k disk.vmdk
操作日志
虚拟机填0操作。 大量消耗IO. 耗时约10min
[root@WOM ~]# sudo dd if=/dev/zero of=/EMPTY bs=1M
dd: 正在写入"/EMPTY": 设备上没有空间
记录了450948+0 的读入
记录了450947+0 的写出
472852500480字节(473 GB)已复制,1329.29 秒,356 MB/秒
[root@WOM /]# du -ah --max-depth=0 /EMPTY
426G EMPTY
VMDK转换为VDI格式。 大量消耗IO 耗时约10小时
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd E:\03.虚拟机\scfan\scfan02-disk001.vmdk E:\1.vdi --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: f1883085-c5f2-49b2-a36d-12407240ff4d
VDI压缩。 大量消耗IO 耗时约3小时
C:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd E:\1.vdi --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
VDI转换为VMDK。大量消耗IO 耗时约3小时
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd E:\1.vdi E:\1.vmdk --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: 44f44117-69d8-487d-8d1f-d9175d9558ab