ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Software-RAID

Artikel wird überarbeitet

Dieser Artikel wird momentan überarbeitet.

Solltest du dir nicht sicher sein, ob an dieser Anleitung noch gearbeitet wird, kontrolliere das Datum der letzten Änderung und entscheide, wie du weiter vorgehst.


Achtung: Insbesondere heißt das, dass dieser Artikel noch nicht fertig ist und dass wichtige Teile fehlen oder sogar falsch sein können. Bitte diesen Artikel nicht als Anleitung für Problemlösungen benutzen!

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Ein RAID (Redundant Array of Independent Disks) dient dazu, ein logisches Laufwerk redundant auf mehrere physikalische Festplatten zu verteilen und dadurch einen schnelleren Datenzugriff und/oder eine erhöhte Verfügbarkeit des Systems im Falle eines Festplattendefektes zu erreichen. Native Hardware-RAID-Controller, die unter Linux unterstützt werden (z.B. 3Ware, Adaptec, etc.), sind aber für den Heimgebrauch oft zu teuer. Diese braucht man aber nicht zwingend, wenn man unter Linux ein Software-RAID verwendet. Als weitere Alternative könne die Festplatten können auch an sog. FakeRAID-Controllern verwendet werden, z.B. Onboard-RAID-Controllern.

Achtung!

Ein Raid ist kein Backup! Es stellt nur sicher, dass man trotz defekter Festplatte an einem System weiter arbeiten kann. Auch beim Betrieb eines RAIDs sollte man von daher regelmäßige Backups seiner Daten anlegen.

Grundsätzliche Informationen

  • Im Allgemeinen macht es nur Sinn, Partitionen gleicher Größe zu verwenden, die auf unterschiedlichen Festplatten angelegt sind.

  • Um das komplette System auf einem RAID-Verbund zu installieren bietet es sich an, das System über die Alternate-CD aufzusetzen. Die Alternate-CD unterstützt bereits bei der Installation das Erstellen üblicher RAID-Varianten. Dies findet man unter dem Punkt: "Partitionieren". Ab Ubuntu 12.10 ist die Alternate-CD nur noch bei Lubuntu verfügbar.

  • Ubuntu unterstützt von Haus aus die RAID-Varianten 0,1,5,6,10 und JBOD. Details zu den einzelnen Typen finden sich im Abschnitt RAID-Level.

  • Soll von einem neuen RAID-Verbund gebootet werden (Root-Dateisystem), muss der Bootloader installiert und die mdadm.conf mit ins initramfs übernommen werden. GRUB 2 erlaubt im Gegensatz zum Vorgänger GRUB auch das direkte Booten ohne eigene Root-Partition.

IDE/SATA

Bei IDE-ATA-Festplatten[4] gilt: die verwendeten Festplatten sollten nicht am selben IDE-Kanal hängen, da im Fehlerfall einer Festplatte unter Umständen der komplette IDE-Kanal gestört wird und dadurch u.U. das RAID nicht mehr nutzbar ist. Bei einem RAID 0 erhöht sich die Gesamtleistung, da paralleles Lesen/Schreiben auf verschiedenen IDE-Kanälen schneller geht als auf nur einem.

Generell sollte man bei RAIDs moderne SATA-Festplatten[4] verwenden, da der Datendurchsatz bei diesen zum Teil erheblich höher ist als bei älteren IDE-Platten. Zudem sind SATA-Platten "hotplugable"; das heißt, sie sind im laufenden Betrieb eines RAIDs an- und abschaltbar und damit auch austauschbar. Allerdings sollte man genau wissen, was man tut, bevor man sich an solcherlei Aktionen heranwagt.

Achtung!

Nicht jeder SATA-Controller ist in der Lage, mit "Hotplug" auch richtig umzugehen. Man sollte auch darauf achten, dass man die richtige Festplatte[4] angibt, um Datenverlust zu vermeiden.

Installation

