Najlepszy sposób na rozbudowę oprogramowania Linux RAID 1 do RAID 10

22

mdadm nie obsługuje powiększania tablicy z poziomu 1 na poziom 10.

Mam dwa dyski w macierzy RAID 1. Chcę dodać dwa nowe dyski i przekonwertować macierz na czterodyskową macierz RAID 10.

Moja obecna strategia:

  1. Zrób dobrą kopię zapasową.
  2. Utwórz zdegradowaną macierz RAID 10 z 4 dyskami i dwoma brakującymi dyskami.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove jeden dysk z macierzy RAID 1.
  5. Dodaj dostępny dysk do macierzy RAID 10 i poczekaj na zakończenie resynchronizacji.
  6. Zniszcz macierz RAID 1 i dodaj ostatni dysk do macierzy RAID 10.

Problemem jest brak redundancji w kroku 5.

Czy jest lepszy sposób?

Hans Malherbe
źródło
5
Nie zapomnij o kroku 0. Zrób dobrą kopię zapasową wszystkiego.
Anthony Lewis
Uważam, że twoje kroki są prawidłowe. Nadmiarowość traci się w trakcie kopiowania danych z jednego zestawu do drugiego.
Kevin Kuphal
Czy można utworzyć zdegradowaną macierz RAID10 4disk?
pauska
1
Tak, po prostu używasz „/ dev / hda missing / dev / hdb missing”, ponieważ w przeciwnym razie tracisz jedną całą parę i wszystko się rozpada. Nawiasem mówiąc, „zaakceptowana odpowiedź” na to pytanie jest całkowicie błędna i nie działa.
womble
Szukam również dobrego sposobu na zrobienie tego i myślę, że metoda opisana w pytaniu jest najlepsza, jaką do tej pory znalazłem. Odpowiedź Marka Turnera nie pomaga, ponieważ tworzy tablicę z dwoma urządzeniami, których nie można przekształcić w 4 urządzenia (pozostałe 2 można dodać tylko jako części zamienne). A odpowiedź Suresha Kumara jest taka sama, jak opisana w pytaniu, tyle że nie zadziała dokładnie tak; brakujące urządzenia muszą być drugim i czwartym, a nie trzecim i czwartym. O krokach w pytaniu: Myślę, że krok 5 ma pełną nadmiarowość, a krok 6 ma nadmiarowość dla połowy danych. Naprawdę widzę, że kroki zostały zmienione
aditsu

Odpowiedzi:

8

Z Linuksem Softraid możesz stworzyć macierz RAID 10 za pomocą tylko dwóch dysków.

Nazwy urządzeń użyte poniżej:

  • md0 to stara tablica typu / poziomu RAID1.
  • md1 to nowa tablica typu / poziomu RAID10.
  • sda1i sdb2nowe , puste partycje (bez danych).
  • sda2i sdc1są starymi partycjami (z kluczowymi danymi).

Zamień nazwy, aby pasowały do ​​Twojego przypadku użycia. Użyj np., lsblkAby wyświetlić bieżący układ.

0) Backup, Backup, Backup, Backup oh i BACKUP

1) Utwórz nową tablicę (4 urządzenia: 2 istniejące, 2 brakujące):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Zauważ, że w tym przykładzie układ sda1ma brakujący odpowiednik i sdb2ma inny brakujący odpowiednik. Twoje dane md1nie są w tym momencie bezpieczne (w rzeczywistości jest to RAID0, dopóki nie dodasz brakujących członków).

Aby wyświetlić układ i inne szczegóły utworzonej tablicy, użyj:

mdadm -D /dev/md1

Uwaga! Powinieneś zapisać układ tablicy:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Sformatuj i zamontuj. /dev/md1Powinny być natychmiast użyteczny, ale muszą być sformatowane i następnie montowane.

3) Skopiuj pliki. Użyj np. Rsync, aby skopiować dane ze starej macierzy RAID 1 na nową macierz RAID 10. (jest to tylko przykładowa komenda, przeczytaj strony podręcznika dla rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Niepowodzenie 1. części starej macierzy RAID1 (md0) i dodanie jej do nowej macierzy RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Uwaga! Spowoduje to usunięcie danych z sda2. md0Nadal powinien być użyteczny, ale tylko wtedy, gdy inny członek nalot był w pełni sprawny.

Pamiętaj też, że rozpocznie się proces synchronizacji / odzyskiwania md1. Aby sprawdzić status, użyj jednego z poniższych poleceń:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Poczekaj na zakończenie odzyskiwania.

5) Zainstaluj GRUB na nowej macierzy (zakładając, że uruchamiasz się z niego). Niektóre dyski CD ratunkowe / rozruchowe systemu Linux działają najlepiej.

