Сжатие образа виртуального диска vmdk Virtualbox

VirtualBox способен сжимать (уменьшать размер) изображений .vdi, но это невозможно при образах дисков .vmdk. Но мы можем скомпилировать файлы .vmdk, если мы:

  • открепление
  • конвертировать в .vdi
  • компактный
  • конвертировать обратно в .vmdk
  • снова присоединитесь к оригинальной жизненной машине.

Итак, я попытался сжать свой образ VirtualBox с помощью этого script:

#/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

Я адаптировал этот script от crysol, но похоже, что это не работает на Ubuntu? Первая vboxmanage storageattach начинается с ошибки сразу:

VBoxManage: error: Could not find a controller named 'SATA'

Если я попробую "SATA Controller":

vboxmanage storageattach "${VM}" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium none

Я получаю эту ошибку:

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, script отлично работает, но результирующая виртуальная машина имеет тот же размер, что и раньше, и она больше не загружается.

Это вывод vboxmanage showvminfo "${VM}"

Ответы

Ответ 1

Я нашел решение :

Сначала внутри VM заполняет все свободное пространство нулями:

cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill

В хосте установите vmware-vdiskmanager из База знаний VMware:

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 увеличивался до двойного размера во время процесса.

Затем сжимайте его с помощью

/usr/bin/vmware-vdiskmanager -k ~/VirtualBox\ VMs/<virtual disk.vmdk>

Источник

Ответ 2

Я не мог получить решение rubo77s над решением vmware-vdiskmanager, я полагаю, что он имеет зависимости от рабочей станции vmware или vmware, ни у меня нет, я нашел исполняемый файл, и он дал мне ошибки.

Я смог решить это, используя свою нулевую команду

cat/dev/zero > zero.fill; sync; sleep 1; sync; rm -f zero.fill

затем используя экспорт виртуальных боксов в инструмент .ova.

это приведет к тому, что ova зачистят/сжимают обнуленное пространство. то вы можете повторно импортировать его.