Bewertung: 2


Die Kandidaten sollten in der Lage sein, Software RAID unter Linux zu konfigurieren und zu implementieren. Dieses Prüfungsziel beinhaltet die Anwendung der mkraid-Tools und die Konfiguration der RAID-Level 0,1 und 5.

Schlüsseldateien, Begriffe und Hilfsmittel beinhalten:

  • mkraid
  • /etc/raidtab

Linux unterstützt das Zusammenfassen verschiedener Festplatten auf verschiedene Weise. Eine davon ist die Implementierung eines Software-RAID. Für den Fall, dass unklar sein sollte, was RAID eigentlich genau ist, habe ich versucht, es hier etwas genauer zu erklären.

Hardware-Voraussetzungen für ein Linux Software RAID

Historisch gesehen ist RAID eine Erweiterung für SCSI Geräte gewesen. Aus diesem Grund sind „echte“ RAID-Adapter (Hardware-RAID) praktisch immer SCSI-Adapter. Durch die Software-Implementierung von RAID ist es unter Linux aber auch möglich, RAID mit IDE-Platten zu realisieren.

IDE-Platten ( heutzutage werden SSD oder M2 Festplatten dazu verwendet ) sind heute den SCSI-Platten nicht mehr wesentlich unterlegen, hingegen sind sie immer noch entscheidend billiger. Viele Hersteller von Festplatten liefern inzwischen praktisch baugleiche Platten entweder als SCSI oder als IDE-Platten aus. Es gibt also keinen Unterschied mehr hinsichtlich der physikalischen Stabilität. Auch bei der Frage der Geschwindigkeit sind moderne UDMA-IDE Platten ihren SCSI-Konkurrenten durchaus ebenbürtig. Allerdings spielen sie ihre Geschwindigkeit erst wirklich aus, wenn sie alleine an einem IDE-Bus als Master hängen. Aus diesem Grund wird allseits empfohlen, ein IDE-RAID mit Platten aufzubauen, die jeweils alleine an einem IDE-Bus hängen. Durch zusätzliche IDE-Controller lassen sich auch so viele Platten ins System integrieren.

Kernel Voraussetzungen

Damit der Linux-Kernel die modernen RAID-Tools benutzen kann, sollte es mindestens ein 2.2.X Kernel sein, der einen zusätzlichen Patch aufgespielt bekommt. Ab Version 2.4 sind die modernen RAID-Treiber fest integriert.

Der Kernel selbst muß RAID unterstützen, entweder fest eingebaut oder als Module. Jedes RAID-Level wird als separates Modul angeboten, kann also entsprechend geladen werden.

Grundprinzip

Die raidtools von Linux arbeiten mit einer zentralen Konfigurationsdatei, die – sofern nichts anderes angegeben wurde – im Verzeichnis /etc liegt und raidtab heißt. Der Name ist an /etc/fstab (Filesystemtable) angelehnt, /etc/raidtab ist also entsprechend die zentrale Informationsquelle des Systems für die RAID-Arrays.

Die Datei /etc/raidtab enthält für jedes RAID-Gerät (also nicht für jedes physikalische Gerät) einen entsprechenden Abschnitt, der darstellt, aus welchen physikalischen Laufwerken es besteht. In jedem dieser Abschnitte wird festgelegt

  • welche physikalischen Geräte werden in welcher Reihenfolge eingehängt
  • welcher RAID-Level soll erstellt werden
  • welche Blockgröße soll verwendet werden
  • welche physikalischen Geräte sind als Ersatzgeräte gedacht
  • soll ein persistenter Superblock benutzt werden

Die Reihenfolge der Angaben in der Konfigurationsdatei ist wichtig. In der Handbuchseite der Konfigurationsdatei ist das umfassend erklärt.

Eine der wesentlichen Neuerungen der modernen RAID-Tools von Linux ist der persistente Superblock. Dabei handelt es sich um einen Block an Informationen über das entsprechende Array, der auf jeder Platte bzw. Partition vorhanden ist, die Teil des Arrays ist. Mit Hilfe dieses Superblocks kann der Kernel ein RAID-Array initialisieren und benützen, auch wenn auf die Datei /etc/raidtab nicht zugreifbar ist (weil z.B. das Wurzelverzeichnis noch nicht gemountet ist).

Wenn in der Datei /etc/raidtab alle Einstellungen vorgenommen wurden, dann wird mit Hilfe des Befehls mkraid das Array aufgebaut. Dazu werden alle Daten auf den einzelnen Partitionen zerstört, die RAID-Struktur wird aufgebaut und die Superblocks werden geschrieben. Das Array ist schon während der Laufzeit von mkraid arbeitsfähig.

Um später ein RAID-Array an- oder abzuschalten gibt es die beiden Befehle raidstart und raidstop, mit denen das Array im laufenden Betrieb abgeschaltet und dann manuell wieder angeschaltet werden kann. Allerdings ist das nicht der Weg, über den beim Booten die RAID-Arrays tatsächlich gestartet werden müssen, denn durch die Verwendung der persistenten Superblocks kann der Kernel – wie oben schon erwähnt – selbst erkennen, welche Laufwerke in welches RAID-Array eingehängt werden sollen.

