Zum Inhalt springen

Skript/Linux/RAID

Aus Foxwiki

Skript/Linux/RAID

Inhalt

  1. Linux/RAID
  2. Linux/RAID/Vorbereitung
  3. Linux/RAID/Anlegen
  4. Linux/RAID/Wartung
  5. Linux/RAID/Fehlerbehebung
  6. Linux/RAID/Aufgaben

Linux-RAID

Linux/RAID - Datenträger zu logischen Laufwerken zusammenschließen

Beschreibung

Zusammenwirken der Festplatten wird softwareseitig organisiert

Die meisten modernen Betriebssysteme sind dazu in der Lage

  • FreeBSD, OpenBSD, Apple macOS, HP HP-UX, IBM AIX, Linux, Microsoft Windows ab Windows oder SUN Solaris

Die einzelnen Festplatten sind in diesem Fall entweder über einfache Festplattencontroller am Computer angeschlossen oder es werden externe Storage-Geräte wie Disk-Arrays von Unternehmen wie EMC, Promise, AXUS, Proware oder Hitachi Data Systems (HDS) an den Computer angeschlossen

Die Festplatten werden zunächst ohne RAID-Controller als sogenannte JBODs ("just a bunch of disks") in das System integriert, dann wird per Software-RAID (z. B. unter Linux mit dem Programm mdadm) die RAID-Funktionalität realisiert

  • Eine besondere Variante des Software RAID sind Dateisysteme mit einer integrierten RAID-Funktionalität
  • Ein Beispiel dafür ist das von Sun Microsystems entwickelte RAID-Z.[6]
Vorteile

Der Vorteil von Software-RAID ist, dass kein spezieller RAID-Controller benötigt wird

  • Die Steuerung wird von der RAID-Software erledigt, diese ist entweder schon Teil des Betriebssystems oder wird nachträglich installiert
  • Dieser Vorteil kommt besonders bei der Disaster Recovery zum Tragen, wenn der RAID-Controller defekt und nicht mehr verfügbar ist
  • Praktisch alle derzeit verfügbaren Software-RAID-Systeme benutzen die Festplatten so, dass diese auch ohne die spezifische Software ausgelesen werden können
Nachteile

Bei einem Software-RAID werden bei Festplattenzugriffen neben dem Hauptprozessor des Computers auch die System-Busse wie PCI stärker belastet als bei einem Hardware-RAID

  • Bei leistungsschwachen CPUs und Bus-Systemen verringert dies deutlich die Systemleistung
  • Bei leistungsstarken, wenig ausgelasteten Systemen ist dies belanglos
  • Storage-Server sind in der Praxis oft nicht voll ausgelastet; auf solchen Systemen können Software-RAID-Implementierungen unter Umständen sogar schneller sein als Hardware-RAIDs
  • Ein weiterer Nachteil ist, dass bei vielen Software-RAID kein Cache genutzt werden kann, dessen Inhalt auch nach einem Stromausfall erhalten bleibt, wie es bei Hardware-RAID-Controllern mit einer Battery Backup Unit der Fall ist
    • Dieses Problem lässt sich mit einer unterbrechungsfreien Stromversorgung für den gesamten PC vermeiden
    • Um die Gefahr von Datenverlusten und Fehlern in der Datenintegrität bei einem Stromausfall oder Systemabsturz zu minimieren, sollten außerdem die (Schreib-)Caches der Festplatten deaktiviert werden.[7]
  • Da die Platten eines Software-RAIDs prinzipiell auch einzeln angesprochen werden können, besteht bei gespiegelten Festplatten die Gefahr, dass Änderungen nur noch an einer Platte durchgeführt werden – wenn etwa nach einem Betriebssystem-Update die RAID-Software oder der Treiber für einen RAID-Festplatten-Controller nicht mehr funktionieren, eine der gespiegelten Festplatten aber weiterhin über einen generischen SATA-Treiber angesprochen werden kann
  • Entsprechende Warnhinweise oder Fehlermeldungen während des Bootens sollten deshalb nicht ignoriert werden, nur weil das System trotzdem funktioniert
  • Ausnahmen bilden hier Software-RAID mit Datenintegrität wie z. B. ZFS
  • Unvollständige Speichervorgänge werden zurückgesetzt
  • Fehlerhafte Spiegeldaten werden erkannt und durch korrekte Spiegeldaten ersetzt
  • Es wird wohl beim Lesen eine Fehlermeldung geben, da die fehlerhafte oder alte Spiegelseite nicht mit dem aktuellen Block übereinstimmt


