首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >缩小vmdk Virtualbox磁盘映像

缩小vmdk Virtualbox磁盘映像
EN

Stack Overflow用户
提问于 2015-02-04 06:16:40
回答 5查看 57.6K关注 0票数 30

VirtualBox能够压缩(减小大小) .vdi镜像,但不能用于.vmdk磁盘镜像。但是我们可以压缩.vmdk文件,如果我们:

  1. detach
  2. convert to .vdi
  3. compact
  4. convert back to .vmdk
  5. attach the to the original vitual

所以我试着用下面的脚本缩小我的VirtualBox镜像:

代码语言:javascript
复制
#/bin/bash

VM_PATH=~/VirtualBox\ VMs
cd "$VM_PATH"
VM="$(ls ffnord-example_gc-gw0_* -d -1|head -n 1)"
cd "$VM"
VM_VDMK_NAME="$(ls *.vmdk -1|head -n 1)"
VM_NAME="$VM_PATH/$VM/$VM_VDMK_NAME"

echo reducing size of "$VM_NAME"
ls -lah "$VM_NAME"
set -x
vboxmanage showvminfo "${VM}"
vboxmanage storageattach "${VM}" --storagectl SATA --port 0 --device 0 --type hdd --medium none
vboxmanage clonehd --format vdi "${VM_NAME}" /tmp/VM-disk.vdi
vboxmanage closemedium disk "${VM_NAME}" --delete
vboxmanage modifyhd /tmp/VM-disk.vdi --compact
vboxmanage clonehd --format vmdk /tmp/VM-disk.vdi "${VM_NAME}"
vboxmanage closemedium disk /tmp/VM-disk.vdi --delete
vboxmanage storageattach "${VM}" --storagectl SATA --port 0 --device 0 --type hdd --medium 4/VMs/VM-disk1.vmdk

我改编了this script from crysol,但这似乎不能在Ubuntu上运行?第一个vboxmanage storageattach立即以一个错误开始:

代码语言:javascript
复制
VBoxManage: error: Could not find a controller named 'SATA'

如果我改用"SATA Controller"

代码语言:javascript
复制
vboxmanage storageattach "${VM}" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium none

我得到了这个错误:

代码语言:javascript
复制
VBoxManage: error: No storage device attached to device slot 0 on port 0 of controller 'SATA Controller'
VBoxManage: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component SessionMachine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "DetachDevice(Bstr(pszCtl).raw(), port, device)" at line 381 of file VBoxManageStorageController.cpp

如果我注释掉这些vboxmanage storageattach行,脚本会工作得很好,但得到的VM大小与以前相同,并且它不再引导。

这是output of vboxmanage showvminfo "${VM}"

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-08 14:13:26

我找到了一个solution

首先,在虚拟机内部,用零填充所有空闲空间:

代码语言:javascript
复制
cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill

在您的主机上,从VMware Knowledge Base安装vmware-vmware管理器

代码语言:javascript
复制
cd /tmp/
wget http://kb.vmware.com/selfservice/viewAttachment.do?attachID=1023856-vdiskmanager-linux.7.0.1.zip&documentID=1023856
unp 1023856-vdiskmanager-linux-7.0.1.zip
mv 1023856-vmware-vdiskmanager-linux.7.0.1 /usr/bin/vmware-vdiskmanager
chmod +x /usr/bin/vmware-vdiskmanager

注意,在开始之前,您有足够的空闲磁盘空间,在此过程中,您需要MV增长到双倍大小。

然后使用以下命令进行压缩:

代码语言:javascript
复制
/usr/bin/vmware-vdiskmanager -k ~/VirtualBox\ VMs/<virtual disk.vmdk>

Source

票数 33
EN

Stack Overflow用户

发布于 2018-03-27 03:35:39

我不需要安装VMWare,也不需要转换回VMDK,所以我使用

https://scotch.io/tutorials/how-to-create-a-vagrant-base-box-from-an-existing-one#toc-make-the-box-as-small-as-possible

在主机内部:

代码语言:javascript
复制
sudo yum clean all
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
cat /dev/null > ~/.bash_history && history -c && exit

然后在来宾关闭后:

代码语言:javascript
复制
$ vboxmanage clonehd --format vdi centos-7-1-1.x86_64.vmdk newdisk.vdi
$ ls -lh
-rwx------+ 1 Chloe None  39G Mar 26 14:52 centos-7-1-1.x86_64.vmdk
-rwx------+ 1 Chloe None  22G Mar 26 15:01 newdisk.vdi

它还允许稍后进行压缩

代码语言:javascript
复制
$ vboxmanage modifyhd newdisk.vdi --compact

在VirtualBox图形用户界面中,我选择了“选择虚拟硬盘文件”来选择新文件。

票数 9
EN

Stack Overflow用户

发布于 2016-09-30 00:54:00

我无法让vmware-vdiskmanager解决方案上面的rubo77s解决方案工作,我相信它依赖于vmware工作站或vmware播放器,这两者我都没有,我确实找到了可执行文件,它给了我错误。

我用他的零命令解决了这个问题

同步cat /dev/

> zero.fill;sync;sleep 1;sync;rm -f zero.fill

然后使用虚拟框导出到.ova工具。

这将导致卵子剥离/压缩归零的空间。然后您可以重新导入它。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28309819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档