Der beste Weg, um Linux-Software-RAID 1 auf RAID 10 zu erweitern

22

mdadm scheint es nicht zu unterstützen, ein Array von Level 1 auf Level 10 zu vergrößern.

Ich habe zwei Festplatten in RAID 1. Ich möchte zwei neue Festplatten hinzufügen und das Array in ein RAID 10-Array mit vier Festplatten konvertieren.

Meine aktuelle Strategie:

  1. Mach ein gutes Backup.
  2. Erstellen Sie ein herabgesetztes RAID 10-Array mit 4 Festplatten und zwei fehlenden Festplatten.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove eine Festplatte aus dem RAID 1-Array.
  5. Fügen Sie die verfügbare Festplatte zum RAID 10-Array hinzu und warten Sie, bis die Neusynchronisierung abgeschlossen ist.
  6. Zerstören Sie das RAID 1-Array und fügen Sie die letzte Festplatte zum RAID 10-Array hinzu.

Das Problem ist die fehlende Redundanz in Schritt 5.

Gibt es einen besseren Weg?

Hans Malherbe
quelle
5
Vergessen Sie nicht Schritt 0. Machen Sie eine gute Sicherungskopie von allem.
Anthony Lewis
Ich glaube, deine Schritte sind richtig. Sie verlieren die Redundanz während der Zeit, in der Sie die Daten von einem Satz in einen anderen kopieren.
Kevin Kuphal
Ist es möglich, ein herabgesetztes 4disk RAID10 zu erstellen?
Pause
1
Ja, Sie verwenden einfach "/ dev / hda missing / dev / hdb missing", da Sie sonst ein ganzes Paar verlieren und alles auseinander fällt. Die "akzeptierte Antwort" auf diese Frage ist übrigens völlig falsch und funktioniert nicht.
womble
Ich suche auch nach einer guten Möglichkeit, dies zu tun, und ich denke, dass die in der Frage beschriebene Methode die beste ist, die ich bisher gefunden habe. Die Antwort von Mark Turner hilft nicht weiter, da ein Array mit zwei Geräten erstellt wird, das nicht in vier Geräte umgewandelt werden kann (die anderen beiden Geräte können nur als Ersatzgeräte hinzugefügt werden). Und die Antwort von Suresh Kumar ist dieselbe wie in der Frage beschrieben, außer dass sie nicht genau so funktioniert. Die fehlenden Geräte müssen die 2. und 4. sein, nicht die 3. und 4.. Zu den Schritten in der Frage: Ich denke, Schritt 5 hat vollständige Redundanz und Schritt 6 hat Redundanz für die Hälfte der Daten. Ich sehe tatsächlich die Schritte waren
renumbere

Antworten:

8

Mit Linux Softraid können Sie ein RAID 10-Array mit nur zwei Festplatten erstellen.

Unten verwendete Gerätenamen:

  • md0 ist das alte Array des Typs / Level RAID1.
  • md1 ist das neue Array von Typ / Level RAID10.
  • sda1und sdb2sind neue , leere Partitionen (ohne Daten).
  • sda2und sdc1sind alte Partitionen (mit wichtigen Daten).

Ersetzen Sie die Namen entsprechend Ihrem Anwendungsfall. Verwenden Sie zB lsblk, um Ihr aktuelles Layout anzuzeigen.

0) Backup, Backup, Backup, Backup oh und BACKUP

1) Erstellen Sie das neue Array (4 Geräte: 2 vorhanden, 2 fehlen):

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

Beachten Sie, dass in diesem Beispiel für das Layout sda1ein Gegenstück fehlt und sdb2ein anderes Gegenstück fehlt. Ihre Daten auf md1sind zu diesem Zeitpunkt nicht sicher (effektiv ist es RAID0, bis Sie fehlende Mitglieder hinzufügen).

So zeigen Sie das Layout und andere Details des erstellten Arrays an:

mdadm -D /dev/md1

Hinweis! Sie sollten das Layout des Arrays speichern:

# 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) Formatieren und mounten. Die /dev/md1sollten sofort einsatzbereit sein, müssen aber formatiert und dann gemountet werden.

3) Dateien kopieren. Verwenden Sie z. B. rsync, um Daten vom alten RAID 1 auf das neue RAID 10 zu kopieren. (Dies ist nur ein Beispielbefehl. Lesen Sie die Manpages für rsync.)

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

4) Versagen Sie den ersten Teil des alten RAID1 (md0) und fügen Sie ihn dem neuen RAID10 (md1) hinzu.

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

Hinweis! Dadurch werden die Daten von gelöscht sda2. Das md0sollte aber nur noch verwendbar sein, wenn das andere Raid-Mitglied voll einsatzbereit war.

Beachten Sie auch, dass hierdurch Synchronisierungs- / Wiederherstellungsprozesse gestartet werden md1. Verwenden Sie einen der folgenden Befehle, um den Status zu überprüfen:

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