Vorbereitung

Linux/RAID/Vorbereitung - Datenträger vorbereitet

Beschreibung

Die Datenträger müssen für die Verwendung in einem RAID vorbereitet werden

Datenträger prüfen

Zustand der Hardware

Bestehende oder baldigen Defekt ausschließen

Beschriftung

Datenträger eindeutig beschriften
  • Seriennummer
Seriennummer ermitteln
sudo hdparm -i /dev/sda | grep -i serialno

Datenbereinigung

Wenn die vorherige Nutzung der Datenträger unklar ist, Datenträger löschen

Vollständig

Sicher, aber zeitaufwendig

sudo dd if=/dev/zero of=/dev/sda status=progress
1132235649536 bytes (1,1 TB, 1,0 TiB) copied, 29019 s, 39,0 MB/s
Teilweise

Schnell, aber vorherige Nutzung des Datenträgers sollte bekannt sein

sudo dd if=/dev/zero of=/dev/sda bs=1M count=2
 2+0 Datensätze ein
 2+0 Datensätze aus
 2097152 bytes (2,1 MB, 2,0 MiB) copied, 0,0952489 s, 22,0 MB/s


Anlegen

Linux/RAID/Anlegen

Wartung

Linux/RAID/Wartung - Wartung eines Linux Software Raid

Beschreibung

Überwachung

Software-RAID überwachen

System mit mehreren RAID-Verbünden ohne Ausfälle

sudo cat /proc/mdstat
<syntaxhighlight lang="bash" line>
 Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [multipath] [raid0] [raid10]
 md1 : active raid1 sde5[0] sdf5[1]
 195114936 blocks super 1.2 [2/2] [UU]

 md0 : active raid1 sdf1[1] sde1[0]
 242676 blocks super 1.2 [2/2] [UU]

 md2 : active raid6 sdg1[4] sdh1[5] sdi1[6] sdj1[7] sda1[0] sdd1[3] sdb1[1] sdc1[2]
 2930304000 blocks super 1.2 level 6, 512k chunk, algorithm 2 [8/8] [UUUUUUUU]

Das Beispiel zeigt zwei RAID 1 (md0 und md1) mit je zwei Partitionen und ein RAID 6 (md2) mit 8 Partitionen

  • In der jeweils zweiten Zeile wird am Ende in eckigen Klammern der Zustand der einzelnen Partitionen angezeigt, wobei ein U bedeutet, dass das jeweilige Gerät in Ordnung (up) ist
Ausführliche Informationen

Ausführliche Informationen zu einem RAID-Device liefert

sudo mdadm --detail /dev/md0

Hotspare

Hotspare hinzufügen

Ein RAID kann Ersatzplatten vorhalten und diese beim Ausfall einer anderen Datenträger automatisch als Ersatz nutzen

  • Solche Platten werden als Hotspares, oft auch einfach nur Spare, bezeichnet
  • Um eine Platte als Spare zu nutzen, muss diese zunächst entsprechend partitioniert werden

Danach kann diese zum Verbund hinzugefügt werden, hier am Beispiel des eingänglichen beschriebenen RAID 5 und einer neuen Partition /dev/sdi1:

mdadm /dev/md0 --add /dev/sdi1

Falls nun eine Partition ausfallen sollte, startet automatisch ein Rebuild, die Spare-Partition wird dabei aktiviert und als Ersatz für die ausgefallene Partition genutzt

Details

Details ermitteln

Dieses Beispiel zeigt eine ausgefallene Platte in einem RAID 6

sudo cat /proc/mdstat
 Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [multipath] [raid0] [raid10]
 md2 : active raid6 sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdd1[3] sda1[0] sdb1[1] sdc1[2]
 3418688000 blocks super 1.2 level 6, 512k chunk, algorithm 2 [9/8] [UUUUUUUU_]

 unused devices: <none>

In diesem Fall wurde das fehlerhafte Gerät bereits automatisch entfernt

Genauere Details, u. a. den Namen des defekten Geräts kann mit mdadm ermittelt werden

mdadm --detail /dev/md2

