Wyczyść nieużywane miejsce zerami (ext3, ext4)


73

Jak wyczyścić nieużywane miejsce zerami? (ext3, ext4)

Szukam czegoś mądrzejszego niż

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

Podobnie jak FSArchiver szuka „używanej przestrzeni” i ignoruje nieużywaną, ale przeciwną stronę.

Cel: Chciałbym skompresować obrazy partycji, dlatego wysoce zalecane jest wypełnienie nieużywanego miejsca zerami.

Btw. Dla btrfs: Wyczyść nieużywane miejsce zerami (btrfs)



1
Możliwe są dwa różne rodzaje odpowiedzi. Co starasz się osiągnąć? Albo 1) bezpieczeństwo, zabraniając komuś odczytania tych danych, lub 2) optymalizacja kompresji całej partycji lub [wydajność SSD] ( en.wikipedia.org/wiki/Trim_(computing) ?
Totor

Odpowiedzi:


77

Takim narzędziem jest zerofree.

Z jego opisu:

Zerofree znajduje nieprzydzielone, niezerowane bloki w systemie plików ext2 lub ext3 i wypełnia je zerami. Jest to przydatne, jeśli urządzeniem, na którym rezyduje ten system plików, jest obraz dysku. W takim przypadku, w zależności od typu obrazu dysku, narzędzie pomocnicze może zmniejszyć rozmiar obrazu dysku po uruchomieniu zerofree. Zerofree wymaga odmontowania systemu plików lub podłączenia tylko do odczytu.

Zwykle sposobem na osiągnięcie tego samego wyniku (zerowanie nieużywanych bloków) jest uruchomienie „dd”, utworzenie pliku pełnego zer, który zajmuje całe wolne miejsce na dysku, a następnie usunięcie tego pliku. Ma to wiele wad, które zerofree łagodzi:

  • to jest wolne
  • powoduje, że obraz dysku (tymczasowo) rośnie do maksymalnego rozmiaru
  • (tymczasowo) wykorzystuje całe wolne miejsce na dysku, więc inne jednoczesne operacje zapisu mogą się nie powieść.

Zerofree został napisany do uruchamiania z systemów GNU / Linux zainstalowanych jako systemy-goście na maszynie wirtualnej. Jeśli tak nie jest, prawie na pewno nie potrzebujesz tego pakietu.

AKTUALIZACJA # 1

Opis pakietu .deb zawiera teraz następujący akapit, który sugerowałby, że będzie to również działało poprawnie z ext4.

Opis: zerowe wolne bloki z systemów plików ext2, ext3 i ext4 Zerofree znajduje nieprzydzielone bloki o niezerowej wartości w systemie plików ext2, ext3 lub ext4 i wypełnia je zerami ...

Inne zastosowania

Inną aplikacją tego narzędzia jest kompresja obrazów dysków, które są kopią zapasową dysku rzeczywistego. Typowym tego przykładem jest zrzut karty SD w BeagleBone lub Raspberry Pi. Po wyzerowaniu pustych przestrzeni obrazy zapasowe można kompresować bardziej wydajnie.


1
Czy to jest oficjalna strona narzędzia intgat.tigress.co.uk/rmy/uml/index.html ? Czy uważasz, że korzystanie z ext4 jest bezpieczne?
Grzegorz Wierzowiecki

2
@GrzegorzWierzowiecki: tak, to jest strona, ale dla debiana i przyjaciół jest już w repozytorium. Użyłem na partycji ext4 na dysku wirtualnym, aby stopniowo zmniejszać obraz pliku dysku, i nie miałem problemu.
enzotib

1
Nie jest to równoważne z prostą ddmetodą z pierwotnego pytania, ponieważ nie działa na zamontowanych systemach plików.
jlh

strona zerofree mówi o łatce, która pozwala ci zrobić „system plików jest zamontowany z opcją zerofree”, dzięki czemu zawsze zeruje usunięte pliki w sposób ciągły. czy to wymaga ponownej kompilacji jądra? czy jest łatwiejszy sposób na osiągnięcie tego samego?
endolith

2
Bądź ostrożny - straciłem system plików ext4 zerofreena Astralinux (oparty na Debianie)…
Hubbitus

33

Podsumowanie metod (jak wspomniano w tym pytaniu i gdzie indziej), aby wyczyścić nieużywane miejsce na ext2 / ext3 / ext4:

Zerowanie nieużywanego miejsca

System plików nie jest podłączony

  • Jeśli „dysk”, na którym znajduje się twój system plików, jest alokowany elastycznie (np. Nowoczesny dysk SSD obsługujący TRIM, plik VM, którego format obsługuje rzadkość itp.), A twoje jądro mówi, że urządzenie blokowe je rozumie, możesz użyć e2fsck -E discard src_fsdo odrzucenia nieużywanego miejsca (wymaga e2fsprogs 1.42.2 lub wyższy).
  • Używanie zerofree (np. zerofree src_fs) Do jawnego pisania zer na nieużywanych blokach.
  • Używanie e2image -rap src_fs dest_fstylko do kopiowania używanych bloków (nowy system plików powinien znajdować się na „zerowanym” dysku, wymaga e2fsprogs 1.42.9 lub nowszego).

System plików jest zamontowany

  • Jeśli „dysk”, na którym znajduje się twój system plików, jest cienko wyposażony (np. Nowoczesny dysk SSD obsługujący TRIM, plik VM, którego format obsługuje rzadkość itp.), Twoje jądro mówi, że urządzenie blokowe je rozumie i wreszcie obsługuje go system plików ext, którego możesz użyć fstrim /mnt/fs/poprosić system plików o odrzucenie nieużywanego miejsca.
  • Korzystanie cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfillz bezpiecznego usuwania używa tej techniki). Ta metoda jest nieefektywna, niezalecana przez Teda Ts'o (autora ext4), może nie zerować pewnych rzeczy i może spowolnić przyszłe fsck.

