1

Temat: Forsowanie sprawdzania ext4? (rootfs)

Co jakiś czas na wszystkich systemach z zewnętrznym rootfs na USB (pendrive) wywala mi się filesystem.
Nie zapisuje się tam nic co zużywałoby znacznie te napędy, a mimo to co kilkanaście tygodni w logach pojawia się...

Apr  1 22:08:24 Dupek kernel: [841058.040000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:24 Dupek kernel: [841058.030000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:24 Dupek kernel: [841058.010000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 131, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.880000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 765, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.730000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 765, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.640000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 765, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.480000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 765, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.250000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 342, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.120000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.110000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.100000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.090000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:19 Dupek kernel: [841053.070000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 131, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.700000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 13, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.520000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.510000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.500000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.480000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:18 Dupek kernel: [841052.470000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 131, block 0)
Apr  1 22:08:14 Dupek kernel: [841048.740000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:14 Dupek kernel: [841048.730000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:14 Dupek kernel: [841048.720000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:14 Dupek kernel: [841048.700000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 367, block 0)
Apr  1 22:08:14 Dupek kernel: [841048.690000] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 131, block 0)

Nie mam zielonego pojęcia jak temu zapobiec, tym bardziej że chciałbym aby router był czymś bezawaryjnym...
awarii prądu nie ma, uptime'y kilkudziesięciodniowe...

Da się jakoś wymusić 'sprawdzanie' filesystemu?

Ratuję sytuację wypinając pendrive, podpinając do linuksa, proste fsck.ext4 (bez błędów) i jest ok... hmm

Router to WDR3600.

2 (edytowany przez build000 2015-04-01 22:58:08)

Odp: Forsowanie sprawdzania ext4? (rootfs)

I tak rób jak do tej pory - to jedyne rozsądne wyjście.
Możesz też sformatować dysk/partycję (od tego bym w ogóle zaczął) z poziomu openwrt i użyć natywnego narzędzia e2fsck (fsck) (po doinstalowaniu badblock również sprawdzanie wadliwych bloków i naprawy - ale wiadomo - to tylko router - rób więc naprawy jak teraz z poziomu linucha na kompie).
Jest narzędzie tune2fs (pod openwrt też można je doinstalować) do ustawienia częstotliwości automatycznego sprawdzania - jak w każdym zresztą linuchu - może to jednak wymagać zmian w init. Od bólu możesz napisać prosty skrypt wrzucony do np. rc.local (czy do crona), który będzie automatycznie odmontowywał partycję (przedtem oczywiście zamykał wszelkie procesy korzystające z tej partycji), sprawdzał ją i ewentualnie naprawiał, następnie montował na nowo (i włączał na nowo zabite procesy).

3

Odp: Forsowanie sprawdzania ext4? (rootfs)

Nie czuję się na siłach jeśli chodzi o taki skrypt, ponadto w tym czasie bezużyteczny będzie router (zgaduję)...
Ewentualnie wrzucić to w nocy, raz na tydzień...

4

Odp: Forsowanie sprawdzania ext4? (rootfs)

Choć nadal zastanawia mnie - skąd te rozjazdy filesystemu, skoro nie ma nic, co by na niego zapisywało jako uruchomionej usługi?
Ewentualnie jaka konfiguracja ext4 w fstab bardziej zabezpieczy sprzęty, które są kilkaset kilometrów dalej i "nie ma" jak ich zdalnie ratować...?

5

Odp: Forsowanie sprawdzania ext4? (rootfs)

check_fs sprawdza system przed zamontowaniem. O ile potrafi go naprawić samodzielnie.

A jak rozjechać system? Prosto - wystarczy że podczas działania systemu odłączy się urządzenie na magistrali i pojawi jeszcze raz. Do tego jakiś mały zapis i już masz zgubione inody.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6

Odp: Forsowanie sprawdzania ext4? (rootfs)

check_fs sprawdza system przed zamontowaniem. O ile potrafi go naprawić samodzielnie.

A jak rozjechać system? Prosto - wystarczy że podczas działania systemu odłączy się urządzenie na magistrali i pojawi jeszcze raz. Do tego jakiś mały zapis i już masz zgubione inody.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez build000 2015-04-05 10:54:59)

Odp: Forsowanie sprawdzania ext4? (rootfs)

W fstab nic nie zrobisz, poza przymuszeniem do sprawdzania przy starcie za każdym razem - jednak nie potrafi naprawiać - stąd pisałem, że trzeba modyfikować init - poza tym zależy jak duże te partycje i poziom błędów - jak sprawdzanie miałoby trwać pół dnia i przy dużej szansie, że samo sprawdzanie/naprawianie partycji może wysypać router to chyba lepiej to jednak robić na kompie.
Ogólnie w tej kwestii, czyli dużych nośników danych, ich pełna obsługa pod openwrt to nadal temat niedopracowany (i chyba taki ma być z założenia przy złączach USB - router to nie urządzenie zdolne do takich morderczych operacji biorąc pod uwagę np. niepewność zasilania po USB czegokolwiek co ciągnie sporo prądu - dobra stabilizacja napięcia/wydajność prądowa w przeciętnych routerach na złączu USB przeważnie leży i kwiczy).
Wcześniej zasugerowany pomysł na skrypt o określonej funkcjonalności też pewno by miał sens, jedynie w przypadku, gdy nośnik to jakiś stosunkowo mało pojemy pendrak.