Datenträger wechseln

Achtung

Bei einem RAID 0 äußert sich der Ausfall einer Platte im Totalausfall des gesamten RAID- Verbunds Das RAID 0 kann daher nicht mit den folgenden Anweisungen repariert werden, sondern muss neu aufgesetzt werden und die hoffentlich vorhandene Datensicherung eingespielt werden

Ist das defekte Gerät (hier im Beispiel /dev/sdk1) ermittelt, kann der entsprechende Datenträger ausgetauscht werden

Falls der Kernel das Gerät noch nicht aus dem Verbund entfernt hat (d. h. es wird beim Befehl mdadm --detail noch aufgeführt), muss es zunächst aus dem Verbund entfernt werden

sudo mdadm /dev/md2 --remove /dev/sdk1

Nun kann die entsprechende Platte gewechselt werden

  • Ist eine entsprechende Austauschplatte eingebaut, muss diese zunächst partitioniert werden
  • Die neue Partition muss mindestens die gleiche Anzahl an Sektoren aufweisen, wie die bereits genutzten Partitionen
  • Von einer bestehenden Platte erhält man die Sektorenzahl der Partitionen (hier am Beispiel von /dev/sda) mittels:
sudo parted /dev/sda u s print


Ist die neue Platte entsprechend partitioniert, wird die neue Partition zum RAID-Verbund hinzugefügt (hier am Beispielaustausch von /dev/sdk1 in /dev/md2):

sudo mdadm /dev/md2 --add /dev/sdk1

Im Hintergrund beginnt nun ein Rebuild, aus den noch vorhandenen Partitionen, wird also der Inhalt für die neue Partition berechnet und geschrieben

  • Je nach RAID-Level und Größe dauert ein Rebuild mehrere Stunden bis Tage
  • Das System darf währenddessen neu gestartet oder heruntergefahren werden
  • Ein Systemabsturz kann jedoch zu Datenverlust führen.
  • Manchmal lässt sich der Vorgang beschleunigen
Hinweis

Wurden Partitionen einer Platte von verschiedenen RAIDs genutzt, dann kann es vorkommen, dass eine verwendete Datenträger teilweise defekt ist und sich z. B. die Partition von md0 im Status [U_] befindet, während alle anderen im Status [UU] sind

In diesem Fall müssen diese mit dem Befehl

mdadm /dev/mdX --fail /dev/sdXY
  • ...alle einzeln in den Modus [U_] versetzt werden

Controller-Fehler

In Einzelfällen kann es vorkommen, dass aufgrund eines defekten Netzteils (oder Controller) ein RAID nicht mehr funktionsfähig ist

In so einem Fall liegt oft kein Schaden an den Datenträger vor und das Problem kann mit der folgenden Vorgehensweise behoben werden:

RAID stoppen

sudo mdadm --stop /dev/md0

RAID zusammenfügen

RAID manuell zusammenfügen
  • Das RAID muss manuell wieder zusammengefügt werden, dabei ist es wichtig, die letzte funktionierende Konfiguration zu verwenden
  • Bei dem o. g. Beispiel, ein RAID 5 mit 4 Partitionen, bei dem zwei Datenträger wegen Controller-Defekt ausgestiegen sind, müssen die ersten zwei Partitionen verwendet werden, da sie bis zum Ausfall noch zusammen aktiv waren

RAID reaktivieren

Nun reaktiviert man das Array mit

sudo mdadm -A /dev/md2

oder

sudo mdadm --assemble /dev/md2 /dev/sde1 /dev/sdf1 --force

Partitionen aufnehmen

Partitionen in den Verbund aufnehmen

Die weiteren Partitionen können nun mit

  • wieder in den Verbund aufgenommen werden
sudo mdadm --re-add /dev/md0 /dev/sdg1 /dev/sdh1

RAID erweitern

Falls zum Beispiel der Speicherplatz eines RAIDs nicht mehr ausreicht, kann man es durch weitere Datenträger bzw. Partitionen erweitern

  • Dies gilt allerdings nur für ein RAID 1, 5 oder 6.
  • Das RAID darf während des Vorgangs eingebunden sein

Die neue Partition muss zunächst wie oben beschrieben als Hotspare hinzugefügt werden

  • Danach kann das RAID um das neue Laufwerk erweitert werden:
RAID neu aufbauen

