VirtualBox压缩vmdk、vagrant打包box一口气全对
作者: 郑晓 分类: 分享经验 发布于: 2018-05-07 23:44 浏览:113,433 评论(1)
如何压缩VirtualBox的虚拟机vmdk文件大小并使用vagrant package成功打包镜像box文件。
环境:Windows7 vagrant1.9.5 VirtualBox4.3.12 虚拟机系统ubuntu14.04
GitBash中执行命令
首先vagrant ssh登录到虚拟机中
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
切换到VirtualBox安装目录,执行:
./VBoxManage clonehd "/c/Users/zheng/VirtualBox VMs/ubuntu_default_1525700232199_77374/packer-ubuntu-14.04.5-amd64-disk1.vmdk" "cloned.vdi" --format vdi
注意上方vmdk文件路径要改成你自己的位置
注意不要掉了最后的–format参数
成功后类似以下提示:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VMDK'. UUID: cfb3a2c7-1d25-4806-be78-49bf47bbd5f3
继续,压缩vdi
./VBoxManage modifyhd cloned1.vdi --compact
成功后类似以下提示:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
继续,把vdi转回vmdk
$ ./VBoxManage clonehd "cloned.vdi" "compressed.vmdk" --format vmdk
这里我都是把转换后的文件放在当前目录,转换成功后去替换掉原文件。成功后类似以下提示:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'vmdk'. UUID: ecb11716-d276-442d-b19c-b090e3f0698e
全部转换完成,把得到的compressed.vmdk覆盖掉“/c/Users/zheng/VirtualBox VMs/ubuntu_default_1525700232199_77374/packer-ubuntu-14.04.5-amd64-disk1.vmdk”这个文件。
记得最好把原vmdk备份,覆盖后虚拟机是启动不了的,vagrant package也会提示UUID错误,比如:
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["export", "049833be-4931-4250-aea4-a1b25ad574ad", "--output", "C:/Users/zheng/.vagrant.d/tmp/vagrant-package-20180507-22644-1uow2oj/box.ovf"]
Stderr: 0%...
Progress state: E_FAIL
VBoxManage.exe: error: Appliance write failed
VBoxManage.exe: error: UUID {ecb11716-d276-442d-b19c-b090e3f0698e} of the medium 'C:\Users\zheng\VirtualBox VMs\ubuntu_default_1525700232199_77374\packer-ubuntu-14.04.5-amd64-disk1.vmdk' does not match the value {9c63141b-91ad-4e54-a8ff-52f156420064} stored in the media registry ('C:\Users\zheng/.VirtualBox\VirtualBox.xml')
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Medium, interface IMedium
VBoxManage.exe: error: Context: "int __cdecl handleExportAppliance(struct HandlerArg *)" at line 1121 of file VBoxManageAppliance.cpp
注意报错信息中倒数第三行”does not match the value”之后的UUID。
关于uuid,不要去修改.vbox或xml,不会有用。
继续在VirtualBox安装目录执行以下命令重新设置vmdk的UUID:
./VBoxManage internalcommands sethduuid "/c/Users/zheng/VirtualBox VMs/ubuntu_default_1525700232199_77374/packer-ubuntu-14.04.5-amd64-disk1.vmdk" 9c63141b-91ad-4e54-a8ff-52f156420064
最后的UUID参数从上方报错信息中找到,也就是原vmdk的。成功后如下所示:
UUID changed to: 9c63141b-91ad-4e54-a8ff-52f156420064
现在就完成了虚拟机文件的碎片整理和压缩,现在再次打包box文件
vagrant package --output ubuntu14-lnmp.box
900m!比原1.8G确实小很多!
本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。
本文永久链接: https://www.zh30.com/virtualbox-vmdk-vagrant-box.html
VirtualBox压缩vmdk、vagrant打包box一口气全对:目前有1 条留言
来学习的,不要打脸,疼