Kategória: VirtualBox

Zmenené: 14. august 2011

Zväčšenie virtuálneho disku

Už ste sa stretli s tým, že ste pri vytváraní virtuálneho stroja podcenili požiadavky na veľkosť virtuálneho disku? Ponúkam postup ako tento disk zväčšiť. Budete k tomu potrebovať nejaký nástroj, ktorý dokáže zväčšiť súborový systém partície, ja odporúčam GParted

Celý postup zväčšenia virtuálneho disku popíšem pomocou nástrojov príkazového riadku, ale väčšina operácií (okrem zväčšenia veľkosti) je dostupná aj v grafickom prostredí, čo však keď chcete manipulovať s virtuálnym strojom, ktorý máte nainštalovaný na vzdialenom počítači bez možnosti spustiť grafické prostredie?

Dynamický VDI

V prípade, že stroj používa dynamický virtuálny disk typu VDI, je zväčšenie veľmi jednoduché a poslúži príkaz VBoxManage modifyhd. Potrebujete k tomu len zistiť cestu k virtuálnemu disku alebo jeho UUID:

VBoxManage showvminfo WinXP1 --machinereadable | egrep "SATA|IDE"
storagecontrollername0="IDE Controller"
"IDE Controller-0-0"="/home/slavko/.VirtualBox/VDI/WinXP1.vdi"
"IDE Controller-ImageUUID-0-0"="08559145-4a70-429d-80bb-05c8682a57c3"
"IDE Controller-0-1"="none"
"IDE Controller-1-0"="/dev/sr0"
"IDE Controller-ImageUUID-1-0"="00445644-0000-0000-2f64-65762f737230"
"IDE Controller-tempeject"="off"
"IDE Controller-IsEjected"="off"
"IDE Controller-1-1"="none"

Príslušné hodnoty sú zvýraznené tučne, teraz možno zmeniť veľkosť disku jediným príkazom, ktorý nastavuje novú veľkosť VDI na 2 GB (20480 MB):

VBoxManage modifyhd 08559145-4a70-429d-80bb-05c8682a57c3 --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Musím vás však upozorniť, že týmto došlo len k zmene informácií o veľkosti VDI. Vzhľadom k tomu, že sa jedná o dynamicky narastajúci disk nedošlo k zmene reálnej veľkosti súboru VDI na disku. Nedošlo v však ani k zmene veľkosti partície C (či iných), to je potrebné urobiť iným spôsobom a jeden z nich popíšem na konci článku.

Pevný VDI

V prípade pevných (fixed) VDI diskov je situácia trochu zložitejšia, pretože fixné VDI nemožno priamo zväčšiť, ale je potrebné vytvoriť nový virtuálny disk a prekopírovať obsah starého na nový. Prináša to však problém, a to v prípade, že používate snímky ( snapshots). Ale pekne po poriadku, najprv si zistite potrebné informácie o virtuálnom stroji:

VBoxManage list vms
"DebDevel" {520b4904-0641-4036-85e3-a5bf797309be}
"DebServer" {cc267b4c-4551-41c3-bd02-c410f76cb72d}
"EduKlient" {7edf4920-e2a9-4348-beba-2dcdb1cc9b71}
"WinXP1" {af11e92a-61ba-431b-ef95-7e75800deea0}

Snímky

Predchádzajúci krok nie je celkom potrebný, ale keď ja si mená virtuálnych strojov akosi nepamätám (mám vytvorený systém, že sú dynamicky pridávané do menu) a o ich UUID ani nehovorím. Teraz si možno skontrolovať, či stroj má alebo nemá snímky:

VBoxManage showvminfo WinXP1 --machinereadable | grep Snapshot
SnapFldr="/home/slavko/.VirtualBox/Machines/WinXP1/Snapshots"
"IDE Controller-0-0"="príliš dlhé a nezaujímavé"
SnapshotName="Snímok"
SnapshotUUID="7f65c125-384b-4290-af29-f952781bb3d1"

Hmm, takže stroj snímok používa, keby nie, bol by výpis stručnejší:

VBoxManage showvminfo WinXP1 --machinereadable | grep Snapshot
SnapFldr="/home/slavko/.VirtualBox/Machines/WinXP1/Snapshots"

Existuje niekoľko postupov, ako klonovať disk aj so snímkami, ja však v tomto postupe použijem oveľa triviálnejší postup používaný snímok odstránim.

Rada

Ak vám odstránenie z nejakého dôvodu nevyhovuje, zvážte vytvorenie nového virtuálneho stroja…