Das RAID neu aufbauen, um somit den neuen Speicherplatz nutzen zu können

sudo mdadm --add /dev/md0 /dev/sdd1
sudo mdadm --grow --raid-devices=5 /dev/md0 --backup-file=/tmp/md0.bak

Die Option raid-devices gibt dabei die Anzahl der Geräte an, aus denen das RAID nach der Erweiterung bestehen soll

  • In der mittels backup-file angegebenen Datei werden kritische Bereiche gesichert (typischerweise einige wenige MiB)

Falls das System während der Erweiterung abstürzt, kann die Erweiterung später mittels

sudo mdadm /dev/md0 --continue --backup-file=/tmp/md0.bak

...fortgesetzt werden

Die Sicherungsdatei darf nicht auf dem zu erweiternden RAID liegen!

  • Die Verwendung von backup-file ist zwar nicht zwingend notwendig, wird aber dringend empfohlen
  • Das Dateisystem muss noch erweitert werden, damit der neu entstandene Speicherplatz genutzt werden kann
  • Das Dateisystem sollte dabei, wenn möglich, nicht eingehangen sein
  • Bei ext-Dateisystemen muss außerdem vorher eine Überprüfung durchgeführt werden
Beispiel ext4
sudo umount /dev/md0 # Das Dateisystem aushängen
sudo fsck.ext4 -f /dev/md0 # Die Prüfung erzwingen, selbst wenn vor Kurzem geprüft wurde
sudo resize2fs /dev/md0 # Das Dateisystem auf Maximalgröße erweitern
sudo mount /dev/md0 # Das Dateisystem wieder einhängen

Die mdadm.conf sollte noch auf den aktuellen Stand gebracht werden (evtl. alte Einträge löschen)

  • Der Status lässt sich wieder jederzeit einsehen


Fehlerbehebung

Linux/RAID/Fehlerbehebung

Beschreibung

Datenträgerausfall

Details ermitteln

Ausgefallene Platte in einem RAID 6

 Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [multipath] [raid0] [raid10]
 md2 : active raid6 sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdd1[3] sda1[0] sdb1[1] sdc1[2]
 3418688000 blocks super 1.2 level 6, 512k chunk, algorithm 2 [9/8] [UUUUUUUU_]

 unused devices: <none>

In diesem Fall wurde das fehlerhafte Gerät bereits automatisch entfernt

Genauere Details, u.a. den Namen des defekten Geräts, können mit mdadm ermittelt werden

sudo mdadm --detail /dev/md2

Datenträger wechseln

Achtung

Bei einem RAID 0 äußert sich der Ausfall einer Platte im Totalausfall des gesamten RAID- Verbunds. Das RAID 0 kann daher nicht mit den folgenden Anweisungen repariert werden, sondern muss neu aufgesetzt werden und die hoffentlich vorhandene Datensicherung eingespielt werden

Ist das defekte Gerät (hier im Beispiel /dev/sdk1) ermittelt, kann die entsprechende Datenträger ausgetauscht werden

Falls der Kernel das Gerät noch nicht aus dem Verbund entfernt hat (d.h. es wird beim Befehl mdadm --detail noch aufgeführt), muss es zunächst aus dem Verbund entfernt werden

sudo mdadm /dev/md2 --remove /dev/sdk1

Nun kann die entsprechende Platte gewechselt werden

  • Ist eine entsprechende Austauschplatte eingebaut, muss diese zunächst partitioniert werden
  • Die neue Partition muss mindestens die gleiche Anzahl an Sektoren aufweisen, wie die bereits genutzten Partitionen

Von einer bestehenden Platte erhält man die Sektorenzahl der Partitionen (hier am Beispiel von /dev/sda) mittels

sudo parted /dev/sda u s print

Ist die neue Platte entsprechend partitioniert, wird die neue Partition zum RAID-Verbund hinzugefügt (hier am Beispielaustausch von /dev/sdk1 in /dev/md2)

sudo mdadm /dev/md2 --add /dev/sdk1

Im Hintergrund beginnt nun ein Rebuild, aus den noch vorhandenen Partitionen wird also der Inhalt für die neue Partition berechnet und geschrieben

  • Je nach RAID-Level und Größe dauert ein Rebuild mehrere Stunden bis Tage
  • Das System darf währenddessen neu gestartet oder heruntergefahren werden
  • Ein Systemabsturz kann jedoch zu Datenverlust führen. Manchmal lässt sich der Vorgang beschleunigen
