Jak monitorować nalot systemu plików BTRFS pod kątem błędów?

11

Widziałem trochę dokumentacji na temat demona, który może wykonać program / skrypt dla różnych zdarzeń BTRFS, ale nie mogę go już znaleźć.

Jak mogę wykonać skrypt / program w przypadku awarii dysku dla macierzy RAID1 BTRFS? Chciałbym uruchomić skrypt na każdym błędzie, aby działał jako wczesne ostrzeżenie o potencjalnie uszkodzonym dysku, ale faktyczna awaria dysku jest najważniejsza. W tym momencie chciałbym odmontować system plików (jeśli tak nie jest BTRFS) i ustawić alarm.

Ioan
źródło
1
Dlaczego chcesz, aby system odmontował raid1 w przypadku awarii dysku? Ten rodzaj bije cel, prawda? To znaczy, możesz mieć z tego jakiś powód, ale domyślnie nie powinien tego robić
Petr
Miałem RAID5 mają dwa dyski awarie w krótkim czasie od siebie. Chciałem skonfigurować nowy system wykorzystujący funkcję nalotu lustrzanego BTRFS i szybko zareagować na problemy z napędem (niekoniecznie z powodu awarii napędu), aby zmniejszyć ryzyko dalszych uszkodzeń, jednocześnie zapewniając czas na rozwiązanie pierwotnej przyczyny. Mam nadzieję, że lustro N-way BTRFS kiedyś będzie dobrze działać.
Ioan
@Ioan: Dlatego RAID-5 nie zawsze jest zalecany i zamiast tego należy użyć RAID-6. Resilver bardzo mocno obciąży wszystkie dyski, co może spowodować awarię drugiego dysku, który może się zepsuć, podczas tego procesu. W przeciwieństwie do RAID-5, RAID-6 może sobie z tym poradzić (możesz również zamontować go w trybie tylko do odczytu i zaktualizować kopię zapasową przed wymianą drugiego dysku).
basic6

Odpowiedzi:

18

Oprócz zwykłego systemu rejestrowania, BTRFS posiada polecenie stats , które śledzi błędy (w tym błędy odczytu, zapisu i uszkodzenia / sumy kontrolnej) na dysk:

# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs   0
[/dev/mapper/luks-123].read_io_errs    0
[/dev/mapper/luks-123].flush_io_errs   0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0

Abyś mógł utworzyć prosty cronjob root:

[email protected]
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'

Spowoduje to sprawdzenie dodatniej liczby błędów co godzinę i wysłanie wiadomości e-mail. Oczywiście przetestowałbyś taki scenariusz (na przykład powodując uszkodzenie lub usunięcie grep), aby sprawdzić, czy powiadomienie e-mail działa.

Ponadto w przypadku zaawansowanych systemów plików, takich jak BTRFS (które mają sumę kontrolną), często zaleca się zaplanowanie czyszczenia co kilka tygodni w celu wykrycia cichego uszkodzenia spowodowanego uszkodzeniem dysku.

@monthly /sbin/btrfs scrub start -Bq /data

Ta -Bopcja sprawi, że scrub będzie na pierwszym planie, dzięki czemu zobaczysz wyniki w wiadomości e-mail, którą cron Ci wyśle. W przeciwnym razie będzie działał w tle i trzeba pamiętać o ręcznym sprawdzaniu wyników, ponieważ nie byłoby ich w wiadomości e-mail.

Aktualizacja : Poprawione grep, zgodnie z sugestią Michaela Kjörlinga, dzięki.

