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