Hinweis

Wurden Partitionen einer Platte von verschiedenen RAIDs genutzt, dann kann es vorkommen, dass eine verwendete Datenträger teilweise defekt ist und sich z. B. die Partition von md0 im Status [U_] befindet, während alle anderen im Status [UU] sind

In diesem Fall müssen diese mit dem Befehl..

sudo mdadm /dev/mdX --fail /dev/sdXY

...alle einzeln in den Modus [U_] versetzt werden

Bootprobleme

GRUB 2: unknown Filesystem

Falls das System nicht bootet, nachdem man es auf ein RAID 1 kopiert, die /etc/fstab angepasst, die grub.cfg und die mdadm.conf korrekt erscheinen sowie das initramfs aktualisiert wurde, kann es helfen, GRUB 2 erneut zu installieren

  • Dabei muss auf die Art der Partitionstabelle geachtet werden
  • Die obige Anleitung nutzt GPT-Partitionstabellen

RAID startet nicht

mdadm: Cannot open /dev/sdXY: Device or resource busy

Falls beim Erstellen eines RAIDs diese Meldung erscheint und mit den Partitionen bereits einmal ein RAID erstellt wurde, muss zunächst der alte Verbund aufgelöst werden

Fehler beim Update des Kernels nach Datenträgertausch

 Grub-Konfigurationsdatei wird generiert  grub-probe: Warnung: Physischer Datenträger ''(null)'' konnte nicht gefunden werden
 Einige Module könnten im Core-Abbild fehlen.
 /usr/sbin/grub-probe: Warnung: Physischer Datenträger ''(null)'' konnte nicht gefunden werden. Einige Module könnten im Core-Abbild fehlen.

Treten nach dem Tausch einer Datenträger diese Fehler auf muss die Device Map von Grub neu geschrieben werden

Dies geschieht mit

grub-mkdevicemap

Geht alles glatt, darf keine Ausgabe erscheinen. Anschließend noch einmal Grub aktualisieren

sudo update-grub

Nun sollte der Fehler behoben sein und die Grubkonfiguration sich ohne Fehler aktualisieren

Probelm RAID 127

mdadm.conf anlegen
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Ermitteln der UUID des Raid Arrays
sudo mdadm --detail /dev/md0
Anpassung der mdadm.conf

Die Option "name" aus der mdadm.conf entfernen

sudo vi /etc/mdadm/mdadm.conf
 ARRAY /dev/md0 UUID=XXXXXXXX:XXXXXXXX:XXXXXXXX:XXXXXXXX
Aktualisierung der initramfs
sudo update-initramfs -u -k all
System neu starten
sudo systemctl reboot

Datenträger-Reihenfolge

RAID kann nicht gestartet werden

Änderung der Datenträger-Reihenfolge

  • Austausch eines Controllers
  • Umstecken der Kabel
  • Anschließen eines USB-Sticks
  • [...]

Auch dann nicht

  • wenn in den Superblöcken der RAID-Laufwerke die richtigen Metadaten (unabhängig von den Buchstabenbezeichnungen) gespeichert sind
Falsche Angaben in der mdadm.conf
  • Dieses Problem lässt sich nur dann beheben, wenn die falschen Angaben in der mdadm.conf korrigiert oder explizit übergangen werden

Damit die Konfiguration beim Booten verfügbar ist, muss schließlich noch die Initrd aktualisiert werden

sudo update-initramfs -u -k all


Aufgaben

Linux/RAID/Aufgaben - Komplexere Szenarien und Methoden, die im normalen Betrieb nicht auftreten, aber nützlich sein können.

Resync/Rebuild beschleunigen

Wie eingangs erläutert ermöglicht ein RAID unterbrechungsfreien Zugriff auf die gespeicherten Daten auch während eines Ausfalls.

  • Daten können also auch während eines Resyncs oder Rebuilds gelesen und geschrieben werden, wenn auch mit verringerter Geschwindigkeit.
  • Lese- und Schreibzugriffe wirken sich umgekehrt wiederum auf die Geschwindigkeit von Resnyc- und Rebuild-Vorgängen aus.

