Jak sprawdzić RAID „mdadm” podczas działania?


41

Zaczynam otrzymywać kolekcję komputerów w domu i aby je wesprzeć, mam swój „serwerowy” system Linux z macierzą RAID.

Obecnie mdadm RAID-1będzie, RAID-5kiedy będę miał więcej dysków (a potem RAID-6mam nadzieję). Jednak słyszałem różne historie o uszkodzeniu danych na jednym dysku i nigdy tego nie zauważyłeś z powodu użycia drugiego dysku, aż do momentu awarii pierwszego dysku, i okazało się, że drugi dysk również jest zepsuty (i trzeci, czwarty , Piąty dysk).

Oczywiście kopie zapasowe są ważne i dbam o to również, ale wiem, że wcześniej widziałem skrypty, które twierdzą, że pomagają w rozwiązaniu tego problemu i pozwalają sprawdzić RAID podczas jego działania. Jednak teraz, gdy szukam tych skryptów, trudno mi znaleźć coś, co wydaje się podobne do tego, co uruchomiłem wcześniej i czuję, że jestem nieaktualny i nie rozumiem, co się zmieniło.

Jak sprawdzisz działającą macierz RAID, aby upewnić się, że wszystkie dyski nadal działają poprawnie?

Monitoruję SMART na wszystkich dyskach, a także mdadmskonfigurowałem wysyłanie do mnie wiadomości e-mail w przypadku awarii, ale chciałbym wiedzieć, że moje dyski czasami też same „sprawdzają”.


Wygląda na to, że już jesteś na dobrej drodze, wystarczy skonfigurować crona, aby wysłać wyniki smartctl dla twoich napędów.
laebshade

Odpowiedzi:


56

RAID z redundancją polega na tym, że będzie działał tak długo, jak to możliwe, ale oczywiście wykryje błędy, które wprowadzą go w tryb awaryjny, taki jak awaria dysku. Możesz pokazać aktualny status tablicy za pomocą mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Ponadto zwracany jest stan mdadm -Dniezerowy, jeśli występuje jakikolwiek problem, taki jak uszkodzony komponent (1 oznacza błąd, który kompensuje tryb RAID, a 2 oznacza całkowity błąd).

