Kończy się pamięć, uruchamiając fsck na dużych systemach plików

13

Opiekuję się starym systemem Linux Debian (uruchomionym etch) z tylko 512 MB pamięci RAM, ale z dużą ilością pamięci zewnętrznej. Jeden system plików ext3 ma rozmiar 2,7 TB, a fsck nie może go sprawdzić, ponieważ zabrakło mu pamięci z błędem takim jak ten:

   Błąd przydziału tablicy bloków katalogu: Przydział pamięci nie powiódł się
   e2fsck: przerwane

Dodałem partycję wymiany 4 GB i nadal się nie kończy, ale jest to 32-bitowe jądro, więc nie oczekuję, że dodanie więcej pomoże.

Czy poza uruchomieniem 64-bitowego jądra istnieją inne sposoby zmuszenia fsck do zakończenia sprawdzania?

TimB
źródło

Odpowiedzi:

12

64-bitowe jądro i duże ilości pamięci RAM pozwolą fsck zakończyć ładnie i szybko. Alternatywnie, w e2fsck jest teraz opcja, która każe przechowywać wszystkie wyniki pośrednie w katalogu zamiast w pamięci RAM, co ogromnie pomaga. Utwórz /etc/e2fsck.confz następującą zawartością:

[scratch_files]
directory = /var/cache/e2fsck

(I oczywiście upewnij się, że katalog istnieje i znajduje się na partycji z kilkoma wolnymi GB wolnego miejsca). e2fsck uruchomi SLLOOOOWWWWWWW, ale przynajmniej się zakończy.

Oczywiście nie będzie to działać z rootem FS, ale jeśli masz zamianę, to i tak montujesz root FS.

womble
źródło
6

W końcu spróbowałem tego, co sugerował womble; oto kilka innych szczegółów, które mogą być przydatne, jeśli, podobnie jak ja, nie widziałeś wcześniej tej nowej funkcji w e2fsck.

Opcja konfiguracyjna „scratch_files” dla e2fsck stała się dostępna w pewnym momencie w wersji 1.40.x. (W naszym przypadku musieliśmy zaktualizować system do najnowszej dystrybucji Debian, aby uzyskać tę funkcjonalność).

Oprócz zasugerowanej opcji „katalog = / var / cache / e2fsk”, istnieje kilka innych opcji konfiguracyjnych, które pozwalają precyzyjnie dostosować sposób przechowywania plików scratch. Użyłem „dirinfo = false”, ponieważ system plików miał dużą liczbę plików, ale nie tak dużą liczbę katalogów. Gdyby sytuacja uległa odwróceniu, odpowiednia byłaby opcja „icount”. Wszystkie te opcje zostały udokumentowane na stronie podręcznika e2fsck.conf.

BTW, Ted T'so napisał o tych opcjach w tym wątku .

Odkryłem, że e2fsck działał bardzo wolno, znacznie więcej niż przewidywał Ted. Przez większość czasu działał przy 99,9% obciążeniu procesora (na bardzo wolnym starym procesorze), co sugeruje, że przechowywanie tych struktur danych na dysku zamiast w pamięci nie było główną przyczyną spowolnienia. Możliwe, że coś innego w tym, co było przechowywane w systemie plików, sprawiło, że e2fsck jest szczególnie powolny. W końcu na razie porzuciłem sprawdzanie systemu plików; system plików miał zostać sprawdzony, ale nie miał błędów (o ile mi wiadomo), więc postaram się go sprawdzić w dogodniejszym czasie, kiedy będziemy mogli pozwolić sobie na tygodniową awarię.

TimB
źródło
Zastanawiam się, czy btrfs jest w tym lepszy. Narzędzia ext4 najwyraźniej nie zostały zbudowane w skali. Niedawno miałem ten problem z 2 GB pamięci RAM
1133275