Die Balance zwischen Lese-/Schreib-Performance und Resync-/Rebuild-Geschwindigkeit kann über zwei (virtuelle) Dateien im proc-System gesteuert werden:

Pfad Standardwert (KiB/s) Bedeutung
/proc/sys/dev/RAID/speed_limit_min 1000 Das System wird ggf. Lese- und Schreibzugriffen verlangsamen, falls die Resync-/Rebuild-Geschwindigkeit unter diesen Wert zu fallen droht.
/proc/sys/dev/RAID/speed_limit_max 200000 Das System wird Rebuild und Resync höchstens mit dieser Geschwindigkeit durchführen und eventuellen Überschuss für Lese-/Schreib-Zugriffe frei halten.

Da der Standard-Maximalwert von knapp 200 MiB/s die Leistung normaler Festplatten (mit Ausnahme von SSDs) übersteigt, wird das System effektiv immer versuchen, Resync und Rebuild so schnell wie möglich zu beenden, falls keine Lese- oder Schreibzugriffe stattfinden.

Falls sich Zugriffe nicht vermeiden lassen (zum Beispiel, wenn das root-Dateisystem auf dem RAID liegt) und Rebuild/Resync trotzdem Vorrang haben sollen, kann die Mindestgeschwindigkeit temporär auf einen praktisch nicht erreichbaren Wert angehoben werden:

# su -c "echo 200000 > /proc/sys/dev/RAID/speed_limit_min"

Gerade im Fall des root-Dateisystems kann die damit einhergehende verringerte Lese- und Schreibgeschwindigkeit jedoch zu einem instabilem, effektiv nicht mehr nutzbaren System führen.

  • Änderung an den Standardwerten sind daher mit Vorsicht zu genießen.
  • Bei einem Neustart werden automatisch die Standardwerte wiederhergestellt.

Um den Wert per Hand zurückzusetzen:

# su -c "echo 1000 > /proc/sys/dev/RAID/speed_limit_min"

In Einzelfällen kann das Aushängen des Dateisystems (falls möglich) den Vorgang beschleunigen.

  • Im Regelfall wird dies jedoch keinen Vorteil bringen.

In jedem Fall widerspricht dies natürlich dem Grundgedanken eines RAIDs, die Daten in jedem Fall verfügbar zu halten:

# umount /dev/md0

Generell sollte man von diesen Möglichkeiten keine Wunder erwarten.

  • Resync und Rebuild erfordern im Allgemeinen das komplette Lesen und Neubeschreiben aller beteiligten Laufwerke und können damit maximal so schnell durchgeführt werden, wie es das langsamste, am RAID beteiligte, Laufwerk erlaubt.

Zeiten im Bereich von mehreren Tagen sind bei entsprechender Größe völlig normal.

Wenn man möchte, kann man während der Vorgänge mit watch den Fortschritt kontrollieren:

# watch cat /proc/mdstat

Die Anzeige kann mit Strg + C beendet werden.

Wechsel des Betriebssystems

Für den Fall, dass man das Betriebssystem neu aufsetzen muss oder ein zweites Betriebssystem auf dem Rechner installieren will, kann man das Software-RAID weiter verwenden – sofern das Betriebssystem nicht direkt auf dem Software-RAID angelegt ist.

Dazu muss auf dem neuen System das mdadm

# apt install mdadm

Spätestens bei einem Neustart sollten bestehenden Arrays automatisch erkannt und gestartet werden.

  • Falls dies nicht funktioniert, weil z. B. Arrays mit alten Superblock-Versionen vorhanden sind, kann man dies auch per Hand aktivieren:
Achtung

Auf keinen Fall darf man hier die Optionen "--create" verwenden, da sonst die Lesbarkeit auf den beteiligten Partitionen zerstört wird.

Das RAID nutzbar machen

RAID aus den gefundenen Superblöcken neu assemblieren:

# mdadm --assemble --scan

Hat man mehrere Software-RAIDs und möchte ein bestimmtes RAID zusammenführen, kann man dies durch die Angabe der UUID des entsprechenden RAIDs tun:

# mdadm --assemble --scan --uuid=6c926c35:380d7ab2:3603cf0e:ecfa67b9

Durch die Angabe der einzelnen Partitionen

# mdadm --assemble /dev/md0 /dev/sde1 /dev/sdf1 /dev/sdg1