Folgende Pakete muss installiert[3] werden, um ein Software-RAID erstellen zu können:

  • mdadm

  • parted

Befehl zum Installieren der Pakete:

sudo apt-get install mdadm parted 

Oder mit apturl installieren, Link: apt://mdadm,parted

Anlegen eines RAID

Partitionierung

Achtung!

Alle Veränderungen an den Festplatten löschen die vorherigen Inhalte. Es ist daher dringend angeraten eine Datensicherung durchzuführen.

Zunächst müssen die Bezeichnungen der zu verwenden Festplatten bekannt sein[5]. Auf jeder Festplatte wird eine Partition erstellt, die (fast) den gesamten Platz der Platte einnimmt. Im Beispiel wird das Laufwerk sde vorbereitet. Die Schritte müssen für jedes Laufwerk, das am RAID teilnehmen soll, mit den entsprechenden Bezeichnungen vom eigenen System wiederholt werden:

Eine neue, leere Partitionstabelle auf dem Laufwerk erstellen:

sudo parted /dev/sde mklabel gpt 

Eine einzelne Partition erstellen:

sudo parted -a optimal -- /dev/sde mkpart 2048s -8192s  

Die neue Partition als RAID-Partition markieren:

sudo parted /dev/sde set 1 raid on 

Hinweis:

  • Es werden bewusst 8192 Sektoren am Ende der Festplatte ungenutzt gelassen, um für Ausfälle gewappnet zu sein. Falls nach Jahren keine baugleiche Festplatte mehr beschafft werden kann, ermöglicht es der gelassene Puffer auch Laufwerke als Ersatz zu nehmen, die etwas weniger Sektoren haben.

  • Am Anfang des Laufwerks werden 2048 Sektoren ungenutzt gelassen um ein optimales #Alignment zu ermöglichen. Über den Parameter -a optimal kümmert sich parted um weitere Anpassungen, falls nötig.

  • Es ist auch möglich, die Laufwerke unpartitioniert zusammenzufassen. Dies birgt jedoch einige Nachteile. Zunächst verkompliziert es das Alignment und kann damit zu Geschwindigkeitseinbußen führen. Außerdem kann im Falle eines Defekts nur ein Laufwerk mit genau gleicher oder höherer Sektoranzahl als Ersatz benutzt werden.

RAID anlegen

Das Hauptwerkzeug für alle Arbeiten an Software-RAIDs unter Linux ist mdadm. Es bildet die Schnittstelle zu den RAID-Funktionen des Kernels. Mehr Informationen finden sich im Abschnitt MDADM. Hiermit werden auch RAID-Verbunde erstellt:

Beispiel 1: RAID 1 über zwei Partitionen, sde1 und sdf1:

sudo mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/sde1 /dev/sdf1 

Beispiel 2: Software-RAID 5 mit 4 Partitionen:

sudo mdadm --create /dev/md0 --auto md --level=5 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 

Die Parameter im Einzelnen:

  • --create /dev/md0 - Erzeuge ein neues Verbundgerät unter der Bezeichnung md0. Falls bereits Verbundgeräte vorhanden sind muss ein anderer, freier Bezeichner gewählt werden (md1,md2, etc.).

  • --auto md - Erzeuge ein "klassisches" Verbundgerät ohne Vor-Partitionierung (diese können bei Bedarf ab Kernelversion 2.6.28 trotzdem partitioniert werden).

  • --level= - Die Art RAID-Verbundes. RAID 1 im ersten Beispiel, im zweiten RAID 5. Eine Übersicht über die möglichen RAID-Level gibt Tabelle RAID-Level

  • --raid-devices - Die Anzahl der Einzelgeräte, aus denen das RAID bestehen soll.

  • /dev/sde1 /dev/sde2 ... - Die einzelnen Geräte, die zusammengefasst werden sollen. Die Reihenfolge der Bezeichner, bzw. idealerweise die der entsprechenden physischen Geräte sollte man sich aufschreiben, falls im Notfall das RAID von Hand neu zusammengesetzt werden muss.