Snímku možno odstrániť dvomi spôsobmi. Prvým spôsobom je, že ho najprv obnovíte a potom odstránite, v takom prípade dostanete virtuálny stroj do stavu, v akom sa nachádzal pri vytvorení snímku, ale to nie je to čo chcem. Druhý spôsob je jeho priame odstránenie, teda stroj ostane v aktuálnom stave, na čo použijem príkaz VBoxManage snapshot, ktorý potrebuje ako parameter meno alebo UUID snímka, ktorý má byť odstránený, takže ja použijem:

VBoxManage snapshot WinXP1 delete 7f65c125-384b-4290-af29-f952781bb3d1
0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Snapshot operation failed. Error message: Hard disk
'/home/slavko/.VirtualBox/VDI/WinXP1.vdi' has more than one child hard disk (2)

Hopla! Nastala chybička, ktorá je výsledkom mojich predošlých akcií, keď niektorý zo snímkov nebol odregistrovaný zo systému (je to starý virtuálny stroj, ktorý pochádza ešte z VBox 2.x) a zmazaný z disku. Tento problém jednoducho vyriešim v grafickom prostredí, pomocou Správcu virtuálnych diskov a učiním pokus znova:

VBoxManage snapshot WinXP1 delete 7f65c125-384b-4290-af29-f952781bb3d1
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

No, chvíľu to trvalo, ale nakoniec je snímok úspešne odstránený… Teraz možno klonovať disk. Ak by sme snímok neodstránili, pri klonovaní disku by nedošlo k naklonovaniu aktuálneho stavu, ale stavu, ktorý bol v okamžiku vytvorenia prvého (!) snímku.

Klonovanie

Pred samotným klonovaním si aj teraz najprv zobrazím informácie o diskoch:

VBoxManage showvminfo WinXP1 --machinereadable | egrep "SATA|IDE"
storagecontrollername0="IDE Controller"
"IDE Controller-0-0"="**/home/slavko/.VirtualBox/VDI/WinXP1.vdi**"
"IDE Controller-ImageUUID-0-0"="**08559145-4a70-429d-80bb-05c8682a57c3**"
"IDE Controller-0-1"="none"
"IDE Controller-1-0"="/dev/sr0"
"IDE Controller-ImageUUID-1-0"="00445644-0000-0000-2f64-65762f737230"
"IDE Controller-tempeject"="off"
"IDE Controller-IsEjected"="off"
"IDE Controller-1-1"="none"

Keďže sa tvárim, že neviem, či je disk pripojený ako SATA alebo IDE rozhranie, obmedzujem výpis na oba typy, ale dôležité z tohoto výpisu je označené tučne a jeden z týchto údajov (UUID) použijem i v príkaze na klonovanie disku:

VBoxManage clonehd 08559145-4a70-429d-80bb-05c8682a57c3 \
                   /home/slavko/.VirtualBox/Machines/WinXP1/WinXP1.vdi \
                   --format VDI --variant Standard
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: fa7cc190-ea24-4303-9f55-a93402d80b17

Výborne, klonovanie prebehlo bez problémov. V príkaze som zadal aj formát a variant, ktoré sú v tomto konkrétnom prípade vlastne zbytočné, pretože definujú predvolené hodnoty, ale aspoň je jasné, že bol vytvorený dynamický VDI disk. Dôležité je uvedomiť si, že bol vytvorený VDI rovnakej veľkosti ako bol pôvodný, ale tentoraz už je dynamický, takže zmena jeho veľkosti je rovnaká ako v spomenutom prvom prípade. V príkaze použijem UUID, ktorý mi vypísal VBoxManage pri klonovaní:

VBoxManage modifyhd fa7cc190-ea24-4303-9f55-a93402d80b17 --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Priradenie disku

Keďže som vytvoril nový virtuálny disk, musím ho ešte priradiť virtuálnemu stroju, na čo použijem príkaz VBoxManage modifyvm, ale k jeho použitiu potrebujem zhromaždiť niektoré údaje, ktoré poskytne príkaz VBoxManage showvminfo. Ako prvé potrebujem meno radiča:

VBoxManage showvminfo WinXP1 --machinereadable | grep "storagecontrollername"
storagecontrollername0="IDE Controller"
storagecontrollername1="Floppy Controller"

Okrem mena radiča sú potrebné aj číslo portu a zariadenia, tie získam podobne, pričom výpis informácií obmedzím na dané meno radiča:

VBoxManage showvminfo WinXP1 --machinereadable | grep "IDE Controller"
storagecontrollername0="IDE Controller"
"IDE Controller-0-0"="/home/slavko/.VirtualBox/VDI/WinXP1.vdi"
"IDE Controller-ImageUUID-0-0"="08559145-4a70-429d-80bb-05c8682a57c3"
"IDE Controller-0-1"="none"
"IDE Controller-1-0"="/dev/sr0"
"IDE Controller-ImageUUID-1-0"="00445644-0000-0000-2f64-65762f737230"
"IDE Controller-tempeject"="off"
"IDE Controller-IsEjected"="off"
"IDE Controller-1-1"="none"

