Hogyan zsugoríthatjuk össze VirtualBox virtuális gépeink képfájljait Linux és Windows rendszereken

botond küldte be 2020. 12. 02., sze – 20:25 időpontban

Tartalom

 

Bevezető

VirtualBox segítségével virtuális gépeket futtathatunk számítógépünkön, amik osztoznak a számítógép hardveres erőforrásain a gazda operációs rendszerrel. Ezek közül most a tárolóeszközök méretével foglalkozunk. Egy-egy virtuális gép képfájlja önmagában is sok helyet foglalhat, de ha több gépünk is van, akkor jelentős háttértár-igénnyel kell számolnunk, ezért célszerű optimálisan kihasználni a rendelkezésre álló tárhelyünket. A VirtualBox lehetőséget biztosít a dinamikusan növekvő tárolók használatához is, amelyek segítségével olyan meghajtókat hozhatunk létre, amik belül (virtuálisan) ugyanúgy fixen meghatározott méretűek, de maguk a fizikai képfájlok létrehozásukkor csak néhány megabyte méretűek, és a használat során növekednek a rákerülő adatmennyiség függvényében (például első körben egy operációs rendszer telepítésekor). Ez visszafelé sajnos nem igaz, tehát ha például letörlünk valamit a virtuális gépről, akkor a virtuális tárolóeszköz fizikai képfájljának mérete sajnos nem csökken. Ebben a leírásban megnézzük, hogy kézi módszerrel hogyan zsugoríthatjuk össze VirtualBox virtuális gépeink dinamikusan növekvő képfájljait a ténylegesen használt méretükre Linux és Windows rendszereken – ezáltal sok helyet spórolva számítógépünkön.

Ez a módszer természetesen csak a dinamikus méretű tárolóeszközökkel működik, a fix méretűekkel nem, valamint csak akkor tudjuk zsugorítani a tároló képfájlját, ha már előtte volt olyan adat rajta, amit utána töröltünk, ezért a képfájl mérete megnövekedett, de a törlést követően nem zsugorodott vissza. Így például egy friss Windows vagy Linux telepítés után nem nyerünk ezzel a módszerrel helyet, csak ha letöltöttünk a virtuális gépre több GB-nyi adatot, majd később letöröltük azt.

Ebben a leírásban a virtuális gép tömörítését/zsugorítását elvégezzük Linux/Windows vendég és gazda gépekkel is, így mindegyik variáció sorra kerül. Ezek között átugró linkek is találhatók, amikkel kihagyhatjuk a számunkra szükségtelen részeket.

 

 

Virtuális tárolóeszköz ellenőrzése

Első körben ellenőrizzük, hogy a zsugorítani kívánt virtuális tárolóeszköz valóban dinamikusan növekvő típusú-e, mert csak ezt lehet zsugorítani. Ehhez indítsuk el a VirtualBox progamot, majd a Fájl menüben indítsuk el a Virtuális média-kezelő... részt.

Linux gazdagépen:

VirtualBox - Virtuális tárolóeszköz típusának ellenőrzése Linux gazdagépen

És Windows gazdagépen:

VirtualBox - Virtuális tárolóeszköz típusának ellenőrzése Windows gazdagépen

Tehát bármelyik platformon is használjuk a VirtualBoxot, a virtuális média-kezelő panelen válasszuk ki a zsugorítani kívánt tárolóeszközt, majd fent kattintsunk a Tulajdonságok ikonra, majd a panel alsó részén pedig válasszuk ki az Információ fület és győződjünk meg róla, hogy a tároló részleteinél a "Dinamikusan növekvő tároló" jelenik meg.

 

Virtuális gép előkészítése a zsugorításhoz