Die nötigen Initialisierungsmaßnahmen laufen nun selbstständig im Hintergrund ab. Das neu erstellte Blockgerät md0 kann jedoch sofort benutzt werden und das System darf auch währenddessen normal heruntergefahren oder neu gestartet werden.

Dateisystem

Um den RAID-Verbund als normales Speicherlaufwerk zu nutzen muss noch ein Dateisystem[7] darauf erstellt und dieses ins System eingebunden werden, z.B. ext4. Im Falle eines RAID 1 ist dies recht einfach:

sudo mkfs.ext4 /dev/md0 

Bei komplexeren Verbunden wie RAID 0,5,6 oder 10 sollte das Dateisystem auf das RAID angepasst werden, um optimale Leistung zu ermöglichen. Dafür muss zunächst die sog. "Chunk Size", also die Datenmenge, die in einem einzelnen Schreibvorgang geschrieben wird, bekannt sein. Diese lässt sich wie folgt ermittlen:

sudo mdadm -D /dev/md0 | grep "Chunk Size" 

Bei einem RAID 5 mit Standardeinstellungen liefert dies Beispielsweise:

     Chunk Size : 512K

Es werden also 512 KiB Chunks verwendet. Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden. Am einfachsten geht das mittels des Raid Stride Calculators. Alternativ können die Parameter auch von Hand ermittelt werden:

  • block-size Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fasst ausschließlich 4096 Byte (4 KiB) Blöcke verwendet.

  • stride-size Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich (512 / 4) = 128.

  • stripe-width Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus (stride-size * Anzahl der effektiv nutzbaren Partitionen). Bei einem RAID 5 über 4 Partitionen ergibt sich beispielsweise (128 * 3) = 384. Details zur Anzahl der effektiv nutzbaren Partitionen finden sich im Abschnitt RAID-Level.

Sind die Parameter ermittelt wird das Dateisystem erstellt:

sudo mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0 

RAID mounten

Das RAID muss noch in die Verzeichnisstruktur eingebunden[8] werden. Dies geschieht einfach mittels mount, z.B. am Mountpunkt /media/daten.

mount /dev/md0 /media/daten 

Damit das System beim Start das Dateisystem selber einhängt muss eine entsprechende Zeile in die /etc/fstab eingetragen werden:

/dev/md0     /media/daten      ext4      defaults 0 2

mdadm.conf aktualisieren

Alle Informationen zum RAID werden auf jeder verwendeten Partition in den sog. Superblock geschrieben. Der Kernel sucht beim Starten automatisch nach diesen Superblöcken und startet alle voll funktionsfähigen RAIDs, ohne das eine Konfigurationsdatei nötig ist. Trotzdem kann es sinnvoll sein, eine Konfigurationsdatei zu erstellen, z.B. wenn man über Ausfälle am RAID per E-Mail benachrichtigt werden möchte. Die Konfigurationsdatei kann bequem mit einem Skript von mdadm erstellt werden und enthält dann direkt alle Definitionen aller momentan aktiven RAIDs:

sudo su -c "/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf" 

Um bei Ausfällen per E-Mail benachrichtigt zu werden muss in der Zeile

MAILADDR root 

root durch die gewünschte E-Mail-Adresse ersetzt werden. Dafür muss der E-Mail-Versand durch das System eingerichtet sein, z.B. via [Postfix] als Sattelitensystem.