6) Uruchom nową tablicę. JEŚLI DZIAŁA PRAWIDŁOWO Zniszcz starą tablicę i dodaj pozostały dysk do nowej.

PUNKT BEZ POWROTU

W tym momencie zniszczysz dane ostatniego członka starej tablicy md0. Bądź absolutnie pewien, że wszystko działa.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

I jeszcze raz - poczekaj,md1zakończy się odzyskiwanie .

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Zaktualizuj konfigurację mdadm

Pamiętaj o aktualizacji /etc/mdadm/mdadm.conf(usuń md0).

I zapisz config w initramfs (aby był dostępny po ponownym uruchomieniu)

update-initramfs -u
Mark Turner
źródło
1
Skąd się biorą cztery dyski?
womble
Co? Wyraźnie stwierdzam, że muszę utworzyć tablicę z 2 dyskami, skopiować dane, zaliczyć RAID 1, usuwając jeden dysk, dodać ten dysk do RAID10, a następnie uruchomić system RAID10, jeśli zadziałał, zniszcz RAID1 i przenieś ostatni dysk na nowa RAID ....
Mark Turner
4
Edytowałeś swoją odpowiedź po moim komentarzu. Ponadto twoja procedura daje dwupłytową macierz RAID-10 z dwoma częściami zamiennymi ... prawie nie czteropartową macierz RAID-10. Woluminów RAID-10 również nie można przekształcać.
womble
2
Uruchomiłem polecenia tak, jak je dostarczyłeś, i otrzymałem dwu-dyskowy RAID-10 z dwoma częściami zamiennymi, jak pokazuje / proc / mdstat. To jest w jądrze 2.6.30, z mdadm v2.6.7.2.
womble
3
„Nie można zmienić kształtu mdadm: raid10 array / dev / md1.” Jest to również wspomniane na stronie podręcznika mdadm.
womble
9

Postępuj zgodnie z tą samą procedurą, co Mark Turner, ale kiedy tworzysz tablicę RAID, wspomnij o 2 brakujących dyskach

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Następnie przejdź do innych kroków.

Krótko mówiąc, utwórz RAID10 z 4 dyskami (z których brakuje 2), zsynchronizuj, dodaj kolejne dwa dyski.

Sam Whited
źródło
6

Właśnie skończyłem przechodzenie z LVM na dwóch dyskach 2 TB mdadm RAID 1 do LVM na czterech dyskach RAID 10 (dwa oryginalne + dwa nowe dyski).

Jak zauważył @aditsu, kolejność napędów jest ważna podczas tworzenia macierzy.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

Powyższy kod daje użyteczną tablicę z dwoma brakującymi dyskami (dodaj numery partycji, jeśli nie używasz całych dysków). Po dodaniu trzeciego dysku rozpocznie się synchronizacja. Dodałem czwarty dysk, zanim trzeci zakończył synchronizację. Pokazał się jako zapasowy, dopóki trzeci dysk się nie skończył, a następnie zaczął synchronizować.

Kroki w mojej sytuacji:

  1. Zrób dobrą kopię zapasową.

  2. Utwórz zdegradowaną macierz RAID 10 z czterema dyskami z dwoma brakującymi dyskami (nazwiemy brakujące dyski nr 2 i 4).

  3. Powiedz żonie, aby nie zmieniała / nie dodawała żadnych plików, na których jej zależy

  4. Awaria i usunięcie jednego dysku z macierzy RAID 1 (dysk 4).

  5. Przenieś fizyczne zakresy z macierzy RAID 1 do macierzy RAID 10, pozostawiając dysk 2 pusty.

  6. Zabij aktywną macierz RAID 1, dodaj teraz pusty dysk (dysk 2) do macierzy RAID 10 i poczekaj na zakończenie ponownej synchronizacji.

  7. Dodaj pierwszy dysk usunięty z RAID 1 (dysk 4) do macierzy RAID 10.

  8. Daj żonie naprzód.

W kroku 7 myślę, że dysk 1, 2, OR 4 może zawieść (podczas resynchronizacji dysku 4) bez zabijania tablicy. Jeśli dysk 3 ulegnie awarii, dane w tablicy są wznoszone.