Warten Sie, bis die Wiederherstellung abgeschlossen ist.

5) Installieren Sie GRUB auf dem neuen Array (vorausgesetzt, Sie booten von dort). Einige Linux-Rettungs- / Boot-CDs funktionieren am besten.

6) Booten Sie auf einem neuen Array. WENN ES RICHTIG ARBEITET, zerstören Sie das alte Array und fügen Sie die verbleibende Festplatte zum neuen Array hinzu.

PUNKT OHNE WIEDERKEHR

Zu diesem Zeitpunkt werden Sie Daten auf dem letzten Mitglied des alten md0-Arrays zerstören. Seien Sie absolut sicher, dass alles funktioniert.

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

Und noch einmal - warten Sie, bis die Wiederherstellung abgeschlossen md1ist.

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

7) Aktualisiere mdadm config

Denken Sie daran /etc/mdadm/mdadm.conf, md0 zu aktualisieren (zu entfernen).

Und speichern Sie die Konfiguration in initramfs (verfügbar nach dem Neustart)

update-initramfs -u
Mark Turner
quelle
1
Wo kommen die vier Scheiben hinein?
womble
Wie? Ich gebe eindeutig an, das Array mit 2 Datenträgern zu erstellen, die Daten zu kopieren, RAID 1 durch Entfernen eines Datenträgers fehlzuschlagen, den Datenträger dem RAID 10 hinzuzufügen und dann RAID 10 zu starten, falls dies funktioniert hat, RAID 1 zu zerstören und den letzten Datenträger zu verschieben das neue RAID ....
Mark Turner
4
Sie haben Ihre Antwort nach meinem Kommentar bearbeitet. Außerdem erhalten Sie mit Ihrem Verfahren ein RAID-10 mit zwei Festplatten und zwei Ersatzlaufwerken - kaum ein RAID-10 mit vier Festplatten. RAID-10-Volumes können ebenfalls nicht umgestaltet werden.
womble
2
Ich habe die Befehle so ausgeführt, wie Sie sie angegeben haben, und am Ende habe ich ein RAID-10 mit zwei Festplatten und zwei Ersatzlaufwerken, wie in / proc / mdstat gezeigt. Dies ist auf Kernel 2.6.30 mit mdadm v2.6.7.2.
womble
3
"mdadm: raid10 array / dev / md1 kann nicht umgeformt werden." Dies wird auch in der Manpage von mdadm erwähnt.
womble
9

Befolgen Sie das gleiche Verfahren wie bei Mark Turner, aber wenn Sie das RAID-Array erstellen, erwähnen Sie 2 fehlende Datenträger

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

Fahren Sie dann mit anderen Schritten fort.

Kurz gesagt, erstellen Sie RAID10 mit insgesamt 4 Festplatten (von denen 2 fehlen), führen Sie eine Resynchronisierung durch, und fügen Sie anschließend zwei weitere Festplatten hinzu.

Sam Whited
quelle
6

Ich bin gerade mit dem Wechsel von LVM auf zwei 2-TB-Festplatten-Madadm-RAID 1 zu LVM auf einem RAID 10 mit vier Festplatten (zwei Original- und zwei neue Festplatten) fertig.

Wie @aditsu feststellte, ist die Laufwerkreihenfolge beim Erstellen des Arrays wichtig.

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

Der obige Code gibt ein verwendbares Array mit zwei fehlenden Datenträgern an (fügen Sie Partitionsnummern hinzu, wenn Sie nicht ganze Datenträger verwenden). Sobald die dritte Festplatte hinzugefügt wird, beginnt sie mit der Synchronisierung. Ich habe die vierte Festplatte hinzugefügt, bevor die dritte die Synchronisierung beendet hat. Es wurde als Ersatz angezeigt, bis die dritte Festplatte fertig war und die Synchronisierung begann.

Schritte für meine Situation:

  1. Mach ein gutes Backup.

  2. Erstellen Sie ein herabgesetztes RAID-10-Array mit 4 Festplatten mit zwei fehlenden Festplatten (die fehlenden Festplatten werden als Nr. 2 und 4 bezeichnet).

  3. Sagen Sie Ihrer Frau, sie soll keine Dateien ändern / hinzufügen, die ihr wichtig sind

  4. Fehler und entfernen Sie eine Festplatte aus dem RAID 1-Array (Festplatte 4).

  5. Verschieben Sie physische Extents vom RAID 1-Array in das RAID 10-Array, und lassen Sie die Festplatte 2 leer.

  6. Schalten Sie das aktive RAID 1-Array aus, fügen Sie die jetzt leere Festplatte (Festplatte 2) zum RAID 10-Array hinzu und warten Sie, bis die erneute Synchronisierung abgeschlossen ist.

  7. Fügen Sie dem RAID 10-Array die erste Festplatte hinzu, die aus RAID 1 (Festplatte 4) entfernt wurde.

  8. Gib Frau, mach weiter.