Um diese Selbsterkennung durchzuführen müssen allerdings ein paar Bedingungen erfüllt sein. Voraussetzungen sind:

  1. Autodetection muß im Kernel aktiviert sein
  2. Die verwendeten RAID Geräte müssen einen persistenten Superblock besitzen
  3. Die Partitionstypen der physikalischen Geräte müssen auf 0xFD (Linux RAID Auto) gesetzt sein. Das kann mit fdisk erledigt werden. Achtung: das RAID-Array darf nicht aktiviert sein, wenn diese Veränderung gemacht wird. Sollte es bereits aktiv sein, so muß es vor dem Einsatz von fdisk mit raidstop abgeschalten werden.

Das wars auch schon. Beim nächsten Booten werden die RAID-Arrays automatisch erkannt und gestartet.

RAID-Level Konfiguration in /etc/raidtab

Die Prüfungsziele der LPI201 Prüfung verlangen den Aufbau der RAID Level 0, 1 und 5. Wir werden jetzt hier für jeden der drei Level eine Beispieldatei /etc/raidtab aufbauen und kommentieren. Nochmal: Informationen über die verschiedenen Levels gibt es hier.

RAID-0

RAID-0 (striping) benötigt zwei oder mehr etwa gleich große Geräte (Partitionen) die zu einem RAID-Array zusammengefasst werden. Vorteile sind also die entstehende große virtuelle Platte und eine Steigerung der Zugriffsgeschwindigkeit, da alle Zugriffe auf mehreren Platten gleichzeitig stattfinden können.

Ein entsprechender RAID-0 Eintrag in /etc/raidtab sieht also folgendermaßen aus:

  raiddev /dev/md0
        raid-level      0
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size      4
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

Ersatzplatten (spare-disks) sind für das Level-0 nicht möglich.

Die einzelnen Zeilen bedeuten: raiddev /dev/md0 Die Kopfzeile eines Abschnitts. Hier wird festgelegt, dass alles, was jetzt folgt (bis zum nächsten Auftauchen einer raiddev Anweisung oder dem Dateiende) die Definition eines RAID-Arrays ist. In unserem Fall also das RAID-Gerät /dev/md0 raid-level 0 Hier wird der gewünschte RAID-Level festgelegt, in unserem Fall also die 0. nr-raid-disks 2 Hiermit legen wir die Anzahl der angeschlossenen physikalischen Geräte fest. In unserem Fall also zwei Geräte. Später in diesem Abschnitt müssen natürlich dann auch entsprechend zwei Geräte mit device und raid-disk angegeben sein. persistent-superblock 1 Hier legen wir fest, dass unser RAID-Array einen persistenten Superblock bekommt. Hätten wir eine 0 eingegeben, so wäre keiner angelegt worden (nicht empfehlenswert!). chunk-size 4 Die Angabe der Blockgröße, die für die einzelnen RAID-Geräte verwendet werden soll. Festplatten sind blockorientierte Geräte, es ist also nicht möglich, einzelne Bytes auf die Platten zu verteilen, wir müssen immer ganze Blöcke angeben. Die Angabe wird in KiloByte gemacht, 4 bedeutet also 4 KByte. device /dev/sdb6 Mit dieser Anweisung bringen wir eine physikalische Partition ins Spiel (hier also /dev/sdb6 und später im Beispiel /dev/sdc5), die Teil des Arrays werden soll. Dieser Anweisung muß dann die Anweisung raid-disk folgen. Jede angeschlossene physikalische Partition bekommt einen solchen Eintrag. Zwingend erforderlich ist es, dass hier ebensoviele Einträge sind, wie oben unter nr-raid-disks angegeben wurden. raid-disk 0 Nach jedem device Eintrag muß noch die Information folgen, wie das entsprechende Gerät eingehängt werden soll. Da bei RAID-0 keine Ersatzlaufwerke unterstützt werden, kann hier nur der Eintrag raid-disk stehen. Die Zahl dahinter gibt die Position im Array an. Die Positionsangaben beginnen mit 0, die erste Platte bekommt also den Wert 0, die zweite 1 usw.

Nachdem diese Einträge gemacht sind, können wir mit

  mkraid /dev/md0

das RAID-Array initialisieren (nur das erste Mal natürlich!) und dann sofort benutzen. Benutzen bedeutet allerdings zunächst mal, dass wir ein Dateisystem aufbringen müssen, z.B. mit mke2fs. Angesprochen wird das RAID-Gerät jetzt mit /dev/md0.

RAID-1

Mit diesem RAID-Level können genau zwei Geräte etwa gleicher Größe zu einem Array zusammengefasst werden. RAID-1 bedeutet Plattenspiegelung, es werden also alle Daten grundsätzlich auf beide angeschlossenen physikalischen Geräte geschrieben. In diesem Level können wir aber schon optional Ersatzlaufwerke einbinden, die im normalen Einsatz nicht benutzt werden. Erst, wenn eins der beiden angeschlossenen Laufwerke ausfällt, wird automatisch ein angegebenes Ersatzlaufwerk herangezogen, so dass sofort wieder die Sicherheit von gespiegelten Platten besteht. Wie gesagt, die Angabe der Ersatzlaufwerke ist optional.