Ha tehát megbizonyosodtunk róla, hogy a cél VirtualBox tárolóeszközünk dinamikusan növekvő típusú, akkor ezután először a virtuális gépet kell előkészítenünk arra, hogy zsugorítható legyen a hozzá kapcsolt tárolóeszköz .vdi fájlja. Ezt néhány lépésben tehetjük meg: letakarítunk minden felesleges dolgot a gépről amire nincs szükségünk (pl. nem használt programok, felesleges fájlok eltávolítása, lomtár ürítése, stb), majd a tárolóeszközön fennmaradó üres helyet felülírjuk nullákkal, egy erre a célra készített programmal.

Ezeket a lépéseket elvégezzük Először egy Debian, Ubuntu, majd egy Windows vendég gépen is.
Ha Windows virtuális gépet szeretnénk zsugorítani, akkor átugorhatjuk a Linux vendég rendszer előkészítése részt, és léphetünk egyből a Windows vendég rendszerek előkészítése fejezetre.

 

Linux vendég rendszerek előkészítése

Indítsuk el a zsugorítani kívánt Linux virtuális gépet, majd root-ként végezzünk takarítást. Ezt  Debian illetve Ubuntu rendszereken egyformán végezhetjük.

Nem használt csomagok és a csomaggyorsítótár törlése

Rootként először frissítsük a csomagjainkat, hogy az utána futtatásra kerülő parancsok már a friss csomagállapottal dolgozhassanak:

apt-get update
apt-get upgrade

Ezután futtassuk az alábbi takarító APT parancsokat:

apt-get autoremove
apt-get clean

Az első parancs eltávolítja a nem használt csomagokat, elavult csomagfüggőségeket, stb. A második parancs pedig a helyben tárolt csomaggyorsítótárat törli.

Lomtár ürítése (opcionális)

Amennyiben asztalkörnyezetet is használunk a virtuális gépen, akkor töröljük a lomtárat is. Ezt megtehetjük az asztalon lévő lomtár ikon segítségével, vagy a parancssorból is a normál felhasználónkkal:

