2015-02-03 23 views
17

VirtualBox è in grado di compattare (ridurre le dimensioni) delle immagini .vdi ma non è possibile con le immagini del disco .vmdk. Ma siamo in grado di compattare .vmdk file se:Riduci un'immagine del disco Virtualbox vmdk

  1. stacchiamo
  2. convertito al .vdi
  3. compatta
  4. riconvertire .vmdk
  5. allegare di nuovo alla macchina vitual originale

Così Ho provato a ridurre la mia immagine VirtualBox con questo 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 

Ho adattato this script from crysol ma sembra che questo non funzioni su Ubuntu? I primi vboxmanage storageattach inizia con un errore subito:

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

se provo "SATA Controller" invece:

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

ottengo questo errore:

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 

Se commento fuori quelle vboxmanage storageattach linee, lo script funziona bene, ma la VM risultante ha le stesse dimensioni di prima e non si avvia più.

Questa è la output of vboxmanage showvminfo "${VM}"

+1

È probabilmente collegato alla VM come controller IDE anziché come controller SATA? –

+1

La VM non ha alcuna memoria collegata, che è visibile nell'output 'showvminfo' che hai postato. Pertanto, stai vedendo questo messaggio di errore. Sto sospettando una precedente esecuzione incompleta dello script, poiché il primo comando 'storageattach' stacca il file VMDK dalla configurazione della macchina virtuale: ' vboxmanage storageattach [...] --medium none' – he1ix

risposta

26

Ho trovato un solution:

prima all'interno della VM riempire tutto lo spazio libero con gli zeri:

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

Nel vostro Host, installare vmware-vdiskmanager dal 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 

Fate attenzione, se avete abbastanza spazio libero su disco prima di iniziare, è necessario che MV aumenti fino a raddoppiare le dimensioni durante il processo.

Poi comprimerlo con:

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

Source

+0

Guarda qui forse trovi un altro soluzione [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

Esiste un 'vmware-vdiskmanager precostruito 'per OSX? – Quanlong

+5

@Quando nella sezione "Allegati" alla fine dell'articolo di VMWare KB, rubo77 ha 3 versioni di vmware-vdiskmanager. Il primo è identificato da Mac OS Finder come eseguibile Unix e viene eseguito almeno su El Capitan su cui l'ho testato. – mike

3

non ho potuto ottenere la soluzione rubo77s sopra soluzione vmware-vdiskmanager al lavoro, credo che abbia dipendenze da workstation VMware o VMware Player, nessuno dei quali Ho, ho trovato l'eseguibile e mi ha dato errori.

sono stato in grado di risolvere questo utilizzando il suo comando a zero

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

quindi utilizzando virtualboxes esportare in .ova strumento.

ciò comporterà la rimozione/compressione dell'ova lo spazio azzerato. quindi puoi reimportarlo.