Die Datei /etc/raidtab sieht diesmal folgendermaßen aus:

  raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        chunk-size     4
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
        device          /dev/sdd5
        spare-disk      0

Die meisten Zeilen sind uns schon bekannt aus dem letzten Beispiel. Die neuen Zeilen bedeuten: raid-level 1 Der zu verwendende Level, hier also 1 für RAID-1 nr-spare-disks 1 Die Anzahl der verwendeten Ersatzlaufwerke. Sollen keine Ersatzlaufwerke benutzt werden, so steht hier die 0. Wie schon bei nr-raid-disks muß weiter unten dann die entsprechende Anzahl von spare-disk Anweisungen stehen. spare-disk 0 Entspricht genau der Angabe raid-disk, nur dass es sich hier um die Ersatzlaufwerke handelt. Die Nummer gibt wieder die Position an, in diesem Fall also die Frage, welche Ersatzplatte als erste zum Einsatz kommt. Die erste Platte ist die der Position 0, die zweite hat 1 usw. Auch diesem Eintrag muß natürlich ein device Eintrag vorgestellt sein, damit überhaupt klar gemacht wird, welche physikalische Platte verwendet werden soll.

Mit dem Befehl

  mkraid /dev/md0

wird die Spiegelung der beiden Platten eingeleitet. Noch während der laufenden Spiegelung kann jetzt ein Dateisystem aufgebracht werden und das Laufwerk /dev/md0 benutzt werden.

RAID-5

Der RAID-Level 5 fasst drei oder mehrere Platten ähnlicher Größe zu einer großen virtuellen Platte zusammen. Die Paritätsinformation wird regelmäßig auf alle Platten verteilt. Wenn wir also N Platten haben, so stehen uns die Kapazität von N-1 Platten zur Verfügung.

Ein RAID-5 Array kann natürlich auch mit Ersatzplatten arbeiten, die im Fehlerfall automatisch eingesetzt werden. Die Datei /etc/raidtab für ein RAID-5 Array bestehend aus 7 physikalischen Platten und einer Ersatzplatte sieht folgendermaßen aus:

  raiddev /dev/md0
        raid-level      5
        nr-raid-disks   7
        nr-spare-disks  1 
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      32
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1
        device          /dev/sdc1
        raid-disk       2
        device          /dev/sdd1
        raid-disk       3
        device          /dev/sde1
        raid-disk       4
        device          /dev/sdf1
        raid-disk       5
        device          /dev/sdg1
        raid-disk       6
        device          /dev/sdh1
        spare-disk     0

Die einzige Neuerung ist hier die Anweisung parity-algorithm left-symmetric Mit dieser Anweisung wird festgelegt, wie die Paritätsinformationen aufgebaut werden sollen. Die left-symmetric Methode ist im Augenblick die schnellste und zuverlässigste.

In diesem Beispiel haben wir die Blockgröße (chunk-size) auf 32 KByte erhöht, was für große RAID-5 Arrays eine gute Voreinstellung ist.

Wiederum wird das neue Array mit

  mkraid /dev/md0

initialisiert. Auch hier ist die Initialisierung wieder transparent, d.h. wir können sofort auf das Gerät /dev/md0 zugreifen.

Diagnose

Um während der Initialisierung der RAID-Geräte (z.B. während des Ablaufs von mkraid) nachzuvollziehen, was auf dem Gerät gerade passiert, kann in der Datei /proc/mdstat jederzeit der aktuelle Status nachgelesen werden.

Dateisystemoptionen

Wenn auf einem RAID-Gerät ein EXT2 Dateisystem angelegt werden soll, so bietet der Befehl mke2fs eine spezielle RAID-Option (-R) an. Mit ihrer Hilfe kann festgelegt werden, wie groß die Blocks (Strides) sind, die auf dem RAID-Array verteilt werden.

Wenn wir eine chunk-size von 32 KByte angegeben haben und auf unserem EXT2 System mit einer Blockgröße von 4 KByte arbeiten, dann heißt das, dass jeweils 8 Dateisystemblöcke mit je 4 KByte in einen Chunk-Block kommen, also zusammen auf eine physikalische Partition des RAID-Arrays geschrieben werden. Das können wir mit der Option -R stride= dem Dateisystem beim Erstellen mitgeben. Wir erstellen das Dateisystem also in diesem Fall mit dem Befehl

  mke2fs -b 4096 -R stride=8 /dev/md0

Damit wird das EXT2 Dateisystem in die Lage versetzt, sinnvoll mit den Eigenschaften unseres RAID-Arrays umzugehen. Bedeutung hat diese Einstellung primär für die RAID-Level 4 und 5.

Schreibe einen Kommentar