Soll von dem neuen RAID-Verbund gebootet werden (Root-Dateisystem), dann muss noch der Bootloader installiert und das initramfs aktualisiert werden.

Live System

Um auf einen RAID-Verbund mittels einer Live-CD bzw. eines Live-USB zuzugreifen, muss das Programmpaket mdadm installiert werden.

# apt install --no-install-recommends mdadm 

Die Option --no-install-recommends verhindert dabei die Installation des Mail-Server Postfix.

Anschließend werden mit:

# mdadm --assemble --scan

alle gefundenen RAID-Verbunde aktiviert.

Mit dem Befehl

# cat /proc/mdstat

kann man dann wieder die gefundenen RAID-Verbunde anzeigen.

Nun wird das RAID noch mit

# mkdir /media/RAID
# mount /dev/md0 /media/RAID

in den Verzeichnisbaum integriert.

Jetzt kann man die Daten im Verzeichnis /media/RAID lesen (bei Bedarf auch verändern), sowie auf eine externe Festplatte oder in ein Netzwerkverzeichnis kopieren.

  • Wenn man auf defekte/fehlende Festplatten zugreifen muss, dann schlägt ein --assemble --scan fehl und die Partitionen müssen einzeln assemblieren werden.

Dazu wird z. B. sda1 als Quelle angegeben (bei RAID 0 nicht möglich):

# mdadm --assemble --run /dev/md0 /dev/sda1

Dabei bewirkt das --run, dass der Verbund aktiviert wird.

  • Nach dem Einhängen in den Verzeichnisbaum sollte man auf die Daten zugreifen können.
  • Weitere Möglichkeiten, z. B. bei der Reparatur des RAID, bieten die Root-Directory-, die Chroot- oder die Setup-Methode.

Kombinierte RAIDs

  • Wem die oben genannten Möglichkeiten nicht ausreichen, kann auch nach eigenen Anforderungen verschiedenen RAID-Arten kombinieren.

RAID51

So ist es zum Beispiel möglich, zwei RAID 5 zu spiegeln, also als RAID 1 zu betreiben:=======

  • Aus sde1, sdf1 und sdg1 wird ein RAID 5 erstellt
  • Aus sdh1, sdj1 und sdk1 wird ebenfalls ein RAID 5 erstellt

Aus den beiden RAID 5 wird dann ein RAID 1 erstellt:

# mdadm --create --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sde1 /dev/sdf1 /def/sdg1
# mdadm --create --verbose /dev/md1 --level=5 --RAID-devices=3 /dev/sdh1 /dev/sdj1 /dev/sdk1
# mdadm --create --verbose /dev/md2 --level=1 --RAID-devices=2 /dev/md0 /dev/md1

Ein solcher Verbund würde als RAID 51 bezeichnet werden, also ein RAID 1 über mehrere RAID 5.

  • Im Allgemeinen sind solche exotischen Kombinationen zwar selten sinnvoll (je komplexer, desto fehleranfälliger sind Wartung und Reparatur), aber prinzipiell sind beliebige Kombinationen möglich.

RAID10

Eine sinnvolle Kombination, ein RAID 0 über mehrere RAID 1, also ein RAID 10, wird direkt von mdadm als RAID-Level unterstützt und muss nicht wie hier beschrieben per Hand angelegt werden.

  • Alternativ verwendet man auch gerne mehrere RAIDs in Zusammenarbeit mit LVM, da dieses einen sehr flexiblen Umgang mit RAID-Verbünden ermöglicht.
  • Zudem sind dadurch auch sehr große Dateisysteme mit etlichen Terabytes und sogar Petabytes realisierbar.

RAID auflösen

Um den Verbund eines RAID aufzulösen, d.h. die Ressourcen wieder freizugeben, geht man wie folgt vor:

Stoppen des RAID-Verbundes

# umount /dev/md0
# mdadm --stop /dev/md0

In der /etc/fstab die aufgelösten RAIDs entfernen.

Mit einem Editor in der mdadm.conf die Array-Angaben löschen.

  • Den Superblock der entfernten Partitionen löschen, hier am Beispiel von sde1 und sdf1:
# mdadm --zero-superblock /dev/sde1 /dev/sdf1

Die Partitions-ID wieder auf normale Linux-ID ändern (bei MBR) beziehungsweise das RAID-Flag der Partition ausschalten (bei GPT).

