2015-02-03 35 views
17

Program VirtualBox może kompaktować (zmniejszać rozmiar) obrazów .vdi, ale nie jest to możliwe z obrazami dysków .vmdk. Ale możemy kompaktowy .vmdk plików jeśli:Zmniejszenie obrazu dysku Virtualbox vmdk

  1. odłączyć
  2. przeliczyć .vdi
  3. kompaktowy
  4. przekonwertować z powrotem do .vmdk
  5. dołączyć ponownie do oryginalnego Vitual maszynie

So Próbowałem zmniejszyć obraz VirtualBox za pomocą tego skryptu:

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

Zaadaptowałem this script from crysol, ale wygląda na to, że to nie działa w systemie Ubuntu? Pierwsze vboxmanage storageattach zaczyna się od błędu zaraz:

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

jeśli staram "SATA Controller" zamiast:

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

otrzymuję ten błąd:

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 

Gdybym wykomentuj te vboxmanage storageattach linie, skrypt działa dobrze, ale wynikowa maszyna wirtualna ma taki sam rozmiar jak poprzednio i już się nie uruchamia.

To output of vboxmanage showvminfo "${VM}"

+1

Czy jest prawdopodobnie podłączony do VM jako kontroler IDE, a nie kontroler SATA? –

+1

Twoja maszyna wirtualna nie ma dołączonego magazynu, co jest widoczne na opublikowanym wyjściu "showvminfo". Dlatego widzisz ten komunikat o błędzie. Podejrzewam, że poprzednia, niekompletna wersja skryptu, jako pierwsza komenda 'storageattach' odłącza plik VMDK od konfiguracji VM: ' vboxmanage storageattach [...] --medium none' – he1ix

Odpowiedz

26

znalazłem solution:

Pierwszy wewnątrz VM wypełnić całą wolną przestrzeń z zerami:

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

W swojej Host zainstalować VMware vdiskmanager z VMware Knowledge Base :

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 

Upewnij się, że masz wystarczającą ilość wolnego miejsca na dysku, zanim rozpoczniesz, potrzebujesz, aby MV zwiększył się dwukrotnie w trakcie procesu.

Następnie ścisnąć go z:

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

Source

+0

Zobacz tutaj, może znajdziesz inny rozwiązanie [http://www.experts-exchange.com/Software/VMWare/A_12938-HOW-TO-Shrink-a-VMware-Virtual-Machine-Disk-VMDK-in-15-minutes.html](http:/ /www.experts-exchange.com/Software/VMWare/A_12938-HOW-TO-Shrink-a-VMware-Virtual-Machine-Disk-VMDK-in-15-minutes.html) –

+1

Czy jest wstępnie przygotowany 'vmware-vdiskmanager 'dla OSX? – Quanlong

+5

@Quanlong sekcja "Załączniki" na końcu artykułu VMWare KB, który został połączony z rubo77 3 wersjami vmware-vdiskmanager. Pierwszy jest identyfikowany przez Mac OS Finder jako plik wykonywalny Uniksa i działa na co najmniej El Capitan, na którym go przetestowałem. – mike

3

nie mogłem dostać rubo77s rozwiązanie powyżej rozwiązania VMware-vdiskmanager do pracy, uważam, że ma współzależności na stacji roboczej VMWare lub odtwarzacza VMware, z których żaden Mam, znalazłem plik wykonywalny i dało mi to błędy.

udało mi się rozwiązać ten problem za pomocą jego zerowe polecenie

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

następnie używając virtualboxes eksport do .ova narzędzia.

spowoduje to usunięcie/kompresowanie zerowanej przestrzeni. , a następnie możesz go ponownie zaimportować.

Powiązane problemy