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.
Odpowiedzi:
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:
Abyś mógł utworzyć prosty cronjob root:
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.
Ta
-B
opcja 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):
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 ...
źródło
grep -vE ' 0$'
byłoby lepsze?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 /
źródło
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.
Po ponownym uruchomieniu, btrfs pokazuje brakujące dyski, ale może to być za późno.
źródło
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 (
sec
pakietu 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:źródło
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_stats
któ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
źródło