Über die Konfigurationsdatei können sehr viele Details der RAIDs angepasst werden, näheres liefert die [Manpage] von mdadm.conf. Generell gilt bei neu aufgesetzten RAIDs allerdings: Je weniger, desto besser. In den neueren Superblock-Formaten (neuer als 0.90) werden alle wichtigen Informationen direkt auf den beteiligten Partitionen gespeichert, auch wenn nachträglich Änderungen vorgenommen werden. Andererseits haben die Parameter aus der mdadm.conf Vorrang. So ist es z.B. möglich, alle am RAID beteiligten Partitionen in der Datei anzugeben. Ändert sich jedoch die Reihenfolge der Festplatten (z.B. bei Austausch des Controllers, Umstecken der Kabel, Anschließen einer USB-Festplatte etc.) ließe sich das RAID nicht mehr Starten, obwohl in den Superblöcken die richtigen Positionen der Laufwerk (unabhängig von den Buchstabenbezeichnungen) gespeichert sind, bevor nicht die gegenläufige Angabe in der mdadm.conf geändert oder explizit übergangen wird.

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

sudo update-initramfs -u -k all 

Wartung

RAID überwachen

Eine Kurzzusammenfassung für alle RAIDs erhält man mittels

cat /proc/mdstat 

Eine Beispielausgabe eines Systems mit mehreren RAID-Verbunden ohne Ausfälle:

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 Paritionen angezeigt, wobei ein U bedeutet, dass das jeweilige Gerät in Ordnung ist.

Ausführliche Informationen zu einem RAID-Device liefert:

sudo mdadm --detail /dev/md0 

Festplattenausfall

Details ermitteln

Dieses Beispiel zeigt eine ausgefallene Platte in einem RAID 6. Das fehlerhafte Gerät wird automatisch aus dem RAID entfernt: Muster eines defekten RAID-Arrays:

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>

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

sudo mdadm --detail /dev/md2 

Festplatte 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.