użytkownik75601
źródło
+1, szczególnie dla kroku 3;)
-1, instrukcja niejasna, nie mam żony, stracę swoje dane
ZAB
1

Przeniosłem teraz mój raid1 na raid10 i chociaż ta strona pomogła mi, ale w powyższych odpowiedziach brakuje kilku rzeczy. Szczególnie moim celem było dotrzymywanie 4 godzin porodowych.

konfiguracja była:

  • 2 dyski raid1 każdego typu msdos i md0 z partycją ext4 i mbr z msdos
  • 2 świeże nowe dyski stają się nowymi podstawowymi (wszystkie tego samego rozmiaru)
  • w wyniku raidu na 4 dyski md127 ext4, ale ze względu na rozmiar musiałem przełączyć się z mbr na gpt
  • jest to mój dysk domowy, więc konfiguracja bootmanagera nie jest wymagana ani zamierzona
  • używając mojego codziennego ubuntu (więc: nie używając zewnętrznego dysku ratunkowego)
  • using gparted, dd i mdadm

jak ktoś wcześniej powiedział: krok zerowy powinien stanowić kopię zapasową, a proces może zawsze pójść źle, powodując ekstremalną utratę danych

  1. UTWORZYĆ KOPIĘ ZAPASOWĄ

  2. konfiguracja nowego nalotu

    1. stwórz nowy nalot

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (odkryłem, że układ jest ważny .. 2. i 4. wydają się być duplikatami w domyślnym nalocie „near”)

    2. ustaw partycję raidu, korzystałem z gparted, konfigurując gpt na md127, a następnie dodając nową partycję (ext4) wielkości starej lub większej
  3. migrować

    1. teraz otrzymuję dane ... najpierw próbowałem użyć rsync, który działał, ale nie udało mi się zachować porodu ... użyj dd, aby sklonować stary raid na nowy

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      CZEKAJ NA TO
      możesz sprawdzić wysyłając USR1 do tego procesu

      kill -s USR1 <pid>
      
    2. napraw raid
      gparted to świetne narzędzie: każesz sprawdzić i naprawić partycję i zmienić rozmiar do pełnego rozmiaru tego dysku za pomocą kilku kliknięć myszką;)

    3. ustaw nowy identyfikator UUID na tej partycji i zaktualizuj go za pomocą fstab (zmień identyfikator UUID)

    4. przechowuj swój nalot w konf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      i usuń stary

      vim /etc/mdadm/mdadm.conf 
      
    5. uruchom ponownie, jeśli nie używasz rescusystemu
  4. niszczenie starego

    1. oblać pierwszego i dodać do nowego nalotu

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      następnie zrób gpt na tym urządzeniu i ustaw nową pustą partycję

      mdadm /dev/md127 --add /dev/sdc1
      

      CZEKAJ NA TO
      możesz sprawdzić

      cat /proc/mdstat
      
    2. zatrzymaj drugi

      mdadm --stop /dev/md0 
      

      następnie zrób gpt na tym ostatnim urządzeniu i ponownie ustaw nową pustą partycję

      mdadm /dev/md127 --add /dev/sdd1
      

      CZEKAJ NA TO ponownie

Summer-Sky
źródło
0

Zrobiłem to z LVM. Początkowa konfiguracja: - sda2, sdb2 - i utworzono raid1 md1 na górze. sda1 i sdb1 zostały użyte do drugiego raid1 dla partycji / boot. - md1 był pv w przestrzeni grup woluminów, z niektórymi lvm na nim.

Dodałem dyski sdc i sdd i utworzyłem tam partycje jak na sda / sdb.

Więc:

  1. utworzył md10 jako:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 missing / dev / sdd2

  2. rozszerz vg na to:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. przeniesiono woluminy z md1 na md10:

    pvmove -v / dev / md1 / dev / md10

(poczekaj na zakończenie) 4. zmniejsz grupę woluminów:

vgreduce space /dev/md1
pvremove /dev/md1
  1. zatrzymaj tablicę md1:

    mdadm -S / dev / md1

  2. dodaj dyski ze starego md1 do md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. zaktualizuj konfigurację w /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(i usuń tam stary md1)

Wszystko odbywa się w systemie na żywo, z aktywnymi woluminami używanymi dla KVM;)

niezdefiniować
źródło