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