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, dass 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   #TODO: sudo mit -- testen 

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 

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 6. September 2013 12:22 von Nonymus erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, Server, RAID