Aktualizacja 2 : Dodatkowe uwagi na temat czyszczenia i regularnych operacji odczytu (nie dotyczy to tylko BTRFS):
Jak zauważył Ioan, szorowanie może potrwać wiele godzin, w zależności od wielkości i rodzaju tablicy (i innych czynników), w niektórych przypadkach nawet dłużej niż jeden dzień. Jest to aktywny skan, nie wykrywa on przyszłych błędów - celem peelingu jest znalezienie i naprawienie błędów na twoich dyskach w tym momencie. Jednak, podobnie jak w przypadku innych systemów RAID, zaleca się planowanie okresowych operacji szorowania. Prawdą jest, że typowa operacja we / wy, taka jak odczyt pliku, sprawdza, czy odczytane dane są rzeczywiście poprawne. Ale rozważ proste lustro - jeśli pierwsza kopia pliku jest uszkodzona, być może z powodu dysku, który wkrótce umrze, ale druga kopia, która jest poprawna, jest w rzeczywistości odczytywana przez BTRFS, wtedy BTRFS nie będzie wiedział, że istnieje uszkodzenie na jednym z dysków. Jest tak po prostu dlatego, że otrzymano żądane dane,Oznacza to, że nawet jeśli konkretnie przeczytasz plik, o którym wiesz, że jest uszkodzony na jednym dysku, nie ma gwarancji, że ta operacja odczytu wykryje uszkodzenie.
Załóżmy teraz, że BTRFS zawsze czyta tylko z dobrego dysku, nie jest uruchamiane żadne szorowanie, które wykryłoby uszkodzenie na złym dysku, a następnie dobry dysk również się zepsuje - w wyniku tego nastąpi utrata danych (przynajmniej BTRFS będzie wiedział które pliki są nadal poprawne i nadal pozwolą ci je odczytać). Oczywiście jest to uproszczony przykład; w rzeczywistości BTRFS nie zawsze odczytuje z jednego dysku i ignoruje drugi.
Chodzi jednak o to, że okresowe czyszczenie jest ważne, ponieważ znajdzie (i naprawi) błędy, których normalne operacje odczytu niekoniecznie wykryją.

Uszkodzone dyski : Ponieważ to pytanie jest dość popularne, chciałbym zauważyć, że to „rozwiązanie monitorujące” służy do wykrywania problemów z potencjalnie złymi dyskami (np. Zginający dysk powoduje błędy, ale nadal jest dostępny).

Z drugiej strony, jeśli dysk nagle zniknie (odłączony lub całkowicie martwy, zamiast umierać i powodować błędy), byłby to dysk z błędem (ZFS oznaczałby taki dysk jako AWARIA). Niestety, BTRFS może nie zdawać sobie sprawy z tego, że dysk zniknął podczas montowania systemu plików, jak wskazano w tym wpisie listy mailowej z 09/2015 (możliwe, że został on załatany):

Różnica polega na tym, że mamy kod wykrywający urządzenie nieobecne podczas montowania, nie mamy (jeszcze) kodu wykrywającego upuszczanie go na zamontowanym systemie plików. Dlaczego właściwe wykrywanie zniknięcia urządzenia nie wydaje się priorytetem, nie mam pojęcia, ale jest to kwestia odrębna od zachowania montowania.

https://www.mail-archive.com/[email protected]/msg46598.html

W tym czasie pojawi się mnóstwo komunikatów o błędach, więc grepowanie dmesg może nie być wiarygodne.
W przypadku serwera korzystającego z BTRFS może być pomysł na niestandardowe sprawdzenie (zadanie cron), które wysyła alert, jeśli przynajmniej jeden z dysków w macierzy RAID zniknie, tj. Nie będzie już dostępny ...

podstawowy 6
źródło
1
Czy coś takiego nie grep -vE ' 0$'byłoby lepsze?
CVn
@ MichaelKjörling: Dobry pomysł, zaktualizowałem swoją odpowiedź, dziękuję!
basic6,
To fajny pomysł i robię to jako regularną kontrolę integralności. Suma kontrolna wszystkich danych może jednak potrwać dłużej niż godzinę. Nie wspominając już o zużyciu sprzętu, jeśli pracuje on ciągle, aby wykryć błędy. BTRFS sprawdza sumowanie wszystkich normalnych operacji systemu plików i byłby to bardziej skuteczny sposób natychmiastowego reagowania na nie.
Ioan
@loan: Masz rację, szorowanie może trwać wiele godzin, więc oczywiście kładzie duży nacisk na dyski. Ale ma to na celu wykrycie cichego uszkodzenia, abyś mógł wymienić zły dysk, zanim inny ulegnie awarii. Ciche zepsucie nie zdarza się podczas normalnych operacji FS, więc nie będziesz automatycznie informowany.
podstawowe6
@ basic6: Oczywiście, i do tego świetnie. Jednak nie wykrywa błędów podczas normalnej pracy, takich jak zdegradowana tablica BTRFS, aż do następnego szorowania. Cichą korupcję można rozwiązać za pomocą miesięcznego szorowania w celu zwiększenia wydajności, ale jest to zbyt długo na inne błędy.
Ioan,
4

