
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:Jessie⟶Strecken⟶Buster)
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 habensudo
aktiviert ist, können Sie beispielsweise auch Folgendes tun sudo -i
: sieheman sudo
fü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 gdisk
stattdessen:
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 ext4lazyinit
bei 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, root
da 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 ext4
Dateisystem mit dem „besser zu vermeidenden Befehl“ erstellt haben, beachten Sie, dass ext4lazyinit
das Initialisieren aller Inodes eine beträchtliche Zeit in Anspruch nimmt. Sie können es beobachten, bis es abgeschlossen ist, z. B. mit iotop
oder 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-raid
das Dateisystem zusammen mit der raid
Flagge 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 md
Dateisystem hat:
blkid /dev/md0
Kopieren Sie die UUID in die Zwischenablage.
Jetzt müssen wir bearbeiten fstab
, mit Ihrem bevorzugten Texteditor, ich habe verwendetnano
, obwohlsudoedit
kö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, defaults
einen 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 md
noch 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/md127
oder ä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.