Ist das defekte Gerät (hier im Beispiel /dev/sdk1) ermittelt kann die entsprechende Festplatte ausgetauscht werden. Falls der Kernel das Gerät noch nicht aus dem Verbund entfernt hat (d.h. es wird in 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-Gerät 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 dauern. Das System darf währenddessen neu gestartet oder heruntergefahren werden. Eventuell lässt sich der Vorgang beschleunigen, siehe dazu Abschnitt Passender Anker

Hinweis:

Wurden Partitionen einer Platte von verschiedenen RAIDs genutzt, dann kann es vorkommen, dass eine verwendete Festplatte teilweise defekt ist und sich z.B. die Partition zu md0 im Status [U_] befindet, während alle anderen im Status [UU] sind. In diesem Fall müssen diese mit einem mdadm /dev/mdX --fail /dev/sdXY alle einzeln in den Modus [U_] vesetzt werden.

Controller-Fehler

In Einzelfällen kann es vorkommen, dass aufgrund eines defekten Controllers oder Netzteils ein RAID nicht mehr funktionsfähig ist. In so einem Fall liegt oft kein Schaden an den Festplatten vor und kann mit der folgenden Vorgehensweise behoben werden:

  1. RAID stoppen:

    sudo mdadm --stop /dev/md0 
  2. 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 Festplatte wegen Controller-Defekt ausgestiegen sind, müssen die ersten zwei Partitionen verwendet werden, da sie bis zum Ausfall noch zusammen aktiv waren. Nun reaktviert man das Arrays mit:

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

    .

  3. Die weiteren Partitionen können nun mit

    sudo mdadm --add /dev/md0 /dev/sdg1 /dev/sdh1 

    wieder in den Verbund aufgenommen werden.

Hotspare hinzufügen

Ein RAID kann Ersatzplatten vorhalten und diese beim Ausfall einer anderen Festplatte 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 RAID 5:

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

RAID erweitern

Falls zum Beispiel der Speicherplatz eines RAIDs nicht mehr ausreicht, kann man es durch weitere Festplatten bzw. Partitionen erweitern. Dies gilt allerdings nur für ein RAID 1, 4, 5 oder 6. Das RAID darf während des Vorgangs eingebunden sein. Die Platte muss zunächst wie oben beschrieben als Hostspare hinzugefügt werden. Danach kann das RAID auf dieses Laufwerk erweitert werden:

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

    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 (Typischerweise einige wenige MiB) gesichert. 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, ist aber stark anzuraten.

  2. 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. Am Beispiel ext4

    sudo umount /dev/md0
    sudo fsck.ext4 -f /dev/md0     # Die Prüfung erzwingen, selbst wenn vor Kurzem geprüft wurde
    sudo resize2fs /dev/md0
    sudo mount /dev/md0 
  3. Die mdadm.conf sollte noch auf den gebracht werden (evtl. alte Einträge löschen).

  4. Der Status lässt sich wieder jederzeit einsehen.

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 Paket

  • mdadm

Befehl zum Installieren der Pakete:

sudo apt-get install mdadm 

Oder mit apturl installieren, Link: apt://mdadm

installiert[2] werden. 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 aktiviren:

Achtung!

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

Das RAID muss danach nun nutzbar gemacht werden:

  1. RAID aus der mdadm.conf und den gefundenen Superblöcken neu assemblieren

    sudo mdadm --assemble --scan 
  2. 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:

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

    oder durch die Angabe der einzelnen Partitionen

    sudo 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 mit

sudo apt-get install  --no-install-recommends mdadm 

installiert werden (--no-install-recommends verhindert dabei das mitinstallieren des Mail-Server Postfix). Anschließend werden mit

sudo mdadm --assemble --scan 

alle gefundenen RAID-Verbunde aktiviert. Mit einem

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. die sda1 als Quelle angegeben (setzt RAID-1, -5 oder -6 voraus):

sudo 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.

USB und RAID

Wichtig ist vor allem, dass RAID-0 (stripping) denkbar ungeeignet für ein USB-RAID ist, 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 stark davon abzuraten ist. Bei einem RAID 1 (Spiegel) mit mehreren Partitionen auf verschiedenen USB Festplatten sollte es keine Probleme geben.

RAID 1 funktioniert, weil immer auf alle Platten geschrieben wird und das System zwischenzeitlich entfernte Platten wieder synchronisieren kann. Bei USB-Festplatten muss man nur 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[9] auf diese abstellen und um die Parameter "nouser" und "noauto" erweitern.

Komplexe Szenarien

Wem die oben genannten Möglichkeiten nicht ausreichen, der kann auch auf komplexere Konfigurationen zurückgreifen. So ist es möglich, zwei RAID 5 zu spiegeln, also als RAID 1 zu betreiben, zum Beispiel:

  1. Aus sde1, sdf1 & sdg1 wird ein RAID 5 erstellt

  2. Aus sdh1, sdj1 & sdk1 wird ebenfalls ein RAID 5 erstellt

  3. Aus den beiden RAID 5 wird dann ein RAID 1 erstellt.

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

Dies erhöht die Datensicherheit, da ein komplettes RAID 5 ausfallen kann, und die Daten trotzdem noch verfügbar sind.

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

RAID auflösen

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

  1. Stoppen des RAID-Verbundes:

    sudo umount /dev/md0
    mdadm --stop /dev/md0 
  2. Mit einem Editor in der mdadm.conf alle Array-Angaben löschen.

  3. Evtl. noch den RAID-Superblock der entfernten Partitionen löschen.

  4. Die Partitions-ID wieder auf normale Linux-ID ändern, z.B. bei MPT auf 83 oder bei GPT auf 8300.

  5. In der /etc/fstab[9] die aufgelösten RAIDs entnehmen.

  6. Evtl. noch verbliebene Arrays an die mdadm.conf neu anfügen

Die Daten sind damit nicht mehr zugreifbar. Die Partitionen auf den Festplatten sind damit 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.

MBR

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

GPT

  • GPT: Der Bootloader muss in die entsprechenden Boot-Partitionen installiert werden. Bei z.B. einer Installation mit GPT & 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!

Weitere Möglichkeiten, z.B. bei der Reparatur des RAID, bieten die Root-Directory-, die Chroot- oder die Setup-Methode.

initramfs

Damit die Boot-Partitionen durch die initrd auch einwandfrei gemountet werden, sollte nach Änderung der Datei mdadm.conf noch die initrd neu angelegt werden, z.B. durch Ausführen von

dpkg-reconfigure mdadm 

Sofern die entsprechenden Module, md bzw. raid0, raid1, noch nicht in der /etc/initramfs-tools/modules aktiviert wurden, muss dies noch erfolgen:

sudo -i
echo "raid0" >>/etc/initramfs-tools/modules
echo "raid1" >>/etc/initramfs-tools/modules
echo "md" >>/etc/initramfs-tools/modules
exit 

und anschließend das initramfs mit

sudo update-initramfs -u -k all 

aktualisiert werden.

Fehlermeldungen

Bootprobleme

GRUB 2: unknown Filesystem:
Falls das System nicht bootet, nachdem man es auf ein RAID 1 kopiert hat, obwohl die /etc/fstab[9] angepasst, die grub.cfg und die mdadm.conf korrekt erscheinen, sowie das initramfs aktualisiert wurde, kann es helfen, GRUB 2 wie unter GRUB 2/Reparatur (Abschnitt „Root-Directory-Methode“) beschrieben erneut zu installieren. Amerkung: Auf die Art der Partitionstabelle MPT & GPT achten!

RAID startet nicht

Device or resource busy
Falls beim Erstellen eines RAIDs die Meldung

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

erscheint und mit den Partitionen bereits einmal ein RAID erstellt wurde, muss dieses mit dem Befehl

sudo mdadm --manage --stop /dev/mdX 

gestoppt werden.

Sollte wider Erwarten ein RAID beim Booten nicht erkannt werden, so kann man mit der Datei mdadm.conf der automatischen Erkennung auf die Sprünge helfen.

  1. Zuerst aktiviert und startet man alle RAIDs manuell, damit sie vom Kernel erkannt werden.

  2. Dann erstellt man eine neue Konfigurations-Datei. Hier muss man unterscheiden, ob man Partitionen oder ganze Platten für das RAID verwendet hat.

  3. Nun aktualisiert man die mdadm.conf um die neuen Arrays, z.B.:

    • Partitionen:

      sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf 
    • ganze Platten:

      sudo mdadm --examine --scan --config=/etc/mdadm/mdadm.conf >> /etc/mdadm/mdadm.conf 

Begriffe

RAID-Level

#raidtab Die Angabe des Speicherplatzes im RAID: k = Kapazität je Partition; n = Anzahl der verwendeten Partitionen.

Auswahl von RAID-Typen im Überblick
Typ mind. Partitionen Speicher-
platz
Vorteil Bemerkung
0 2 k*n Geschwindigkeit (Lesen & Schreiben), Plattenplatz Keine Partition darf ausfallen, deshalb ein Zweck des RAID nicht erreicht - Reisverschlussverfahren
1 2 k Ausfallsicherheit, Geschwindigkeit (Lesen) Alle bis auf eine Partition dürfen ausfallen - Spiegelung
5 3 k*(n-1) Plattenplatz, Ausfallsicherheit, Geschwindigkeit (Lesen) Eine Partition darf ausfallen - Striping & Parität
6 4 k*(n-2) Plattenplatz, bessere Ausfallsicherheit als RAID 5, Geschwindigkeit (Lesen) Zwei Partitionen dürfen ausfallen - Striping & doppelte Parität
10 4 Sicherheit und gesteigerte Schreib-/Lesegeschwindigkeit. Kombination aus RAID 0 über mehrere RAID 1
RAID unterstützt auch unbenutzte Reservelaufwerke, sog. Hot-Spares. Dabei werden vorab Partitionen bekannt gegeben, die beim Ausfall eines Laufwerks innerhalb des RAID-Verbundes durch das Reservelaufwerk redundant ersetzt werden.

Alignment

Diese Revision wurde am 12. September 2013 12:03 von Nonymus erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, Server, RAID