Tworząc wirtualną maszynę pod jakimkolwiek oprogramowaniem wirtualizacyjnym, przy kroku związanym z tworzeniem wirtualnego dysku, szybko i ochoczo wybieramy tworzenie wirtualnego dysku rozszerzanego dynamicznie:

Robimy tak dlatego, że ten wybór ma baaaaardzo dużą zaletę: możemy utworzyć dysk wirtualny o dużym rozmiarze, a potem wypełniany jest on w ramach potrzeb, i teoretycznie (a dlaczego teoretycznie, to za chwilę do tego wrócimy) zajmuje ten dysk wirtualny tylko tyle miejsca na naszym dysku fizycznym, ile jest zapisanych danych wewnątrz niego (a nie więc tyle, na ile ustalona została wielkość tego dysku wirtualnego – jak w przypadku stałego rozmiaru).
Aczkolwiek, jak już wskazałem, tylko teoretycznie zajmuje on tyle miejsca, ile jest danych w środku. Dlaczego? Gdyż o ile na początku, zaraz po utworzeniu, ten dysk ma coś ok. 2MB faktycznego rozmiaru, i potem wraz z zapisywaniem danych wewnątrz niego, zaczyna się jego rozmiar dynamicznie zwiększać, to w momencie kiedy zostanie usunięta jakaś większa ilość danych, to szybko przekonamy się, że rozmiar tego wirtualnego dysku już się wcale nie zmniejsza. Zwiększa się więc może i dynamicznie, ale zmniejszać, to już niestety nie… A ilość miejsca na naszym dysku fizycznym (szczególnie na SSD), jest cenna…

Czy można coś z tym problemem poradzić? Oczywiście, że tak. Ale samo się niestety to nie zrobi. A czynność jaką musimy wykonać, nazywa się kompaktowaniem wirtualnego dysku twardego.

Niestety w ramach najpopularniejszego oprogramowania do wirtualizacji desktopów, jakim jest Oracle VM VirtualBox, nie jest to procedura na pstryknięcie palcami, i trzeba wiedzieć jak to wykonać, aby wykonać z sukcesem.

Teoretycznie służy do tego polecenie „VBoxManage modifyhd” z parametrem „–compact„, problem jednak w tym, że narzędzie to może pomniejszyć wirtualny dysk wtedy, gdy widzi iż na danym obszarze na jego końcu, znajdują się same „wyzerowane bloki” (tj. z wpisanymi bitami 0).

Stąd więc nie wystarczy tylko wydać w/w polecenie, a trzeba przejść małą procedurę.

Procedura jest troszeczkę różna gdy mamy wewnątrz wirtualnej maszyny zainstalowany system MS Windows, a troszeczkę inna, gdy mamy zainstalowaną jakąś dystrybucję GNU/Linux.

Na naszej witrynie można znaleźć artykuł, w którym opisano jak zrealizować kompaktowanie dysku gdy gościem jestem system MS Windows, a artykuł ten można znaleźć tutaj. W tym artykule w dalszej części zajmiemy się przypadkiem, gdy gościnną wirtualną maszyną jest jakaś dystrybucja GNU/Linux.

Aby nasze rozważania były bardziej namacalne,to w ramach tej procedury, rozważymy przykładowy dysk wirtualny (w którym był akurat zainstalowany system Debian Stretch GNU/Linux), o aktualnej wielkości 6,18 GB (co pozwoli nam też zobaczyć jak „spektakularne” uzyski można czasem osiągnąć):

 

 

 

 

Najpierw wyrzucamy śmieci z systemu oraz czyścimy pliki tymczasowe

Logicznym pierwszym krokiem, jaki musimy wykonać, będzie odchudzenie danych wewnątrz wirtualnego dysku (wewnątrz wirtualnej maszyny oczywiście), tak aby zostały tam tylko maksymalnie potrzebne aktualnie dane.

W tym celu trzeba przemyśleć i pousuwać to co wiemy, że już potrzebne nam w tej wirtualnej maszynie nie będzie.

 

 

 

 

Teraz zerujemy puste sektory powstałe na wirtualnym dysku po usunięciu danych

Kompaktowanie może być realizowane tylko dla „wyzerowanych” bloków, dlatego także, do tegoż celu wykorzystamy wbudowane w każdym systemie GNU/Linux narzędzie, jakim jest dd.

W celu osiągnięcia powyższego, przechodzimy najpierw w wierszu poleceń (i to jest ważne!!) do jakiegokolwiek katalogu ulokowanego na dysku, który chcemy „kompaktować”, i wykonujemy polecenie:
[simterm theme=”dark”]

dd if=/dev/zero of=zerofile bs=1M

[/simterm]

przykładowo:

W ramach w/w polecenia po parametrze „of” jest wskazana nazwa pliku, jaki zostanie na dysku utworzony (w katalogu,w którym przebywaliśmy wydając polecenie, aczkolwiek można oczywiście wskazać ścieżkę do dowolnego pożądanego katalogu), i który wypełni wolną dostępną przestrzeń na tymże wirtualnym dysku twardym (a w jego środku będą wpisane same „zera”). Można na końcu działania tego polecenia zresztą zauważyć, iż narzędzie mówi nam „Brak miejsca na urządzeniu”, co wskazuje wypełnienie właśnie całego dostępnego miejsca tym plikiem:

Stąd też po utworzeniu tego pliku, należy go teraz usunąć (poleceniem „rm„), przy czym w „wolnym miejscu” na wirtualnym dysku „zera” nadal wtedy pozostaną – i o to nam właśnie chodziło 🙂

I teraz mamy już dysk wirtualny gotowy do kompaktowania.

 

 

 

To teraz w końcu możemy wykonać kompaktowanie dysku

W tym celu w systemie gospodarza już, uruchamiamy wiersz poleceń, przechodzimy do katalogu C:\Program Files\Oracle\VirtualBox (konkretnie do katalogu, gdzie zainstalowaliśmy aplikację VirtualBox – także jak zainstalowaliśmy gdzieś indziej, niż ten podany domyślny, to oczywiście musimy przejść do tego katalogu gdzie my mamy zainstalowaną tą aplikację), wykorzystując polecenie:
[simterm theme=”dark”]

cd C:\Program Files\Oracle\VirtualBox

[/simterm]

Teraz możemy już wydać polecenie kompaktowania wirtualnego dysku, zgodnie ze schematem:
[simterm theme=”dark”]

VBoxManage modifyhd {ścieżka do dysku} --compact

[/simterm]

gdzie pod {ścieżka do dysku} podajemy ścieżkę do pliku wirtualnego dysku, który chcemy skompaktować (warto wiedzieć, że ścieżkę do dysku można także uzupełnić przeciągając po prostu plik dysku wirtualnego z eksploratora plików do okna wiersza poleceń).

 

Przykładowo, dla naszego analizowanego przypadku:

 

po czym teraz możemy sprawdzić, czy wyszedł nam jakiś uzysk po całej tej pracy:

I jak spojrzymy na początek artykułu, jak duży był wtedy tenże plik (6,18 GB), a potem spojrzymy jak wiele wirtualnych maszyn mamy… to okazuje się, że nabycie umiejętności kompaktowania wirtualnych dysków, może być dla nas wiedzą cenną (w sumie to nawet dość dosłownie).

 

 

Udostępnij, jeśli ci się spodobało: