Zusammenfassung:
- VBoxManage.exe modifyhd --resize
können die logische Größe des Festplatten-Images (die Größe, die das Gastbetriebssystem sieht) erhöhen (aber nicht verringern).
- VBoxManage.exe modifyhd inputfile.vdi --compact
kann die physische Größe des Festplatten-Images (die Größe der Image-Datei auf der Festplatte, wie sie vom Host-Betriebssystem gesehen wird) verringern. Dies ändert jedoch nicht die Größe der logischen Festplatte. Beachten Sie, dass dies nur funktioniert, wenn der freie Speicherplatz im Gastbetriebssystem zuvor auf Null gesetzt wurde.
- modifyhd
funktioniert nur mit der dynamischen Formatvariante (“dynamisch zugewiesenes Image”).
- modifyhd
funktioniert nur mit den Image-Formaten VDI und VHD.
- Wenn Sie Snapshots verwenden, müssen Sie den letzten Snapshot VDI aus dem Unterordner “Snapshots” klonen.
Details finden Sie im Abschnitt 8.23. VBoxManage modifyhd im Handbuch.
Der Grund, warum die Verkleinerung der logischen Plattengröße einer VDI noch nicht implementiert wurde, ist die Verhinderung von Datenbeschädigungen, die auftreten könnten und Sie dadurch nicht bootfähige VMs hätten. Deshalb muss bei Verwendung der Option --resize
die neue Plattengröße größer sein als die aktuelle Größe. Sie darf nicht kleiner oder gleich der aktuellen Größe sein. Mit anderen Worten, eine 40-GB-Platte kann nur auf 41 GB oder mehr verkleinert werden, sie kann nicht auf 40 GB (das ist einfach dumm) oder 39 GB oder weniger verkleinert werden.
Alte Versionen von VirtualBox erstellten VDI-Dateien als “feste” Formatvariante. Die neue Standardeinstellung ist nun, “dynamische” Formatvarianten zu erstellen, wenn neue VDI-Dateien (virtuelle Festplatten-Images) erstellt werden. (Ich nehme an, dass dies seit der Einführung der dynamischen Formatvariante der Fall ist, egal in welcher Version).
Die Fehlermeldung “operation for this format is not implemented yet” bedeutet also, dass Ihre VDI-Datei die “feste” Formatvariante verwendet. Um dieses Problem zu umgehen, müssen Sie Ihre VDI-Datei mit dem Befehl clonehd
klonen. Um zu sehen, in welcher Formatvariante sich Ihre VDI-Datei im Moment befindet, können Sie den Befehl showhdinfo
verwenden.
Arbeitsbeispiel
VDI-Informationen über den aktuellen Datenträger anzeigen.
Eingabebefehl: 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>
Sehen Sie, wo “feste Vorgabe” steht? Das ist der Grund, warum es den obigen Fehler ausspuckt, wenn Sie versuchen, die Größe zu ändern.
Klone die alte VDI-Datei in eine neue VDI-Datei.
Eingabebefehl: 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à! Die alte Datei ist nun in eine neue Datei geklont worden. Da in neuen Versionen von VirtualBox standardmäßig die “dynamische” Formatvariante verwendet wird, müssen Sie das nicht explizit festlegen. Wenn Sie allerdings mit einer älteren Version von VirtualBox arbeiten, dann sollten Sie die Option auf “dynamisch” setzen (falls überhaupt verfügbar), um eine bessere Kompatibilität und/oder Flexibilität mit zukünftigen Versionen von VirtualBox zu gewährleisten.
VDI-Informationen über die geklonte Festplatte anzeigen.
Eingabebefehl: 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>
Sehen Sie, wie hier jetzt “dynamische Voreinstellung” steht? Wie schön!
(Am Rande bemerkt! Der Grund, warum hier 7806 MB als physikalische Größe angezeigt wird, ist, dass ich die Option --compact
in der ursprünglichen VDI-Datei verwendet hatte, um die Konvertierung in die dynamische Formatvariante zu erzwingen. Ich habe nur etwas im VirtualBox-Forum gelesen, es hätte angeblich mit älteren Versionen funktioniert, also dachte ich, ich könnte das auch mal ausprobieren. Es hat nicht funktioniert.)
Resizing der geklonten Festplatte.
Eingabebefehl: 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>
Erfolg! Kein Format-Bullshit mehr. Denken Sie nur daran, die Größe der neuen, geklonten Festplatte zu ändern, und nicht die der ursprünglichen Festplatte. Denken Sie daran, dass die Größe in MB angegeben wird. Ich glaube, Sie können z.B. sowohl 51200
als auch 50G
(oder möglicherweise “GB”) verwenden. Es gibt auch die Option --resizebyte
, die verwendet werden kann, um die Größe in Bytes auszudrücken.
VDI-Informationen über die größenveränderte Klonplatte anzeigen.
Eingabebefehl: 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>
Das war’s! Was Sie nun tun müssen, ist, dieses geklonte Laufwerk als neue VDI für die VM hinzuzufügen. Das machen Sie innerhalb von VirtualBox. Ich werde darauf nicht näher eingehen. Wenn Sie das bis hierher lesen und verstehen konnten, dann brauchen Sie wahrscheinlich keine weitere Anleitung. Sie können entweder die alte “reparierte” Datei löschen oder sie als Backup belassen. Stellen Sie sicher, dass Sie die neue VDI-Datei testen, bevor Sie die ursprüngliche Quelldatei löschen.
Hinweis! Sie werden die neue Größe der geklonten Platte nicht sofort sehen. Sie müssen die VM damit booten, und dann müssen Sie Ihr Partitionsverwaltungswerkzeug verwenden, um Ihre Partition zu erweitern, um die virtuelle Festplatte zu füllen (oder weitere Partitionen zu erstellen). Unter Windows führen Sie einfach diskmgmt.msc
aus, und Sie können die Partition darin erweitern.
Screenshots
Referenz