Odmontowanie systemu plików da lepsze wyniki niż zamontowanie go. Odrzucanie jest zwykle najszybszą metodą, gdy wiele wcześniej wykorzystywanego miejsca wymaga wyzerowania, ale użycie zerofreepo procesie odrzucania może czasem wyzerować trochę więcej (w zależności od tego, w jaki sposób odrzucenie jest realizowane na „dysku”).

Zmniejszanie pliku obrazu

Obraz jest w dedykowanym formacie VM

Musisz użyć odpowiedniego narzędzia obrazu dysku (np. qemu-img convert src_image dst_image), Aby umożliwić odzyskanie zerowanego miejsca i umożliwić zmniejszenie pliku reprezentującego obraz.

Obraz jest plikiem surowym

Aby rozrzedzić plik, można zastosować jedną z następujących technik (więc zerowanie przestaje zajmować miejsce):

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (wymaga util-linux v2.25 lub wyższej).

W dzisiejszych czasach może być łatwiej użyć narzędzia takiego jak virt-sparsify, aby wykonać te czynności i wiele więcej za jednym razem.

 Źródła


15

sfillz bezpiecznego usuwania można to zrobić i kilka innych powiązanych zadań.

na przykład

sfill -l -l -z /mnt/X

AKTUALIZACJA # 1

Istnieje drzewo źródłowe, które wydaje się być używane przez projekt ArchLinux na github, który zawiera źródło, dla sfillktórego jest narzędziem zawartym w pakiecie Secure-Delete.

Kopia sfillstrony podręcznika użytkownika znajduje się tutaj:


ten adres URL jest przestarzały. nie mam pojęcia, gdzie jest teraz jego strona główna (a nawet jeśli nadal ją ma), ale jest ona spakowana dla Debiana i Ubuntu. prawdopodobnie inne dystrybucje też. jeśli potrzebujesz kodu źródłowego, możesz go znaleźć w archiwach Debiana, jeśli nie możesz go znaleźć nigdzie indziej.
cas

Przestarzały adres URL strony podręcznika został naprawiony. Wygląda na to, że „Digipedia” już nie jest rzeczą.
mwfearnley

8

Jeśli masz e2fsprogs 1.42.9, możesz e2imagew pierwszej kolejności utworzyć obraz partycji bez wolnego miejsca, dzięki czemu możesz pominąć krok zerowania.


Nie mogłem (łatwo) znaleźć żadnych informacji online na temat tych parametrów, ale faktycznie są one podane w informacjach o wersji 1.42.9: e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfearnley

1
To cenne narzędzie! Jednak Twoja odpowiedź byłaby lepsza, gdyby wyjaśniła także, jak z niej korzystać. To e2image -ar /dev/foo1 | gzip > fs.img.gzlub niektóre z jego odmian. Dołącz, -faby użyć go na zamontowanym fs.
marcelm


0

jeśli nie chcesz korzystać z dodatkowych narzędzi, ta metoda powinna być szybsza niż cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

Dlaczego miałoby to być szybsze niż cat? (Nie, argument wielkości bloku ddnie pomaga)
marcelm


2
Tak, ale to nie ddprzyspiesza. W rzeczywistości prawdopodobnie catprzyspiesza. Rozmiar bloku jest ważny tylko w celu zminimalizowania obciążenia wywołaniami systemowymi i zoptymalizowania użycia pamięci podręcznej procesora. Z górą wywołania systemowego wchodzisz w obszar malejących zwrotów. Pamięć podręczna zaczyna boleć powyżej, powiedzmy, 1 MB. Podczas pracy na prawdziwych dyskach i tak jesteś związany we / wy, a kwestia ta jest w większości dyskusyjna. Spróbuj samodzielnie go przetestować.
marcelm
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.