mdadm RAID-Implementierung mit GPT-Partitionierung

mdadm RAID-Implementierung mit GPT-Partitionierung

Meine derzeitige Idee besteht darin, ein Software-Array der Klasse RAID-6 mit 4 Mitgliedslaufwerken zu erstellen, indem ich verwende mdadm.

Konkret handelt es sich bei den Laufwerken um 1 TB HDDs auf SATA in einem kleinen Server Dell T20.

Betriebssystem istGNU/Linux Debian8.6 (später aktualisiert:JessieStreckenBuster)

Das wären in meinem Fall 2 TB Speicherplatz mit 2 TB Parität.


Ich hätte es auch gerne mit einer GPT-Partitionstabelle, damit das funktioniert, bin ich mir jedoch nicht sicher, wie ich vorgehen soll, insbesondere wenn ich dies lieber rein über das Terminal machen möchte.

Da ich noch nie ein RAID-Array erstellt habe, könnten Sie mir erklären, wie ich vorgehen soll?


Anmerkungen:

  • Dieses Array dient ausschließlich zur Datenspeicherung. Kein Boot- oder Betriebssystem darauf.

  • Ich habe mich aufgrund des Zwecks dieses Arrays für RAID-6 entschieden. Das Array muss zwei Laufwerksausfälle überstehen können. Da ich hardwareseitig auf 4 Laufwerke beschränkt bin, kenne ich keine Alternative zu RAID-6. (So schlimm die Verlangsamung durch RAID-6 auch erscheinen mag, in diesem Array spielt sie keine Rolle.)

Antwort1

Bitte beachten Sie, dass in dieser Antwort klargestellt wird, dass sämtliche Daten auf allen Array-Mitgliedern (Laufwerken) vernichtet werden. Sichern Sie diese also vorher!


Öffnen Sie das Terminal und werden Sieroot(su); Wenn Sie habensudoaktiviert ist, können Sie beispielsweise auch Folgendes tun sudo -i: sieheman sudofür alle Optionen):

sudo -i

Zuerst sollten wir die Laufwerke löschen, sofern sich vorher Daten und Dateisysteme darauf befanden. Angenommen, wir haben 4 Mitglieder: sdi, sdj, sdk, sdl. Um eine visuelle Rückmeldung über diesen Vorgang zu erhalten,pv(Rohrbetrachter)wurde hier verwendet:

pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl

Alternativ können Sie, um einfach zu prüfen, ob nichts zurückgeblieben ist, mit GParted einen Blick auf alle Laufwerke werfen. Wenn eine Partition mit oder ohne Dateisystem vorhanden ist, kann es ausreichen, sie zu löschen. Ich persönlich bevorzuge jedoch das oben beschriebene Nullsetzen aller betroffenen Laufwerke. Denken Sie daran, vorher alle Partitionen auszuhängen. Dies könnte ähnlich wie mit diesen Einzeilern erfolgen:

umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl

Anschließend initialisieren wir alle Laufwerke mit der GUID-Partitionstabelle (GPT) und müssen alle Laufwerke partitionieren. Tun Sie dies jedoch nicht mit GParted, da dabei ein Dateisystem erstellt würde, das wir nicht möchten. Verwenden Sie gdiskstattdessen:

gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl

Verwenden Sie in allen Fällen Folgendes:

o Enterfür neue leere GUID-Partitionstabelle (GPT)
y Enterzur Bestätigung Ihrer Entscheidung
n Enterfür neue Partition
Enterfür Standard der ersten Partition
Enterfür Standard des ersten Sektors
Enterfür Standard des letzten Sektors
fd00 Enterfür Linux RAID-Typ
w Enterzum Schreiben von Änderungen
y Enterzur Bestätigung Ihrer Entscheidung


Sie können die Laufwerke jetzt untersuchen:

mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl

Es sollte heißen:

(type ee)

Wenn ja, untersuchen wir jetzt die Partitionen:

mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1

Es sollte heißen:

No md superblock detected

Wenn dies der Fall ist, können wir das RAID6-Array erstellen:

mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1

Wir sollten warten, bis das Array vollständig erstellt ist. Diesen Vorgang können wir problemlos durchführen watch:

watch cat /proc/mdstat

Nach der Erstellung des Arrays sollten wir uns seine Details ansehen:

mdadm --detail /dev/md0

Es sollte heißen:

          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

Jetzt erstellen wir ein Dateisystem auf dem Array. Wenn Sie verwenden ext4, das FolgendeverstecktBefehl sollte besser vermieden werden, da er ext4lazyinitbei großen Arrays eine beträchtliche Zeit in Anspruch nehmen würde, daher der Name "faulinit", daher empfehle ich Ihnen, dieses zu vermeiden:

mkfs.ext4 /dev/md0

Stattdessen sollten Sie eine vollständige sofortige Initialisierung erzwingen (wobei 0 % reserviert sind, rootda es sich um ein Datenarray handelt):

mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0

Durch Angabe dieser Optionen werden die Inodes und das Journal sofort während der Erstellung initialisiert, was bei größeren Arrays nützlich ist.

Wenn Sie eine Abkürzung gewählt und das ext4Dateisystem mit dem „besser zu vermeidenden Befehl“ erstellt haben, beachten Sie, dass ext4lazyinitdas Initialisieren aller Inodes eine beträchtliche Zeit in Anspruch nimmt. Sie können es beobachten, bis es abgeschlossen ist, z. B. mit iotopoder nmon.

Unabhängig davon, welche Methode Sie zur Initialisierung des Dateisystems wählen, sollten Sie es nach Abschluss der Initialisierung mounten.


Wir erstellen jetzt ein Verzeichnis für dieses RAID6-Array:

mkdir -p /mnt/raid6

Und einfach montieren:

mount /dev/md0 /mnt/raid6

Da wir im Wesentlichen fertig sind, können wir GParted erneut verwenden, um schnell zu überprüfen, ob linux-raiddas Dateisystem zusammen mit der raidFlagge auf allen Laufwerken angezeigt wird.

Wenn dies der Fall ist, haben wir das RAID6-Array mit GPT-Partitionen ordnungsgemäß erstellt und können jetzt Dateien darauf kopieren.

Sehen Sie, welche UUID das mdDateisystem hat:

blkid /dev/md0

Kopieren Sie die UUID in die Zwischenablage.

Jetzt müssen wir bearbeiten fstab, mit Ihrem bevorzugten Texteditor, ich habe verwendetnano, obwohlsudoeditkönnte besser verwendet werden:

nano /etc/fstab

Und fügen Sie einen Eintrag hinzu:

UUID=<the UUID you have in the clipboard>    /mnt/raid6    ext4    defaults    0 0

Ich selbst empfehle nicht, defaultseinen Satz von Flags zu verwenden, ich wollte lediglich, dass die Zeile nicht zu komplex wird.

Hier sind die Mount-Flags, die ich auf einem RAID mit UPS-Backup-Daten verwende (anstelle von defaults): nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro


Sie können die Richtigkeit überprüfen, nachdem Sie die Änderungen gespeichert haben:

mount -av | grep raid6

Es sollte heißen:

already mounted

Wenn dies der Fall ist, speichern wir die Array-Konfiguration. Falls Sie mdnoch kein Gerät erstellt haben, können Sie einfach Folgendes tun:

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

Falls bereits Arrays vorhanden sind, führen Sie einfach den vorherigen Befehl ohne Weiterleitung zur Konfigurationsdatei aus:

mdadm --detail --scan

und fügen Sie das neue Array manuell zur Konfigurationsdatei hinzu.

Vergessen Sie zum Schluss nicht, Ihr zu aktualisieren initramfs, da Ihr neues Array sonst automatisch nur schreibgeschützt zusammengestellt wird, wahrscheinlich wie folgt /dev/md127oder ähnlich:

update-initramfs -u -k all

Überprüfen Sie, ob Sie alles nach Plan gemacht haben und wenn ja, können Sie neu starten:

reboot

Antwort2

Wenn Sie die RAID-Arrays über 4 Raw-Blockgeräte statt über 2 x 4 Partitionen erstellen, bedeutet dies, dass alle RAID-Wiederherstellungsvorgänge notwendigerweise auf den gesamten Geräten ausgeführt werden und umgekehrt.

Wenn Sie also beispielsweise erwarten, dass die Festplatten irgendwann in der zweiten Hälfte E/A-Fehler entwickeln, würde dies bei Arrays über Partitionen bedeuten, dass nur eines der Arrays davon Kenntnis erhält, während das andere unberührt weiterläuft, zumindest bis der Schaden sich auf seine Hälfte ausbreitet. Dies könnte Ihnen vorübergehend etwas Flexibilität verschaffen oder eine Vermeidung von E/A-Verlangsamungen.

Andererseits müssen Sie, sobald Sie eingreifen, die gesamte physische Festplatte ausbauen und ersetzen, sodass Sie zwangsläufig irgendwann beide Arrays herabstufen müssen. Außerdem kommt es bei SSDs anscheinend häufiger vor, dass die gesamte Festplatte ausfällt, sodass beide Arrays ohnehin von solchen Ereignissen betroffen sein könnten.

Zu den Einzelheiten des Vorgangs gibt es nichts zu sagen, was nicht auch in der typischen Partitionierungs- und Mdadm-Dokumentation zu finden ist.

verwandte Informationen