Podsumowanie:
VBoxManage.exe modifyhd --resize
może zwiększyć (ale nie zmniejszyć) logiczny rozmiar obrazu dysku (rozmiar widziany przez guest OS).
VBoxManage.exe modifyhd inputfile.vdi --compact
może zmniejszyć fizyczny rozmiar obrazu dysku (rozmiar pliku obrazu na dysku widziany przez system operacyjny hosta). Nie zmienia to jednak rozmiaru dysku logicznego. Zauważ, że to działa tylko wtedy, gdy wolna przestrzeń została wyzerowana w systemie operacyjnym gościa.
modifyhd
działa tylko z dynamicznym wariantem formatu (“dynamically allocated image”).
modifyhd
działa tylko z formatami obrazów VDI i VHD.
- Jeśli używasz snapshotów, będziesz musiał sklonować najnowszy snapshot VDI z podfolderu “Snapshots”.
Szczegóły znajdziesz w rozdziale 8.23. VBoxManage modifyhd w instrukcji.
Powodem, dla którego zmniejszanie rozmiaru dysku logicznego VDI nie zostało jeszcze zaimplementowane, jest zapobieganie uszkodzeniom danych, które mogłyby się pojawić i w rezultacie doprowadzić do nieuruchamiania maszyn wirtualnych. Dlatego, gdy używana jest opcja --resize
, nowy rozmiar dysku musi być większy niż obecny. Nie może być mniejszy lub równy bieżącemu rozmiarowi. Innymi słowy, dysk o pojemności 40 GB może być powiększony tylko do 41 GB lub więcej, nie może być powiększony do 40 GB (to po prostu głupie), 39 GB lub mniej.
Stare wersje VirtualBoxa tworzyły pliki VDI jako “fixed” varient format. Nowym domyślnym ustawieniem jest teraz tworzenie “dynamicznych” wariantów formatu, gdy tworzone są nowe pliki VDI (obrazy wirtualnych dysków). (Zgaduję, że tak jest od czasu wprowadzenia dynamicznego wariantu formatu, niezależnie od tego, w której wersji został wprowadzony).
Więc to co oznacza komunikat błędu “operacja dla tego formatu nie jest jeszcze zaimplementowana” oznacza, że twój plik VDI używa “stałego” wariantu formatu. Aby obejść ten problem będziesz musiał sklonować swój plik VDI używając komendy clonehd
. Aby zobaczyć w jakim wariancie formatu jest obecnie twój plik VDI, możesz użyć polecenia showhdinfo
.
Przykład działania
Pokazanie informacji VDI o bieżącym dysku.
Polecenie wejściowe: vboxmanage.exe showhdinfo path\inputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID: 132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity: 40960 MBytes
Size on disk: 40962 MBytes
In use by VMs: sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)
C:\Program Files\Oracle\VirtualBox>
Widzisz gdzie jest napisane “fixed default”? To dlatego wypluwa powyższy błąd, gdy próbujesz zmienić jego rozmiar.
Klonowanie starego pliku VDI do nowego pliku VDI.
Polecenie wejściowe: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c
C:\Program Files\Oracle\VirtualBox>
Voilà! Stary plik został teraz sklonowany do nowego pliku. Ponieważ domyślnym ustawieniem w nowych wersjach VirtualBoxa jest użycie “dynamicznego” wariantu formatu, nie musisz tego jawnie definiować. Chociaż, jeśli pracujesz ze starszą wersją VirtualBoxa, możesz chcieć ustawić opcję na “dynamiczny” (jeśli w ogóle jest dostępna), aby zapewnić lepszą kompatybilność i/lub elastyczność z przyszłymi wersjami VirtualBoxa.
Pokaż informacje VDI o sklonowanym dysku.
Polecenie wejściowe: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
Widzisz jak teraz jest napisane “dynamic default”? Jak miło!
(Na marginesie! Powodem, dla którego jest tu napisane 7806 MB jako rozmiar fizyczny, jest to, że użyłem opcji --compact
na oryginalnym pliku VDI, próbując wymusić konwersję do dynamicznego wariantu formatu. To było coś, co przeczytałem na forum VirtualBoxa, podobno działało to ze starszymi wersjami, więc pomyślałem, że mogę spróbować. Nie zadziałało.)
Resizing the cloned disk.
Polecenie wejściowe: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:\Program Files\Oracle\VirtualBox>
Sukces! Koniec z bzdurami o formacie. Pamiętaj tylko, aby zmienić rozmiar nowego, sklonowanego dysku, a nie oryginalnego. Należy pamiętać, że rozmiar jest wyrażony w MB. Wydaje mi się, że można użyć np. 51200
, jak również 50G
(lub ewentualnie “GB”). Istnieje również opcja --resizebyte
, która może być użyta do wyrażenia rozmiaru w bajtach.
Pokazanie informacji VDI o zmienionym rozmiarze dysku klonowanego.
Polecenie wejściowe: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 51200 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
To wszystko! Od tego momentu musisz dodać ten sklonowany dysk jako nowy VDI dla maszyny wirtualnej. Zrobisz to wewnątrz VirtualBoxa. Nie będę się w to zagłębiał. Jeśli udało Ci się to do tej pory przeczytać i zrozumieć, to prawdopodobnie nie potrzebujesz dalszego przewodnika. Możesz albo usunąć stary “naprawiony” plik, albo zostawić go jako kopię zapasową. Upewnij się, że przetestujesz nowy plik VDI zanim usuniesz oryginalny plik źródłowy.
Uwaga! Nie zobaczysz od razu nowego rozmiaru sklonowanego dysku. Musisz uruchomić maszynę wirtualną z tym dyskiem, a następnie użyć narzędzia do zarządzania partycjami, aby rozszerzyć partycję, aby wypełnić dysk wirtualny (lub utworzyć więcej partycji). Dla Windows, wystarczy uruchomić diskmgmt.msc
i będziesz mógł rozszerzyć partycję w tym miejscu.
Screenshots
Reference