Możesz również uzyskać szybkie podsumowanie statusu wszystkich urządzeń RAID, patrząc /proc/mdstat. Możesz również uzyskać informacje o urządzeniu RAID /sys/class/block/md*/md/*; zobacz Documentation/md.txtw dokumentacji jądra. Niektóre /syswpisy są również zapisywalne; na przykład możesz uruchomić pełne sprawdzenie za md0pomocą echo check >/sys/class/block/md0/md/sync_action.

Oprócz tych kontroli na miejscu mdadm może powiadomić Cię, gdy tylko wydarzy się coś złego. Upewnij się, że masz MAILADDR rootw /etc/mdadm.conf(niektóre dystrybucje (np Debian) ustawić to automatycznie). Następnie otrzymasz powiadomienie e-mailem, gdy tylko wystąpi błąd (zdegradowana tablica) .

Upewnij się, że otrzymujesz pocztę wysyłaną do roota na komputerze lokalnym (niektóre nowoczesne dystrybucje pomijają to, ponieważ uważają, że cała poczta e-mail przechodzi przez zewnętrznych dostawców - ale odbieranie poczty lokalnej jest konieczne dla każdego poważnego administratora systemu). Przetestować ten korzeń wysyłając maila: echo hello | mail -s test root@localhost. Zwykle poprawna konfiguracja poczty e-mail wymaga dwóch rzeczy:

  • Uruchom MTA na komputerze lokalnym. MTA musi być skonfigurowane przynajmniej w celu umożliwienia dostarczania poczty lokalnej. Wszystkie dystrybucje pochodzą z odpowiednimi MTA, wybierz cokolwiek (ale nie nullmailer, jeśli chcesz, aby wiadomość była dostarczana lokalnie).
  • Przekierowuj pocztę kierowaną na konta systemowe (przynajmniej root) na adres, który regularnie czytasz. Może to być Twoje konto na komputerze lokalnym lub zewnętrzny adres e-mail. W przypadku większości MTA adres można skonfigurować w /etc/aliases; powinieneś mieć linię jak

    root: djsmiley2k
    

    dla dostawy lokalnej lub

    root: djsmiley2k@mail-provider.example.com
    

    do zdalnej dostawy. Jeśli wybierzesz zdalną dostawę, upewnij się, że MTA jest skonfigurowany do tego. W zależności od MTA może być konieczne uruchomienie newaliasespolecenia po edycji /etc/aliases.


Czy możesz wyjaśnić, dlaczego nullmailer nie powinien być używany? Czy to z powodów wymienionych w unix.stackexchange.com/questions/1449/... ? Który MTA poleciłbyś?
Cameron Martin

@CameronMartin Nullmailer przekazuje pocztę tylko na zdalne urządzenie, nie realizuje dostawy lokalnej. Możesz go użyć, jeśli masz gdzieś serwer SMTP, który przyjmuje pocztę z twojego komputera, ale nie, jeśli dostarczasz pocztę lokalnie. Zredagowałem swoją odpowiedź, aby wyjaśnić.
Gilles „SO- przestań być zły”

19

Możesz wymusić sprawdzenie całej tablicy, gdy jest ona online. Na przykład, aby sprawdzić tablicę /dev/md0, uruchom jako root:

echo check > /sys/block/md0/md/sync_action

Mam również zadanie cron, które uruchamia następujące polecenie raz w miesiącu:

tar c /dir/of/raid/filesystem > /dev/null

Nie jest to dokładne sprawdzenie samego napędu, ale wymusza na systemie okresowe sprawdzanie, czy (prawie) każdy plik można odczytać z dysku. Tak, niektóre pliki zostaną odczytane z pamięci podręcznej zamiast z dysku. Ale sądzę, że jeśli plik znajduje się w pamięci podręcznej, to niedawno został pomyślnie odczytany z dysku lub wkrótce zostanie zapisany na dysku, a każda z tych operacji wykryje również błędy napędu. Zresztą uruchomienie tego zadania testuje najważniejsze kryterium macierzy RAID („Czy mogę z powodzeniem odczytać moje dane?”) I przez trzy lata obsługiwałem moją macierz, kiedy tylko dysk mi się zepsuł, było to to polecenie, które je odkryło.

Jedno małe ostrzeżenie jest takie, że jeśli twój system plików jest duży, to polecenie zajmie dużo czasu; mój system zajmuje około 6 godzin / TiB. Uruchamiam go ionicetak, aby reszta systemu nie zatrzymała się podczas sprawdzania dysku:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

Pamiętaj, że ionicebędzie działać tylko wtedy, gdy użyjesz (domyślnego) harmonogramu We / Wy CFQ.
Totor

Może to być oczywiste dla większości, ale nie dla mnie - w jaki sposób uruchomienie skryptu, którego dane wyjściowe są przekierowywane do devnull, faktycznie o czymś powiadamia? Czy w przypadku, gdy „tar” napotka jakieś błędy, zostaną one propagowane do demona mdadm, który (prawdopodobnie) wyśle ​​Ci wiadomość e-mail?
ljwobker

Moje pytanie do ciebie, stharward, to jak wychwytujesz błędy tar, jeśli są uruchamiane z zadania crona? Gdzie to daje? Myślałem, że dodasz przekierowanie dla stderr do pliku, który można okresowo monitorować, lub jego wydruk zostanie wydrukowany na konsoli otwierania okna terminala :)
Madivad

1
@ljwobker Przepraszamy za wskrzeszenie starego wątku. Myślę, że celem polecenia tar jest tutaj próba odczytania całej zawartości woluminu. Sprawdziłoby to, czy cały wolumin jest nadal czytelny i daje md szansę wykrycia uszkodzonego dysku.
mikepj

1
Jeśli pochodzi z cronjob, cron zwykle wysyła wszystkie swoje dane wyjściowe bezpośrednio do lokalizacji mailto =, jeśli jest ustawiony, w przeciwnym razie do rootowania. Jednak ... Zastanawiam się, czy dd byłby lepszy niż smoła, dla niższych kosztów ogólnych?
djsmiley2k - CoW

11

pakiet „mdadm” Debiana i Ubuntu zawiera plik

/etc/cron.d/mdadm

który z kolei w pierwszą niedzielę każdego miesiąca uruchomi polecenie

/usr/share/mdadm/checkarray --cron --all --idle --quiet

to sprawdzi spójność wszystkich twoich tablic (chyba że ustawisz AUTOCHECK na false w / etc / default / mdadm ). Raport zostanie wysłany do użytkownika „root” (upewnij się, że otrzymujesz takie e-maile).


8

Używam tej prostej funkcji do sprawdzenia /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

schludny! podoba mi się styl :) .. właśnie tego szukałem w MOTD :) dzięki!
jirislav
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.