Alert zwykle ma nudny temat: zdarzenie DegradedArray na /dev/md0. Jeden dysk w programowym RAID w Linuksie wypadł, serwer nadal działa i kusi, żeby zostawić to do przyszłego tygodnia. Nie rób tego. Zdegradowana macierz RAID nie ma już redundancji dla zapisanych na niej danych, a pozostałe dyski są często w tym samym wieku i tego samego modelu co ten, który właśnie padł. Ten poradnik pokazuje, jak spokojnie wymienić uszkodzony dysk w mdadm, na typowej macierzy RAID 1, 5, 6 lub 10, żeby awaria dysku nie zamieniła się w utratę danych.

Krok 1: sprawdź status RAID w Linuksie, zanim czegokolwiek dotkniesz

Zacznij od odczytania tego, co zgłasza system. Plik /proc/mdstat podaje krótkie podsumowanie dla każdej macierzy; zdrowe dwudyskowe lustro pokazuje [UU], a zdegradowane [U_]. Szczegóły daje mdadm --detail /dev/md0, które wymienia każde urządzenie członkowskie wraz ze stanem (active, faulty, removed lub spare) i pokazuje, czy trwa resynchronizacja lub odzyskiwanie. Zanotuj, które partycje należą do której macierzy, bo wiele serwerów ma osobne macierze dla /boot, swap i danych na tych samych dyskach.

Następnie potwierdź kopie zapasowe. Odbudowa czyta każdy blok na pozostałych dyskach, a to dokładnie ten moment, w którym zwykle pada drugi słaby dysk. Jeśli ostatnia kopia jest stara lub nieprzetestowana, najpierw skopiuj ważne dane w bezpieczne miejsce.

Krok 2: rozpoznaj uszkodzony dysk po numerze seryjnym

Nazwy urządzeń, takie jak /dev/sdb, mogą zmieniać się między restartami, a wyciągnięcie złego dysku ze zdegradowanego lustra kończy się źle. Zawsze rozpoznawaj uszkodzony dysk po numerze seryjnym. Linki w /dev/disk/by-id zawierają model i numer seryjny, a smartctl -i /dev/sdb z pakietu smartmontools także drukuje numer seryjny. Zapisz go, a potem porównaj z etykietą na fizycznym dysku lub informacją o wnęce od dostawcy hostingu.

Gdy smartctl jest już otwarty, sprawdź pozostałe dyski poleceniem smartctl -a. Realokowane lub oczekujące sektory na dysku, który ocalał, zmieniają plan: skopiuj dane przed odbudową, zamiast ufać, że odbudowa się zakończy.

Krok 3: usuń uszkodzony element macierzy

Jeśli mdadm już oznaczył dysk jako faulty, usuń go z macierzy. Jeśli dysk zawodzi, ale jest jeszcze aktywny, najpierw oznacz go jako faulty. Dla każdej macierzy, która używa tego dysku:

  • mdadm /dev/md0 --fail /dev/sdb1, tylko jeśli nie jest już oznaczony jako faulty
  • mdadm /dev/md0 --remove /dev/sdb1

Powtórz to dla każdej partycji tego dysku w innych macierzach, takich jak /dev/md1. Dysk można wtedy wymienić: na gorąco, jeśli sprzęt to obsługuje, albo po zaplanowanym wyłączeniu. Na serwerach dzierżawionych otwórz zgłoszenie z numerem seryjnym i poproś dostawcę o wymianę dokładnie tego dysku.

Jeszcze lepiej: wymień zawodzący dysk przez mdadm --replace

Jeśli dysk pokazuje tylko ostrzeżenia, możesz całkowicie uniknąć okresu degradacji. Dodaj nowy dysk do macierzy jako spare, a potem uruchom mdadm /dev/md0 --replace /dev/sdb1 --with /dev/sdc1. mdadm kopiuje dane na nowy dysk, podczas gdy stary pozostaje w macierzy, i dopiero potem oznacza stary jako faulty. Redundancja jest zachowana przez cały czas, dlatego mdadm --replace to preferowana droga, gdy tylko w serwerze jest miejsce na jeszcze jeden dysk.

Krok 4: wymień uszkodzony dysk w mdadm i uruchom odbudowę

Dysk zastępczy musi być co najmniej tak duży jak ten, który zastępuje. Skopiuj układ partycji ze sprawnego elementu zamiast tworzyć go ręcznie:

  • Dyski GPT: sgdisk --replicate=/dev/sdb /dev/sda kopiuje tablicę partycji z sda na nowy sdb, a sgdisk --randomize-guids /dev/sdb nadaje nowemu dyskowi własne identyfikatory.
  • Starsze dyski MBR: sfdisk -d /dev/sda | sfdisk /dev/sdb robi to samo.

