Samenvatting:
VBoxManage.exe modifyhd --resize
kan de logische grootte van de disk image vergroten (maar niet verkleinen) (de grootte gezien door het gast OS).
VBoxManage.exe modifyhd inputfile.vdi --compact
kan de fysieke disk image grootte verkleinen (de grootte van het image bestand op disk zoals gezien door het host OS). Dit verandert echter niet de logische schijfgrootte. Merk op dat dit alleen werkt als vrije ruimte eerst op nul is gezet in het gast OS.
modifyhd
werkt alleen met de dynamische formaatvariant (“dynamically allocated image”).
modifyhd
werkt alleen met VDI en VHD image formaten.
- Als je snapshots gebruikt, moet je de laatste snapshot VDI klonen uit de “Snapshots” submap.
Voor details zie paragraaf 8.23. VBoxManage modifyhd in de handleiding.
De reden waarom het verkleinen van de logische schijfgrootte van een VDI nog niet geïmplementeerd is, is om datacorruptie te voorkomen die zou kunnen optreden en als gevolg daarvan zou u onbootbare VM’s hebben. Daarom moet, wanneer de --resize
optie wordt gebruikt, de nieuwe schijfgrootte groter zijn dan de huidige grootte. Het is niet toegestaan om kleiner of gelijk aan de huidige grootte te zijn. Met andere woorden, een schijf van 40 GB kan alleen worden verkleind tot 41 GB of meer dan dat, het kan niet worden verkleind tot 40 GB (dat is gewoon dom) of 39 GB of minder dan dat.
Oude versies van VirtualBox maakten VDI bestanden aan als “fixed” format varient. De nieuwe standaard instelling is nu om “dynamische” formaat varianten aan te maken wanneer nieuwe VDI (virtual disk image) bestanden worden aangemaakt. (Ik gok dat dit het geval is sinds de introductie van dynamische formaatvariant, in welke versie dat ook is geïntroduceerd).
Dus wat de foutmelding “operation for this format is not implemented yet” betekent, is dat je VDI bestand de “fixed” formaatvariant gebruikt. Om dit probleem te omzeilen moet u uw VDI-bestand klonen met het commando clonehd
. Om te zien in welke opmaakvariant uw VDI-bestand zich op dit moment bevindt, kunt u het commando showhdinfo
gebruiken.
Werkvoorbeeld
Toon VDI-informatie over de huidige schijf.
Invoercommando: 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>
Zie je waar het zegt “vaste standaard”? Daarom spuugt het de bovenstaande fout uit als je probeert de grootte aan te passen.
Kloon het oude VDI bestand naar een nieuw VDI bestand.
Input commando: 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à! Het oude bestand is nu gekloond naar een nieuw bestand. Aangezien de standaard instelling in nieuwe versies van VirtualBox is om “dynamische” formaatvariant te gebruiken, hoeft u dat niet expliciet te definiëren. Hoewel, als u met een oudere versie van VirtualBox werkt, dan wilt u misschien de optie op “dynamisch” zetten (als die al beschikbaar is) om een betere compatibiliteit en/of flexibiliteit met toekomstige versies van VirtualBox te garanderen.
Toon VDI informatie over de gekloonde disk.
Invoer commando: 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>
Zie je dat er nu “dynamische standaard” staat? Wat leuk!
(Even terzijde! De reden dat hier 7806 MB staat als fysieke grootte is omdat ik de --compact
optie had gebruikt op het originele VDI bestand in een poging om conversie naar dynamische formaat variant af te dwingen. Gewoon iets dat ik las op het VirtualBox forum, het zou zogenaamd hebben gewerkt met oudere versies, dus ik dacht dat ik dat net zo goed eens kon proberen. Het werkte niet.)
Herschalen van de gekloonde schijf.
Invoer commando: 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>
Succes! Geen format gelul meer. Vergeet alleen niet om de grootte van de nieuwe, gekloonde schijf aan te passen, en niet die van de originele. Houd in gedachten dat de grootte wordt uitgedrukt in MB. Ik geloof dat je zowel bijv. 51200
als 50G
(of eventueel “GB”) kunt gebruiken. Er is ook de optie --resizebyte
die gebruikt kan worden om de grootte in bytes uit te drukken.
Toon VDI informatie over de herschikte kloon disk.
Invoer commando: 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>
Dat is het! Wat je vanaf hier moet doen is deze gekloonde schijf toevoegen als je nieuwe VDI voor de VM. Dat doe je in VirtualBox. Ik zal daar niet verder op ingaan. Als je dit tot nu toe hebt kunnen lezen en begrijpen, dan heb je waarschijnlijk geen verdere begeleiding nodig. Je kunt het oude “fixed” bestand verwijderen, of het als backup laten staan. Zorg ervoor dat u het nieuwe VDI bestand test voordat u het originele bronbestand verwijdert.
Note! Je zult niet direct de nieuwe grootte van de gekloonde schijf zien. Je moet de VM ermee opstarten, en dan moet je je partitie management tool gebruiken om je partitie uit te breiden om de virtuele schijf te vullen (of meer partities maken). Voor Windows, draai gewoon diskmgmt.msc
en je zult in staat zijn om de partitie daar uit te breiden.
Screenshots
Reference