V tomto výpise vidím, že VDI súbor je pripojený k zariadeniu označenému ako IDE Controller-0-0. Prvá časť je meno radiča, za ním nasleduje číslo portu a zariadenia, v mojom prípade majú obe čísla hodnotu 0. teraz môžem pripojiť virtuálnemu stroju novo vytvorený zväčšený disk:

VBoxManage storageattach WinXP1 --storagectl "IDE Controller" \
                                --port 0 --device 0 \
                                --medium fa7cc190-ea24-4303-9f55-a93402d80b17

V tomto okamžiku teda môj virtuálny stroj používa nový obraz virtuálneho disku, ktorý má novú veľkosť. I v tomto prípade však ešte treba zmeniť veľkosť partície, ktorá zmenou veľkosti VDI nebola dotknutá.

Zmena veľkosti partície

Napriek tomu, čo som uviedol v úvode, túto časť (teda jej gro) nebudem popisovať príkazmi príkazového riadku, a to najmä kvôli veľkej variabilite. nechcem sa sústrediť na jeden typ súborového systému (tu NTFS) a popisovať príkazy pre všetky možné súborové systémy by vydalo na malú knihu…

Celý problém zväčšovania partície je, v prípade systémovej partície), že nemôže byť menená za behu systému, je preto potrebné naštartovať systém iným spôsobom.

Tip

Ak sa nejedná o systémovú partíciu, môžete skúsiť použiť nástroje ako diskpart.exe, alebo od verzie Vista aj správcu diskov.

V úvode som odporučil program GParted a ja ho s obľubou používam v záchrannej distribúcii SystemRescueCD, ktorá poskytuje živé CD (LiveCD). Obraz najnovšej verzie SystemRescueCD mám stiahnutý, ostáva ho už len priradiť do mechaniky virtuálneho stroja. Využijem pritom informácie, ktoré som si získaval pri priraďovaní nového virtuálneho disku:

VBoxManage storageattach WinXP1 --storagectl "IDE Controller" \
    --port 1 --device 0 \
    --medium /home/slavko/projekty/mojrepo/cdroms/systemrescuecd/systemrescuecd-x86-2.3.0.iso

Po pripojení možno virtuálny stroj spustiť a počas zobrazovania štartovacej obrazovky stlačiť F12, čím bude zobrazené zavádzacie (boot) menu a z neho vybrať (príslušný kláves v mojom prípade „c”) naštartovanie z disku CD/DVD. Zavádzanie SystemRescueCD je v textovom režime a ponúka vlastné štartovacie menu. Ak si z neho neviete vybrať, vyberte prvú položku. Potom ešte dostanete otázku na klávesnicu, ale tu stačí stlačiť enter, čím potvrdíte predvolenú americkú. Ak sa systém naštartuje len v textovom režime, napíšte:

startx

A dostanete sa do grafického režimu, kde po troche hľadania nájdete vľavo dole ikonu GParted (keď nad ikonou prejdete myšou, zobrazí sa popis programu). Po spustení GParted sa zobrazí okno, ktoré má v hornej časti graficky zobrazený disk. Po kliknutí pravým tlačidlom myši si zobrazíte kontextové menu, kde stačí vybrať položku Move/Resize :

Prostredie GParted

Prostredie GParted

Tým si otvoríte dialógové okno, v ktorom môžete nastaviť nové parametre geometrie partície, a to bu priamo číslami, alebo myšou v hornej časti okne, keď prejdete kurzorom nad okraj partície a potiahnete ju požadovaným smerom. Po nastavení požadovanej veľkosti kliknite na tlačidlo Move/Resize.

Zmena geometrie partície

Zmena geometrie partície

Týmto (na prekvapenie?) ešte nič neurobíte, pretože vaše nastavenie je pridané do fronty (v dolnej časti okna), takže si môžete prípadne urobiť aj viacero zmien a až budete spokojný, nájdite v paneli nástrojov ikonku so zelenou kvačkou, ktorou spustíte vykonanie fronty, teda reálne vykonanie zmien.

Varovanie

Dajte pozor na to, aby ste mali Windows správne vypnutý, inak sa stretnete s chybovými hláseniami, ktoré vyzerajú hrozivo…

Na ukončenie práce so SystemRescueCD použite ikonu menu (celkom vľavo dole) a tam možnosť Log out, čím ukončite grafické prostredie a ocitnete sa v konzole (textovom režime). Tu zadajte halt (vypne) alebo reboot (reštartuje), podľa toho, čo chcete urobiť.

A to je všetko, priatelia, od tohoto okamžiku má váš virtuálny stroj k dispozícii väčší virtuálny disk…