`e2fsck -n` + jak się dowiedzieć, czy trzeba uruchomić e2fsck, aby naprawić uszkodzone bloki?

2

Chcemy sprawdzić system plików na dyskach jako /deb/sdc ... /dev/sdgna każdym komputerze z systemem Red Hat Linux.

Celem jest znalezienie potrzebnych dysków e2fsck(jak e2fsck -y /dev/sdbitp.)

Według strony podręcznika

-n
Otwórz system plików tylko do odczytu i przyjmij odpowiedź „nie” na wszystkie pytania. Pozwala e2fsckna użycie nieinteraktywne. Ta opcja nie może być określona w tym samym czasie co opcje -plub -y.

Kiedy uruchomimy polecenie (przykład)

 e2fsck -n /dev/sdXX

dostajemy

e2fsck 1.42.9 (28-Dec-2013)
Warning!  /dev/sdc is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/sdc: clean, 94/1310720 files, 156685/5242880 blocks

Więc co musimy wychwycić z e2fsck -nwyjścia, co wymaga od nas uruchomienia e2fsck(bez -n)?

proces e2fsck

init 1
umount /dev/sdXX
e2fsck -y /dev/sdXX  # (or e2fsck -C /dev/sdXX for full details) 
init 3
Król Dawid
źródło

Odpowiedzi:

0

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.

Kamil Maciorowski
źródło
dziękuję bardzo za długą i doskonałą odpowiedź, tylko jedna uwaga, dlaczego nie zrobić -> [[$? -eq 4]] && e2fsck -y / dev / sdXX, to jest prostsze
King David
po drugie - czy uruchomienie e2fsck -nf / dev / sdXX jest bezpieczne, gdy urządzenie jest zamontowane?
Król Dawid
@KingDavid [ $? -eq 4 ]tęskni np. 12Która jest 4+8. Prawdopodobnie nie otrzymasz tej wartości. To zależy od ciebie, co logika będziesz używać, czy będziesz sprawdzać 128, czy nie, itd. Jeśli chcesz, aby dopasować dokładnie 4wtedy [ $? -eq 4 ]należy zrobić dobrze. e2fsck -nf /dev/sdXXjest bezpieczny, ponieważ -nczyni go tylko do odczytu, dlatego polecenie nie może niczego zepsuć. Osobne pytanie brzmi: czy stan zamontowany może zmienić wniosek? Tego nie wiem. Zakładam, że musisz sprawdzić kondycję systemu plików bez zakłócania normalnych operacji. Oczywiście powinieneś umountwcześniej e2fsck -y.
Kamil Maciorowski
@KingDavid ja celowo zepsuty mój (test) plików z niektórych ddpoleceń i dostałem kod wyjścia 12z e2fsck -nf. Myślę, że nie powinieneś sprawdzać soli 4; lepiej używaj mojego kodu świadomego w bitach.
Kamil Maciorowski
0

Najpierw sprawdź, czy jest to system plików Journaling.

„System plików kronikowania to system plików, który śledzi zmiany, które nie zostały jeszcze zatwierdzone w głównej części systemu plików, rejestrując zamiary takich zmian w strukturze danych znanej jako„ kronika ”, która zwykle jest dziennikiem cyklicznym. w przypadku awarii systemu lub awarii zasilania takie systemy plików mogą zostać przywrócone online szybciej, z mniejszym prawdopodobieństwem uszkodzenia ”.

Następnie możesz spróbować Gparted, aby sprawdzić spójność i zobaczyć, co narzędzie może dla Ciebie zrobić.

Stef
źródło