rm -rf ~/.local/share/Trash/*
Ha nem használunk asztalkörnyezetet, hanem például csak konzol módban szerverként működtetjük a gépet, akkor erre nincs szükség, mert a terminálban általában használt rm parancs nem használja a lomtárat, hanem egyből töröl. Így ebben az esetben a lomtár könyvtára még nem is létezik, mert csak az első használatkor jön létre.

Zerofree csomag telepítése

 

 

A zerofree parancs segítségével fel kell "töltenünk" nullákkal a tárhelyen lévő üres helyet. A zerofree csomag alapból nem a rendszer része, ezért telepítsük:

sudo apt-get install zerofree
A programot csak lecsatolt, vagy csak olvashatóként csatolt partíciókon használhatjuk, ezért normál futási környezetben nem futtathatjuk. Ehhez újra kell indítani a virtuális gépet a helyreállítási módban.

Virtuális gép újraindítása helyreállítási módban

Ahhoz, hogy futtathassuk a zerofree parancsot, újra kell indítanunk a virtuális gépet. Ebben a példában most csak olvasható módban csatoljuk a root partíciót, és így indítjuk el a gépet.

Korábban már készítettem egy leírást arról, hogy hogyan állíthatjuk vissza a root jelszavunkat. Most ennek a leírásnak az elejére lesz szükségünk, ahol korábban hasonlóan kellett elindítani a gépet. Kövessük tehát az ott leírtakat egészen a Root konzol elindítása részig. Itt annyi különbséggel folytassuk, hogy a leírásban lévő ro (Read Only) részt ne írjuk át rw -re, hanem hagyjuk ro értékeken (Debianban és Ubuntuban is). A többit ugyanúgy állítsuk be, csak az ro részeket ne változtassuk! Tulajdonképpen itt csak az "init=/bin/bash" részt kell a sor végéhez fűzni. Ezzel elérjük, hogy csak olvasható módban fogja felcsatolni a root (/) partíciót és egyből kapunk egy root prompt-ot is.

Ha átírtuk, nyomjuk meg az F10 billentyűt, hogy elindítsa a konfigurációt.

Zsugorítandó kötet blokk eszközének megkeresése

Miután a root prompt-hoz kerültünk meg kell keresnünk a blokk eszközünk nevét, amit zsugorítani/tömöríteni szeretnénk. Ez az eszköz a root (/) fájlrendszerbe csatlakozik csak olvasható módban. Ennek kiderítésére többféle parancs is rendelkezésre áll amikkel kilistázhatjuk a géphez csatlakozó blokk eszközöket. Az alábbiak közül futtassuk, amelyik szimpatikusabb:

df
lsblk
fdisk -l
Fizikai kötet megkeresése
Fizikai kötetekről akkor beszélünk, ha a rendszer telepítésekor a particionálásnál nem vontunk össze több partíciót logikai kötetekké, hanem fizikai kötetekként particionáltuk a merevlemezt. Így kerültek particionálásra például az ezen az oldalon készült Debian szerverek alaprendszere is.

Nálam tehát az egyik Debian virtuális gépen a df és az fdisk parancsok kimenete:

Blokk eszközök kilistázása Debian rendszeren

Ebben a példában a root (/) fájlrendszerre a /dev/sda1 partíció van felcsatolva, így tehát itt ez a fizikai root partíció, amit keresünk, ezt kell majd később használnunk a zerofree programhoz. Természetesen ez más gépen eltérő is lehet, attól függően hány merevlemez csatlakozik a géphez, és azokon hány partíció van, melyikről indul az operációs rendszer, stb. Így tehát ez itt egy egyszerű példa.

Logikai kötet megkeresése
Logikai kötetekről pedig akkor beszélünk, ha a particionálás során egy vagy több partíciót logikai kötetnek (LVM) állítottunk be, illetve vontunk össze több partíció esetén. Így kerültek particionálásra például az ezen az oldalon készült Ubuntu szerverek alaprendszere is.

Az Ubuntu virtuális gépen (a nagyobb felbontás miatt) a df, lsblk és az fdisk parancsok kimenete egyben látszik egyetlen képernyőn is:

Blokk eszközök kilistázása Ubuntu rendszeren

Noha ezeket a telepítéseket annak idején így készítettem el, mert ezek voltak a telepítők alapértelmezett beállításai, azonban fizikai és logikai köteteket mindkét disztribúcióval létre lehet hozni, ez tehát nem disztribúció függő. Itt csak a szemléltetés kedvéért mutatom be mindkét kötetfajtával a virtuális gépek tárolóinak zsugorítását.

Ebben az Ubuntu példában pedig a keresett logikai kötetünk virtuális blokk eszközének az elérése a parancsok kimenetében jól látszik:

/dev/mapper/ubuntu--vg-ubuntu--lv

Logikai kötetek esetén tehát ezt, vagy ehhez hasonló eszköznevet kell használnunk a /dev/mapper struktúrából – például a /dev/sda3 helyett –, amit a zerofree parancsnak meg kell majd adnunk. Így biztosak lehetünk benne, hogy ha a logikai kötetünk több fizikai kötetből áll, akkor is megfelelően fogja feltölteni nullákkal az összekapcsolt fizikai egységeket is.

Üres blokkok feltöltése nullákkal a zerofree programmal

A virtuális gép zsugorításhoz történő előkészítésének utolsó lépéseként futtatni kell a zerofree programot a fentebb beazonosított eszközön.

A fenti Debian és Ubuntu példáknál maradva a Debian fizikai kötetére/partíciójára alkalmazandó parancs:

zerofree -v /dev/sda1

Végigpörögnek a százalékok 100%-ig, majd a kimenet nálam:

A zerofree program futtatása fizikai köteten

És az Ubuntu logikai kötetén:

zerofree -v /dev/mapper/ubuntu--vg-ubuntu--lv

 

 

Itt is végigpörögnek a százalékok, majd:

A zerofree program futtatása logikai (LVM) köteten

Ha a zerofree parancs lefutott, ebben a futási módban a poweroff paranccsal állíthatjuk le a gépet:

poweroff -f

 

A következő fejezetben a Windows vendég rendszert készítjük elő a zsugorításhoz/tömörítéshez. Ha át kívánjuk ugrani ezt a részt, kattintsunk a Virtuális gép zsugorítása a VirtualBox segítségével fő fejezetre.

 

Windows vendég rendszerek előkészítése

Indítsuk el a zsugorítani kívánt Windows virtuális gépet, majd végezzünk takarítást. Ebben a példában én az egyik Win10-es virtuális gépemen mutatom ezt be.

Lomtár ürítése

Miután letöröltünk minden felesleges programot és fájlt a gépről, töröljük a lomtárat.

Lemez töredezettségmentesítése

Windows vendég gépek esetén a FAT/NTFS fájlrendszerek használata miatt erősen ajánlott a zsugorítandó lemez töredezettségmentesítése, hogy a Virtualbox gyorsabban végezhessen a zsugorítási művelettel. A töredezettségmentesítőt a meghajtó ikonjára jobb egérgombbal kattintva a tulajdonságok panelen érhetjük el az Eszközök fülön:

Windows 10 meghajtó töredezettségmentesítése

Üres blokkok feltöltése nullákkal az SDelete programmal

Windows vendég rendrendszer zsugorítása előtt is ugyanígy kell eljárnunk: az erre készített SDelete program segítségével felülírjuk az üres helyet nullákkal.

A programot töltsük le a Microsoft oldaláról, majd csomagoljuk ki.

Itt nincs szükség a gép újraindítására, mint a Linux vendég rendszerek esetén, tehát kicsomagolás után egyből használhatjuk is a programot. Kicsomagolás után kapunk 32 bites és 64 bites változatot is. Nyissunk egy parancssori ablakot, majd nézzünk bele a könyvtárba:

SDelete progrma kicsomagolva Windows rendszeren

Értelemszerűen használjuk a vendég rendszerünk architektúrájának megfelelően a 32 vagy a 64 bites változatot. Első használatkor még egy licenc ablak is előjön, ezen fogadjuk el a feltételeket.

Az üres hely nullákkal történő feltöltéséhez pedig futtassuk az sdelete.exe programot -z opcióval, ahogy a súgójában is ajánlja. Feltételezve, hogy a 64 bites változatot kell használnunk és a C meghajtót kell zsugorítanunk (ez a legáltalánosabb eset), a parancsunk a következő:

sdelete64.exe c: -z

 

 

Ekkor elindul a program, szépen végigpörögnek a százalékok:

SDelete program működés közben

SDelete program működés közben - 2. fázis

SDelete program - elkészült

Miután elkészült, kiléphetünk a parancssorból, és leállíthatjuk a gépet.

 

Virtuális gép zsugorítása a VirtualBox segítségével

A zsugorítási művelet a gazda operációs rendszeren történik. Miután felkészítettük a virtuális gépet a fenti műveletek elvégzésével és le is állítottuk azt, jöhet a zsugorítás. A zsugorítás mindkét gazda operációs rendszeren ugyanúgy a VirtualBox program parancssori kapcsolóival végezhető el.

A zsugorítást először egy Debian, majd Windows gazda gépen hajtjuk végre, így mindkét rendszerrel bemutatom ennek a kivitelezését.
Ha Windows gazda gépen szeretnénk zsugorítani virtuális gépet, akkor átugorhatjuk a következő Linuxos részt, és léphetünk egyből a Virtuális gép zsugorítása Windows gazda rendszeren fejezetre.

 

Virtuális gép zsugorítása Linux gazda rendszeren

Parancssorban lépjünk be a korábban zsugorításra előkészített virtuális gép tárolóegységének (.vdi) könyvtárába, és ellenőrizzük a képfájl méretét, hogy a zsugorítás után össze tudjuk hasonlítani a csökkentett mérettel. Ebben a példában a fentebb előkészített Debian 10-es tökéletes szerver 1.1-es változatát (ami hamarosan az oldalra is felkerül) zsugorítom:

Virtuális gép méretének ellenőrzése zsugorítás előtt

Itt a kijelölt sor mutatja a szóban forgó virtuális gép vdi fájlját, aminek a mérete jelenleg 9,4 GB.

Ezután zsugorítsuk a fájlt a vboxmanage paranccsal, ami a VirtualBox programcsomag része, és benne van az elérési útban is:

vboxmanage modifymedium disk <vdi fájl> --compact

Ekkor végigmennek itt is a százalékok 10-esével. Miután végzett, ellenőrizzük ismét a méretét:

Virtuális gép zsugorítása Linux gazda rendszeren - készen

Itt láthatjuk, hogy a 9,4 GB-os vdi fájl lecsökkent 4,4 GB méretűre. Ez elég szép helyspórolás. Persze megjegyzem, a gépre sok minden felkerült működése során, és törölve is lett róla sok dolog, tehát nem egy friss telepítésű gépről van szó, így tehát nem meglepő a méret ekkora mértékű csökkenése.

 

Virtuális gép zsugorítása Windows gazda rendszeren

 

 

Windows rendszerben nyissunk egy parancssor ablakot. Itt be kell lépnünk a VBoxManage.exe parancs könyvtárába, mivel Windowsban nem kerül bele az elérési útvonalba a program könyvtára.

A VirtualBox alapértelmezetten a C:\Program Files\Oracle\VirtualBox\ könyvtárba települ, ha a telepítéskor nem változtattuk meg a könyvtárát. Amennyiben másik könyvtárba telepítettük, akkor használjuk azt.

Belépve a parancs könyvtárába, először listázzuk ki a virtuális HDD-ket az alábbi VBoxManage.exe paranccsal:

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe list hdds

Erre kiadja azokat a virtuális diszkeket, amik kapcsolódnak valamilyen virtuális géphez, valamint kiad róluk még néhány egyéb információt is:

VirtualBox - Virtuális lemezek listázása Windows 10 gazda gépen a VBoxManage.exe paranccsal

Az itt megjelenített, megabyte-okban mért kapacitási adatok azok a virtuális méretre vonatkoznak, tehát még célszerű megnézni a .vdi fájlunk valódi méretét is:

VirtualBox Virtuális lemezképfájl méretének ellenőrzése

Ez a virtuális lemezkép tehát körülbelül 33 GB méretű. Ezután jöhet a zsugorítás, amit ugyanúgy kell végezni, mint Linuxban:

VBoxManage.exe modifymedium disk "C:\utvonal\lemezkep.vdi" --compact

Saját példával pedig:

VBoxManage.exe modifymedium disk "D:\Egyéb\virtualbox\sajat_gepek\win_10_aztali_gepem.vdi" --compact

Ez kicsit tovább tartott, mint az ennél jóval kisebb Debian virtuális gép tömörítése, de végiment ez is. Végül újra kilistázva a fájl méretét, jól látszik itt is a jelentős méretcsökkenés:

VirtualBox Virtuális lemezkép zsugorítása Windows 10 gazda számítógépen

Ennél a gépnél a 33 Gbyte méretből lett 26 Gbyte, ami itt is elég jelentős méretcsökkentést jelent.

 

 

Konklúzió

Így lehet tömöríteni, zsugorítani a VirtualBox virtuális gépeinek a lemezképfájljait Linux, illetve Windows rendszereken, valamint Linux, illetve Windows virtuális gépeket. Ha sok virtuális gépünk van, mint ahogy nekem is, akkor ezzel a zsugorítással rengeteg tárhelyet spórolhatunk meg. Azonban ebben nincsen semmi extra, ez a művelet csak a virtuális gép használata során "feleslegesen felgyűlt" üres helytől szabadítja meg a virtuális gépeket. Ez a folyamat a gép következő indításával természetesen újra indul, tehát időnként érdemes elvégezni virtuális gépeink tömörítését/zsugorítását. Mindezt célszerű egy-egy nagyobb takarítási, törlési munka utánra időzíteni, hogy minél több helyet nyerhessünk vissza.