Od wersji btrfs-progs v4.11.1 statystyka ma opcję --check, która zwróci wartość niezerową, jeśli którakolwiek z wartości nie będzie równa zero, eliminując potrzebę wyrażenia regularnego.

statystyki urządzenia -c /

Nick Mayer
źródło
3

Nie polegałbym na poleceniu stats dla powiadamiania o błędach, ponieważ to polecenie nie zwraca błędu, jeśli dysk nagle zniknie. Możesz to przetestować, odłączając kabel SATA lub ciągnąc dysk - niezalecane w przypadku ważnego systemu plików.

btrfs device stats /

Po ponownym uruchomieniu, btrfs pokazuje brakujące dyski, ale może to być za późno.

btrfs fi show
Charles Young
źródło
2

Wydaje się, że nie ma demona ani narzędzia, które oficjalnie zgłasza zdarzenia BTRFS do obsługi przez użytkownika. Najbliższą alternatywą jest monitorowanie dziennika systemu pod kątem komunikatów z BTRFS i odpowiednie reagowanie.

http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html

Powyższe łącze zawiera więcej informacji na temat konfigurowania skryptu ( secpakietu w Debianie lub SEC ) przeznaczonego do monitorowania dziennika ogólnego przeznaczenia w celu reagowania na nieoczekiwane komunikaty dziennika dotyczące BTRFS. Zależy to również od regularnego zaplanowania przeszukiwania systemu plików w celu sprawdzenia rotacji bitów i wysłania wpisów dziennika jako środka zapobiegawczego. Poniżej znajduje się fragment specyficzny dla skryptu SEC:

Jak skonfigurować sec, korelator zdarzeń do zgłaszania błędów lub ostrzeżeń systemu plików btrfs

Po zainstalowaniu sec.pl (apt-get install sec na debian lub http://simple-evcorr.sourceforge.net/ ), zainstaluj 2 pliki konfiguracyjne poniżej.

Nie jest to niezawodne, polega na wyrażeniu regularnym znanych wiadomości, które są w porządku, i zgłasza wszystkie nieznane. W razie potrzeby możesz rozszerzyć negatywne wyrażenie regularne.

polgara:~\# cat /etc/default/sec  
\#Defaults for sec  
RUN_DAEMON="yes"  
DAEMON_ARGS="-conf=/etc/sec.conf -input=/var/log/syslog -pid=/var/run/sec.pid -detach -log=/var/log/sec.log"

polgara:~# cat /etc/sec.conf  
\# http://simple-evcorr.sourceforge.net/man.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html  
type=SingleWithSuppress  
ptype=RegExp  
pattern=(?i)kernel.*btrfs: (?!disk space caching is enabled|use ssd allocation|use .* compression|unlinked .* orphans|turning on discard|device label .* devid .* transid|detected SSD devices, enabling SSD mode|has skinny extents|device label|creating UUID tree|checking UUID tree|setting .* feature flag|bdev.* flush 0, corrupt 0, gen 0)  
window=60  
desc=Btrfs unexpected log  
action=pipe '%t: $0' /usr/bin/mail -s "sec: %s" root
Ioan
źródło
1

Brzmi jak zadanie monitorowania systemu. Istnieje kontrola, która implementuje interfejs API wtyczki Nagios o nazwie: check_btrfs . Jak widać w kodzie źródłowym, ma on funkcję o nazwie, check_dev_statsktóra sprawdza statystyki urządzenia i stanie się krytyczna, jeśli którakolwiek z wartości będzie niezerowa. Sprawdza również problemy z alokacją. Pozostaje niejasne, jak zachowuje się kontrola, gdy jeden dysk jest nieobecny lub przechodzi w tryb offline .

PS: Wtyczka jest spakowana w Debianie: monitoring-plugins-btrfs

ypid
źródło