Jak bezpiecznie wymienić dysk, który nie został jeszcze uszkodzony w macierzy RAID5 systemu Linux?


26

Mam programową macierz RAID5 (Linux md) na 4 dyskach.

Chciałbym wymienić jeden z dysków na nowy, nie wprowadzając tablicy w stan zdegradowany i, jeśli to możliwe, w trybie online. Jak to by było możliwe?

Jest to ważne, ponieważ nie chcę:

  • zaryzykuj nacisk na inne dyski, aby podczas awarii można było zawiesić,
  • ryzykuję, że jestem w stanie „bez parytetu”, więc nie mam siatki bezpieczeństwa przez pewien czas.

Przypuszczam, że robienie tego w trybie online to zbyt wiele pytań i powinienem po prostu skopiować ( dd) dane starego dysku na nowy offline, a następnie je wymienić, ale myślę, że jest to teoretycznie możliwe ...

Trochę kontekstu : wszystkie dyski wirują prawie nieprzerwanie od ponad 5,5 lat. W tej chwili nadal działają idealnie i wszystkie przechodzą (długi) autotest SMART. Mam jednak powody, by sądzić, że jeden z tych 4 dysków nie wytrzyma znacznie dłużej (domniemana awaria predykcyjna).

Odpowiedzi:


36

Korzystanie z mdadm 3.3

Od wersji mdadm3.3 (wydanej 3 września 2013 r.), Jeśli masz jądro w wersji 3.2+ , możesz postępować w następujący sposób:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1jest urządzeniem, które chcesz wymienić, sdc1jest preferowanym urządzeniem do tego i musi być zadeklarowane jako zapasowe w twojej macierzy.

--withOpcja nie jest wymagana, jeśli nie podano, wszelkie dostępne zapasowe zostaną wykorzystane.

Starsza wersja mdadm

Uwaga: Nadal potrzebujesz jądra w wersji 3.2+ .

Po pierwsze, należy dodać nowy dysk jako zapasowy (wymienić md0i sdc1z urządzeniem RAID i dysków, odpowiednio):

# mdadm /dev/md0 --add /dev/sdc1

Następnie zainicjuj operację zamiany kopii w następujący sposób ( sdd1urządzenie powodujące awarię):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

Wynik

System skopiuje wszystkie czytelne bloki od sdd1do sdc1. Jeśli dojdzie do nieczytelnego bloku, odtworzy go z parzystości. Po zakończeniu operacji poprzednia część zapasowa (tutaj sdc1:) stanie się aktywna, a awaria dysku zostanie oznaczona jako nieudana (F), aby można ją było usunąć.

Uwaga: podziękowania należą się dla frostschutz i Ansgar Esztermann, którzy znaleźli oryginalne rozwiązanie (patrz duplikat pytania ).

Starsze jądra

Inne odpowiedzi sugerują:

  • Johnny „s podejście : Tablica konwersji do RAID6«zastąpić»dysku, a następnie z powrotem do RAID5,
  • Hauke Laging „s podejście : krótko wyjąć dysk z macierzy RAID5, sprawiają, że część RAID1 (lustro) z nowym dysku i dodać, że napęd lustro z powrotem do macierzy RAID5 (teoretycznego) ...

2
mdadm --addjest nadal potrzebny, zanim --replacezadziała. ( mdadm3.3, Ubuntu 15.10). Jeśli zrobisz to --addpóźniej --replace, kopiowanie rozpocznie się natychmiast po dodaniu części zapasowej. (Urządzenie pozostanie oznaczone jako „chce wymiany”).
Peter Cordes,

3

Może to być możliwe spełnienie wymagań

  1. online
  2. nie stresuj żadnego dysku oprócz tego, który ma zostać wymieniony

Ale nawet jeśli poniższe mogą zadziałać, prawdopodobnie nie znajdziesz tego rodzaju rekomendacji „w książkach” ...

Pomysł:

  1. Wyjmij dysk OLD z tablicy (na krótką chwilę): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Utwórz nowe urządzenie MD (RAID-1) z dysków STAŁY i NOWY: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Umieść RAID-1 z powrotem w tablicy (zamiast / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Co powinno :-) się stać:

  1. RAID-5 zostaje zsynchronizowany z / dev / md42. To nie powinno zająć długo.
  2. RAID-5 normalnie znów działa (ale wolniej).
  3. / dev / NEW jest synchronizowany z / dev / OLD.

Obserwuj postęp synchronizacji ( cat /proc/mdstatlub mdadm --monitor). Po zakończeniu synchronizacji wyjmij RAID-1 z RAID-5, zatrzymaj RAID-1, ponownie dodaj / dev / NEW do RAID-5. Jeśli wszystko jest w porządku, zastąp superbloki mdraid na / dev / OLD, aby uniknąć problemów:mdadm --zero-superblock

Ostrzeżenie: szybka synchronizacja RAID-5 może działać tylko w przypadku korzystania z mapy bitowej. Jeśli go nie masz, lepiej najpierw przetestuj manekin RAID-5 (bez mapy bitowej). Lub dodaj jeden. Powinno być możliwe przynajmniej dodanie zewnętrznego. W przeciwnym razie może być konieczne zatrzymanie RAID-5 przed zmianą urządzeń. Jeśli jednak uruchomisz system z RAID-5, stanie się to nieco skomplikowane.


3

Jeśli nie masz nic przeciwko uruchamianiu RAID-6 (2 dyski parzystości zamiast 1) i jeśli korzystasz z mdadmin 3.1.x lub nowszego, możesz przekonwertować macierz RAID-5 na RAID-6, aby dodać dodatkowy dysk parzystości . Spowoduje to jednak obciążenie tablicy podczas przebudowy. Ma to również wpływ na wydajność, ponieważ istnieje więcej dysków parzystych do aktualizacji podczas zapisu.

Ale jeśli zakończy się powodzeniem, możesz utrzymać uszkodzony dysk na miejscu, a gdy ostatecznie się nie powiedzie, nadal masz ochronę parzystości dla tablicy. Myślę, że możesz przekonwertować macierz z RAID6 z powrotem na RAID5, jeśli nie będziesz czekać, aby zachować ją jako RAID6.

Nie znam internetowego sposobu na utrzymanie macierzy jako RAID-5 i zastąpienie dysku bez przełączania macierzy w tryb awaryjny, ponieważ myślę, że musisz oznaczyć ją jako nieudaną. Sposobem na to może być Twój pomysł na kopię dd.


@haukelaging FYI jest teraz możliwe od jądra 3.2, patrz moja odpowiedź .
Totor
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.