Sprawdź dwukrotnie kierunek kopiowania, zanim naciśniesz Enter, bo odwrócenie dwóch urządzeń nadpisze tablicę partycji dobrego dysku. Potem dodaj każdą nową partycję do jej macierzy poleceniem mdadm /dev/md0 --add /dev/sdb1, a odbudowa mdadm ruszy sama.

Krok 5: obserwuj odbudowę i napraw bootloader

cat /proc/mdstat pokazuje postęp odzyskiwania i szacowany czas zakończenia. Czas odbudowy RAID zależy głównie od wielkości dysku i od tego, jak zajęty jest serwer, bo jądro dławi odbudowę, żeby zostawić miejsce na normalną pracę; limity znajdują się w /proc/sys/dev/raid/speed_limit_min i speed_limit_max. Na dużych dyskach odbudowa może trwać wiele godzin, więc jeśli możesz, odłóż ciężkie zadania, takie jak pełne kopie zapasowe.

Jeśli serwer startuje z macierzy, nowy dysk potrzebuje też bootloadera. W przeciwnym razie serwer nie wystartuje następnym razem, gdy padnie ten drugi dysk. W systemach BIOS oznacza to uruchomienie grub-install na nowym dysku; w systemach UEFI trzeba odtworzyć partycję systemową EFI na nowym dysku, skopiować jej zawartość i dodać wpis rozruchowy w firmware. Na koniec sprawdź, czy monitoring nadal obserwuje macierz i czy e-maile z alertami trafiają do prawdziwej osoby.

Częste błędy w zarządzaniu programowym RAID

  • Tworzenie macierzy od nowa przez mdadm --create, żeby ją "naprawić". Na macierzy, która przechowuje dane, może to je zniszczyć; złożenie macierzy z istniejących elementów to niemal zawsze właściwe polecenie.
  • Wyciągnięcie złego dysku, bo zaufano nazwom urządzeń zamiast numerom seryjnym.
  • Zapomnienie o pozostałych macierzach na tym samym dysku, co zostawia swap lub /boot zdegradowane.
  • Brak hot spare i alertów, więc pierwsza awaria zostaje niezauważona do drugiej. Dysk hot spare pozwala mdadm zacząć odbudowę w chwili, gdy element padnie.

Większość z tego sprowadza się do pierwotnej konfiguracji RAID w Linuksie. Alerty, bootloader na każdym dysku i spisany układ, wszystko to część starannej konfiguracji RAID mdadm, zamieniają wymianę dysku w rutynową konserwację.

Najczęściej zadawane pytania: wymiana uszkodzonego dysku w mdadm

Czy mogę korzystać z serwera podczas odbudowy macierzy?

Tak. Macierz pozostaje online przez cały czas, tylko wolniej. Ryzyko leży po stronie danych: dopóki odbudowa się nie zakończy, awaria kolejnego elementu może położyć macierz, dlatego aktualna kopia zapasowa jest na pierwszym miejscu.

Odbudowa ciągle startuje od nowa albo zatrzymuje się z błędami odczytu. Co dalej?

Błąd odczytu na dysku, który ocalał, oznacza, że źródło odbudowy też zawodzi. Przestań zapisywać do macierzy, skopiuj dane lub zrób obrazy dysków i od tego miejsca zaplanuj odzyskiwanie, zamiast wymuszać odbudowę.

Czy nowy dysk musi być tego samego modelu?

Nie, ale musi być co najmniej tak duży. Mieszanie bardzo różnych typów dysków w jednej macierzy może ograniczyć całą macierz do szybkości jej najwolniejszego elementu.

Masz zdegradowaną macierz na serwerze w Los Angeles lub gdziekolwiek w Kalifornii? Nasza usługa tworzenia i zarządzania programowym RAID obejmuje wymiany dysków, odbudowy i odzyskiwanie, a większość pracy wykonujemy zdalnie, gdy dysk zastępczy zamontujesz Ty lub Twój dostawca hostingu. Jeśli odbudowa pokaże, że kopie zapasowe też wymagają uwagi, zobacz naszą usługę kopii zapasowych i odzyskiwania po awarii. Skontaktuj się z nami, podając wynik mdadm --detail dla każdej macierzy, a wspólnie ustalimy następny bezpieczny krok.