Bei Schritt 7 glaube ich Antrieb 1, 2, OR 4 ausfallen kann (während der Resynchronisierung der Scheibe 4) , ohne die Anordnung zu töten. Wenn Laufwerk 3 ausfällt, sind die Daten auf dem Array Toast.

user75601
quelle
+1, vor allem für Schritt 3;)
-1, Anweisung unklar, keine Frau, meine Daten verlieren
ZAB
1

Ich habe mein raid1 jetzt auf raid10 verschoben und diese Seite hat mir zwar geholfen, aber in den obigen Antworten fehlen einige Dinge. Besonders mein Ziel war es, ext4-Geburtszeiten einzuhalten.

Das Setup war:

  • 2 RAID1-Festplatten jedes Typs MSDOS und MD0 mit EXT4-Partition und MBR mit MSDOS
  • 2 frische neue Festplatten werden die neuen Vorwahlen (alle gleich groß)
  • was zu einem 4-Disk-Raid md127 ext4 führte, aber aufgrund der Größe musste ich von mbr auf gpt wechseln
  • Es ist meine Heim-Festplatte, daher ist kein Bootmanager-Setup erforderlich oder vorgesehen
  • mit meinem alltäglichen Ubuntu (also: nicht mit der externen Rettungsdiskette)
  • mit gparted, dd und mdadm

Wie schon gesagt: Der Null-Schritt sollte ein Backup sein und es kann immer etwas schief gehen, was zu extremem Datenverlust führt

  1. BACKUP

  2. Aufbau der neuen Razzia

    1. erstelle einen neuen Überfall

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

      (Ich fand, dass das Layout wichtig ist. Die 2. und 4. scheinen die Duplikate in einem standardmäßigen 'Near'-Raid zu sein.)

    2. Stellen Sie die Partition des Raids ein, den ich mit gparted erstellt habe, indem Sie gpt auf dem md127 einrichten und dann eine neue Partition (ext4) mit der Größe der alten oder einer höheren Partition hinzufügen
  3. Wandern

    1. nun die Daten immer über ... ich zum ersten Mal zu verwenden rsync versuche Weichen gearbeitet , aber es versäumen , die Geburtszeit ... Verwendung dd zu halten Klon von der alten Razzia auf den neuen

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

      WAIT FOR IT können
      Sie überprüfen, indem Sie USR1 an diesen Prozess senden

      kill -s USR1 <pid>
      
    2. Das Raid zu
      reparieren gparted ist ein großartiges Tool: Sie fordern es auf, die Partition zu überprüfen und zu reparieren und sie mit nur wenigen Mausklicks auf die volle Größe dieser Festplatte zu verkleinern;)

    3. Setze eine neue UUID auf diese Partition und aktualisiere deine FSTAB damit (ändere die UUID)

    4. Speichern Sie Ihre Razzia in conf

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

      und entfernen Sie die alte

      vim /etc/mdadm/mdadm.conf 
      
    5. Starten Sie neu, wenn Sie nicht auf einem Rescusystem sind
  4. zerstöre den alten

    1. Schlage den ersten fehl und füge ihn dem neuen Schlachtzug hinzu

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

      Machen Sie dann gpt auf diesem Gerät und legen Sie eine neue leere Partition fest

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

      WAIT FOR IT können
      Sie mit überprüfen

      cat /proc/mdstat
      
    2. Halt den zweiten an

      mdadm --stop /dev/md0 
      

      Machen Sie dann gpt auf diesem letzten Gerät und setzen Sie eine neue leere Partition erneut

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

      WARTEN SIE WIEDER AUF ES

Sommerhimmel
quelle
0

Ich habe es mit LVM gemacht. Erstkonfiguration: - sda2, sdb2 - und erstellt raid1 md1 an der Spitze. sda1 und sdb1 wurden für die zweite raid1 for / boot-Partition verwendet. - md1 war pv im Volumengruppenraum, mit einigen lvms darauf.

Ich habe Festplatten sdc und sdd hinzugefügt und dort Partitionen wie auf sda / sdb angelegt.

So:

  1. md10 erstellt als:

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

  2. erweitere vg drauf:

    pvcreate / dev / md10 erweitern space / dev / md10

  3. Verschobene Volumes von MD1 nach MD10:

    pvmove -v / dev / md1 / dev / md10

(Warten auf erledigt) 4. Volumengruppe reduzieren:

vgreduce space /dev/md1
pvremove /dev/md1
  1. Stoppen Sie Array md1:

    mdadm -S / dev / md1

  2. Fügen Sie Datenträger von altem MD1 zu MD10 hinzu:

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

  3. Aktualisieren Sie die Konfiguration in /etc/mdadm/mdadm.conf:

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

(und dort altes md1 entfernen)

Alles auf Live-System gemacht, mit aktiven Volumes für KVMs verwendet;)

undefinieren
quelle