Używasz, e2fsckwięc zakładam, że mówimy o ext?systemie plików. Komenda
tune2fs -l /dev/sdXX
pokaże pozorny stan systemu plików (który można zamontować, jest bezpieczny). Dostaniesz też (między innymi)
Filesystem state: clean
lub coś innego niż clean. Ponieważ grepzwraca false, jeśli dopasowanie nie zostanie znalezione, podstawowa próba może wyglądać następująco:
tune2fs -l /dev/sdXX | grep "^Filesystem state:[ ]*clean$" || { commands; to; fix; the; filesystem; }
Powyższe będzie działać tylko wtedy, gdy system plików wykryje wcześniej swój stan nieczystości. Czasami i tak chcesz sprawdzić, czy nie występują problemy (dlatego pożądane zachowanie dotyczy fsckkażdego N-tego montażu lub gdy minęła taka i taka liczba dni). Jeśli dobrze zrozumiem, próbujesz dowiedzieć się, czy powinieneś e2fsck -y /dev/sdXX, analizując wyniki e2fsck -n /dev/sdXX.
Mówię: nie analizuj wyników. Sprawdź status wyjścia. Zobacz, man 8 e2fsckaby dowiedzieć się:
Zwrócony kod wyjścia e2fsckjest sumą następujących warunków:
0- Brak błędów
1- Poprawione błędy systemu plików - Poprawione błędy systemu
2plików, system powinien zostać ponownie uruchomiony
4- Błędy systemu plików pozostawione nieskorygowane
8- Błąd operacyjny
16- Błąd użycia lub błąd składni
32- e2fsckanulowany na żądanie użytkownika
128- Błąd biblioteki współdzielonej
Note e2fsck -n /dev/sdXXnie zrobi nic użytecznego (i zwróci „brak błędów”), jeśli system plików wydaje się czysty; jest to kolejny sposób na wykrycie obecnego stanu pozornego , tak jak to zrobiliśmy tune2fs. Aby to sprawdzić, potrzebujesz -fopcji. Następnie chcesz wiedzieć, czy zawiera status wyjścia4 . W bashtym może być wykonane z:
e2fsck -nf /dev/sdXX # this is safe even if the filesystem is mounted
status=$?
[ $(( $status & 4 )) -eq 4 ] && { commands; to; fix; the; filesystem; }
Szybkie wyjaśnienie:
$?jest stanem wyjścia ostatniego polecenia ( e2fsckw tym przypadku). Zapisuję go w osobnej zmiennej, dzięki czemu mogę wykonać z nią wiele testów. Nie jest to konieczne w tym prostym przykładzie, w którym jest tylko jeden test, ale ogólnie dobra praktyka. Podstawową przyczyną jest to, że po tym wiersze $statusnadal zawierają status wyjścia e2fscki mogą być ponownie użyte, podczas gdy (nowy) $?nie ma z tym nic wspólnego e2fsck.
$(( ... )) robi arytmetykę powłoki
- gdzie
&jest bitowe ORAZ,
- czym
[ ... -eq 4 ]jest w rzeczywistości testpolecenie, aby sprawdzić, czy wynik jest 4.
- Jeśli test się powiedzie,
{ ... }blok zostanie wykonany.
Mogą występować błędy nie w samym systemie plików, ale na głębszym poziomie, na urządzeniu. Myślę, że to nie wchodzi w zakres tego pytania, ale tylko po to, aby wskazać właściwy kierunek, w razie potrzeby, są to przydatne polecenia (zauważ sdX, że nie sdXX):
smartctl -t long /dev/sdX
badblocks -n -b 512 /dev/sdX
Przeczytaj strony podręcznika użytkownika przed ich użyciem.