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 * .
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.
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:
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.
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 namount -n -o remount,ro -t ext4 /dev/sda1
, a następniezerofree -v /dev/sda1
.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> --compact
aby skompaktować plik dysku.To polecenie może wyzerować dysk, gdy jest odmontowany:
Oto przykład, w jaki sposób uzyskać dd do okresowego drukowania:
Oto
dd
podobny program, który okresowo automatycznie wydrukuje dane wyjściowe:źródło
zerofree
uż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.