Auf die vorhandenen Daten kann anschließend nicht mehr zugegriffen werden.

Die Partitionen auf den Festplatten sind aber immernoch vorhanden, solange diese nicht überschrieben werden.

Bootloader

Betreibt man einen RAID-Verbund als Systemlaufwerk, ist es praktisch, wenn das System auch noch nach Ausfall einer Festplatte hochfahren kann.

  • Das wird z. B. bei ferngewarteten Rechnern benötigt, auf die man keinen direkten Zugriff hat.
  • Da sich der Bootloader GRUB 2 in der Standardkonfiguration nur auf einem der Laufwerke installiert, muss man etwas nachhelfen.
  • Dazu installiert man den Bootloader auf allen dem RAID-Verbund angehörenden Laufwerken.
MPT

Installation des Bootloaders in alle MBR aller beteiligten Festplatten (grub-install /dev/sdX), wobei die neu eingerichteten Festplatten anzugeben sind.

Am schnellsten geht es mit dem Befehl:

# dpkg-reconfigure grub-pc


  • und der anschließenden Auswahl der gewünschten Festplatten.
  • GPT: Der Bootloader muss in die entsprechenden Boot-Partitionen installiert werden.
  • Z.B. bei einer Installation mit GPT und BIOS bricht die Installation von GRUB 2 sonst ab und weist mit einer Fehlermeldung auf die fehlende Partition hin.
grub-installer: /usr/sbin/grub-setup: warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!
  • Damit die Boot-Partitionen durch die initrd auch einwandfrei gemountet werden, sollte nach Änderung die mdadm.conf und initrd aktualisiert werden.

USB und RAID

  • RAID 0 (stripping) ist denkbar ungeeignet für ein USB-RAID, da bei diesem das Entfernen einer Platte direkt zum Defekt des RAID-Verbunds führt.
  • Mit RAID 5 und 6 kann es kritisch werden, es sollte aber funktionieren, auch wenn davon stark abzuraten ist.
  • RAID 1 (mirror) mit mehreren Partitionen auf verschiedenen USB-Festplatten ist prinzipiell kein Problem, auch wenn davon im Allgemeinen abzuraten ist.
  • Wer trotzdem sicher ist, dass in Spezialfällen ein RAID mit USB-Geräten sinnvoll ist, sollte folgendes beachten:
    • Bei USB-Festplatten muss man unterbinden, dass ein Benutzer versucht, diese einzuhängen, bzw. dass das System dies am Anfang nicht selbst probiert.
    • Da alle am RAID beteiligten Partitionen die gleiche UUID haben sollten, kann man die /etc/fstab auf diese abstellen und um die Parameter nouser und noauto erweitern.

RAID 1 zu RAID 0 konvertieren

Ausgangssituation

  • /dev/md0 ist ein RAID 1 aus /dev/sda1 und /dev/sdb1.

Ziel

  • /dev/md0 soll ein RAID 0 aus beiden Partitionen werden.

Vorgehen

# mdadm --grow /dev/md0 -l 0
mdadm: level of /dev/md0 changed to RAID0
  • /dev/sda1 wurde aus dem RAID 1 entfernt.
  • Den Superblock entfernen.
# mdadm --zero-superblock /dev/sda1
  • RAID 4 ist ein notwendiger Zwischenschritt.
# mdadm --grow /dev/md0 --level=4 --RAID-devices=2 --add /dev/sda1 --backup-file=/root/RAID.bak
mdadm: level of /dev/md0 changed to RAID4
mdadm: added /dev/sda1
mdadm: Need to backup 128K of critical section..
mdadm: /dev/md0: could not set level to RAID0
  • /dev/md0 ist jetzt ein RAID 4 das gesynced wird.
  • Synchronisation abwarten...
  • Dann RAID 4 zu RAID 0 konvertieren.
# mdadm --grow /dev/md0 --level=0 --RAID-devices=2 --backup-file=/root/RAID.bak
  • Wieder das Reshaping abwarten...
watch mdadm -D /dev/md0
  • Fertig ist das RAID 0.

Quellen

  1. https://wiki.ubuntuusers.de/Software-RAID/
  2. https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID
  3. https://en.wikipedia.org/wiki/Logical_block_addressing

Anhang