Sprawdzanie błędów systemu plików ext4

Spis treści

Systemy plików stosuje się dla różnych nośników danych, takich jak dyski twarde, czy pendrive albo nawet płyty cd/dvd. Z formalnego punktu widzenia, system plików jest to metoda przechowywania danych i uzyskiwania do nich dostępu. Bez tego mechanizmu, informacje umieszczone na nośniku przypominały by jedynie ciąg bitów i nie wiedzielibyśmy gdzie zaczyna się jakiś plik i gdzie się on kończy. Czasami jednak zdarzają się błędy w systemie plików, które mogą doprowadzić do poważnych awarii systemu operacyjnego. Dlatego też linux co kilkanaście lub kilkadziesiąt uruchomień sprawdza stan systemu plików na każdej partycji i naprawia ewentualne błędy. W przypadku gdyby nie były one naprawiane, mogą pojawić się nowe błędy doprowadzając tym samym do całkowitej zapaści systemu.

Rutynowe sprawdzanie plików

Jako, że sprawdzanie systemu plików to podstawowa czynność, którą administratorzy powinni przeprowadzać w miarę regularnie, mamy do dyspozycji kilka narzędzi w zależności od tego z jakim systemem plików przyjdzie nam pracować. W tym artykule skupię się głównie na domyślnym systemie plików stosowanym w linuxach, tj. ext4 . Jeśli chodzi o ten system plików, to narzędzia przeznaczone do jego obsługi znajdują się w pakiecie e2fsprogs , który to umożliwia tworzenie, sprawdzanie i utrzymywanie systemu plików ext2/ext3/ext4 . Paczka zawiera także program badblocks , który jest w stanie przeskanować nośnik w poszukiwaniu uszkodzonych sektorów. Nas jednak najbardziej będzie interesować e2fsck , przy pomocy, którego będziemy sprawdzać dysk w poszukiwaniu błędów.

Do systemu plików możemy odwoływać się na kilka sposobów. Zwykle będziemy to robić przez urządzenia w katalogu /dev/ lub /dev/disk/by-* lub też przez punkty montowania, np. /home/ . Warto wiedzieć też, że w celu skrócenia łącznego czasu potrzebnego do sprawdzenia wszystkich systemów plików, program fsck będzie usiłował sprawdzać równolegle systemy plików umieszczone na fizycznie różnych dyskach.

Skanowanie systemu plików możemy zainicjować ręcznie lub też może się ono odbywać automatycznie, np. co kilka montowań partycji, przy starcie systemu operacyjnego. Możemy też je całkowicie wyłączyć.

Za pomocą narzędzia dumpe2fs możemy zobaczyć szczegółowe statystyki systemu plików dla konkretnej partycji. Nas głównie interesują dwie pozycje:

# dumpe2fs /dev/sda2 | grep -i "mount count"
dumpe2fs 1.42.13 (17-May-2015)
Mount count:              528
Maximum mount count:      -1

W tym przypadku, ostatnia linijka informuje nas, że skanowanie tej partycji w poszukiwaniu błędów zostało z jakiegoś powodu wyłączone, co możemy wnioskować także po liczbie w Mount count , która oznacza liczbę montowań, czyli ile razy zamontowaliśmy już tą partycję. Przydałoby się włączyć skanowanie dla tego systemu plików. By określić co ile montowań systemu plików ma być dokonywane sprawdzanie integralności danych, posłużymy się programem tune2fs z opcją -c , w argumencie podając liczbę, która oznacza ilość montowań. W poniższym przykładzie, licznik został ustawiony na 30:

# tune2fs -c 30 /dev/sda2

Jeśli jeszcze raz zajrzymy w statystyki systemu plików, dostrzeżemy, że pozycja z Maximum mount count uległa przepisaniu z -1 na 30 i jest to graniczna wartość, po osiągnięciu której nastąpi skanowanie systemu plików. W tym przypadku po 30 montowaniach nastąpi zresetowanie licznika w Mount count i zostanie zainicjowany program fsck dla tej partycji, czyli w tym przypadku, po zresetowaniu maszyny.

Gdybyśmy zamiast 30 wstawili 0 , skanowanie zostanie trwale wyłączone. Nie jest to jednak zalecane, gdyż może się to przyczynić do utraty danych. Jeżeli jednak nie odpowiada nam, że w najmniej oczekiwanym momencie licznik montowań akurat wybił 30 i zostaje automatycznie uruchomione skanowanie systemu plików, możemy ustawić parametr na 0 i ręcznie dokonywać sprawdzania systemu plików co określony przedział czasu.

Sterowanie fsck przy pomocy fstab

Sprawdzanie systemu plików, możemy wyłączyć też za pomocą pliku /etc/fstab . Poniżej znajduje się przykładowy wpis z partycją:

# file system   mount point   type   options                      dump  pass
/dev/sda2      /boot          ext4   defaults,errors=remount-ro   0     2

Ostatni parametr pass określa kolejność sprawdzania systemu plików. Może przyjąć trzy wartości: 0 , 1 oraz 2 . Z reguły 1 jest ustawiany dla głównego systemu plików, a 2 dla każdego z pozostałych. Wartość 0 oznacza, że partycja nie będzie sprawdzana.

Wymuszenie skanowania

Jeśli chodzi zaś o ręczne skanowanie systemu plików, to możemy go dokonać na kilka sposobów. Pierwszym z nich jest zresetowanie lub zamknięcie systemu z opcją -F:

# shutdown -Fr now
# shutdown -Fh now

Parametr -r oznacza reboot (zresetuj), zaś parametr -h halt (wstrzymaj). Po ponownym uruchomieniu komputera nastąpi sprawdzenia systemu plików.

W przypadku gdy chcemy zaplanować skanowanie systemu plików przy następnym resecie komputera ale nie uśmiecha nam się resetować go w tym konkretnym momencie, możemy utworzyć plik forcefsck w głównym katalogu / :

# touch /forcefsck

Plik forcefsck jest kasowany przy starcie systemu operacyjnego, chwilę po zakończeniu sprawdzania integralności plików. Możemy także dodać atrybut +i dla tego pliku:

# chattr +i /forcefsck

Dzięki temu atrybutowi, nawet użytkownik root nie będzie w stanie tego pliku skasować i system będzie sprawdzał wszystkie wpisy zdefiniowane w /etc/fstab przy każdym uruchomieniu komputera.

Skanowanie zaszyfrowanych partycji

W przypadku skanowania zaszyfrowanych partycji musimy pierw odszyfrować ową partycję, a dopiero później zeskanować jej system plików. Problematyczne może być znalezienie dysku (lub partycji), który chcemy poddać skanowaniu. Zaszyfrowane partycje pod linuxem wykrywane są jako /dev/dm-* , z kolei w katalogu /dev/mapper/ możemy odnaleźć linki do tych powyżej i one powinny mieć już bardziej ludzkie nazwy. Gdy ustalimy już co chcemy skanować, robimy to poniższym poleceniem:

# fsck.ext4 -nvf /dev/mapper/debian_laptop-root

Użyte parametry odpowiadają za:

  • -n -- nie dokonuje zmian w systemie plików (tryb tylko do odczytu)
  • -f -- wymusza sprawdzenie nawet czystego systemu plików, czyli takiego, który pozornie nie zawiera błędów
  • -v -- pokazuje większą ilości informacji

W przypadku dokonywania skanu w trybie tylko do odczytu, partycja może być podmontowana, w przeciwnym wypadku musi zostać odmontowana, gdyż naprawa podmontowanego systemu plików grozi utratą danych.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.