Подтвердить что ты не робот

Сжатие образа виртуального диска 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}"

4b9b3361

Ответ 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 зачистят/сжимают обнуленное пространство. то вы можете повторно импортировать его.