Jak zmniejszyć dynamicznie rosnący dysk VDI z VirtualBox?

35

Moje dynamicznie rozwijające się dyski wirtualne (VDI) z różnych instalacji Ubuntu w Virtual Box faktycznie faktycznie „rosną”.

Usunięcie plików na maszynie wirtualnej nie zwalnia miejsca, które mój plik VDI wziął z miejsca na dysku twardym hosta.

Jak zmniejszyć te pliki, aby oddać nieużywane miejsce na dysku twardym z powrotem do hosta?

Takkat
źródło

Odpowiedzi:

34

Dynamicznie rozwijający się plik wirtualnego dysku twardego Virtual Box może rosnąć na żądanie maszyny wirtualnej do maksymalnego rozmiaru określonego podczas konfigurowania tego pliku. Nie zwalnia jednak przestrzeni plików, które usunęliśmy w systemie gościa.

W przypadku, gdy dysk urosł zbyt mocno, możemy go ponownie skompaktować, pod warunkiem, że nieużywane miejsce jest wypełnione zerami, a dysk ma format VDI.

W systemie plików ext2 do ext 4 można to zrobić z poziomu gościa Ubuntu za pomocą narzędzia wiersza poleceń zerofree * .Zainstaluj zeroofree

zerofree /dev/sdxX

To wymaga, aby dysk nie był w użyciu i był odmontowany . Dlatego może być konieczne tymczasowe powiązanie go z inną maszyną wirtualną, którą utworzyliśmy w tym celu, lub musimy uruchomić środowisko Ubuntu Live na tej maszynie wirtualnej.

Zastąp /dev/sdxXodpowiednią partycją sformatowaną ext2, ext3 lub ext4 .

Na więcej niż jednej partycji musimy powtórzyć zerofreedla każdej partycji. Pamiętaj, że po wypełnieniu zerami plik wirtualny tymczasowo powiększy się do maksymalnego rozmiaru.

Gdy całe nieużywane miejsce na dysku zostanie wypełnione zerami, zmniejszamy dysk

VBoxManage modifyhd <name>.vdi --compact

To znacznie zmniejszy rozmiar naszego pliku VDI.

* U gościa Windows możemy zastąpić nieużywane miejsce narzędziem sdelete.

Takkat
źródło
Czy zadziała to również w przypadku zaszyfrowanego systemu plików w gościu?
smichak
Pewnie. Jeśli używasz ecryptfs, zaszyfrowane pliki wyglądają jak zwykłe pliki dla narzędzi dyskowych i to zadziała. Jeśli korzystasz z szyfrowania całego dysku, i tak nie zostanie on rozpoznany jako partycja sformatowana na
zewnątrz
Korzystam z partycji ext4 na urządzeniu blokowym dm-crypt ... Wypróbowałem tę metodę i nie widzę pliku .vdi po zmniejszeniu. Myślę, że bloki zerowe są zapisywane jako bloki niezerowe na urządzeniu blokowym pod dm-crypt.
smichak,
2
@smichak: to jest punkt szyfrowania. Zaszyfruje cały dysk, aby upewnić się, że nie widzimy granic plików.
Takkat
3
Jeśli nie chcesz dołączyć VDI do innego komputera, możesz uruchomić system w trybie awaryjnym i zamontować dysk tylko do odczytu mount -n -o remount,ro -t ext4 /dev/sda1, a następnie zerofree -v /dev/sda1.
Hamid Nazari,
1

Oto kilka alternatywnych sposobów zerowania wolnego miejsca na dysku (który może być najbardziej czasochłonny). Następnie będziesz musiał uruchomić, VBoxManage modifyhd <disk> --compactaby skompaktować plik dysku.


To polecenie może wyzerować dysk, gdy jest odmontowany:

apt-get install zerofree
zerofree -v /dev/sdxN


Oto przykład, w jaki sposób uzyskać dd do okresowego drukowania:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


Oto ddpodobny program, który okresowo automatycznie wydrukuje dane wyjściowe:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M
chronospoon
źródło
1
Widziałem zerofreeużywany w zamontowanym systemie plików, ale kiedy był montowany tylko do odczytu. Nawet dla root FS: sudo mount -o remount,ro /- ale w sesji GUI root będzie zajęty, więc zawiedzie. Jest to jednak możliwe w Runlevel 1 ( telinit 1), więc nie trzeba w tym celu uruchamiać z płyty CD na żywo.
Tomasz Gandor