Software-RAID mit Linux
Einführung
RAID ist auch möglich ohne RAID-Controller. Die Lösung für das 'Billig-RAID' ist Software-RAID. Dabei wird die Verwaltung des RAID vom Betriebssystem übernommen. Software-RAID kommt nicht an die Performance von Hardware-RAID mit RAID-Controller heran, auch die Features sind deutlich weniger.
Wenn es Software-RAID sein soll, ist Linux das Betriebssystem der Wahl. Zwar ist Software-RAID auch unter Windows 2000 und Nachfolger möglich, jedoch bietet Software-RAID unter Linux einige Vorteile:
- Spare Disks bzw. Hot Fix Disks
- Einfache Konfiguration mittels der Datei /etc/raidtab
- Kein Logical Volume Management (LVM) nötig (unter Windows als 'Dynamische Festplatte' bekannt). Man kann, muss aber nicht, ein LVM-System auf ein Software-RAID aufsetzen.
- RAID-Level können beliebig kombiniert werden. Da ein RAID-Device unter Linux als normales Block-Device behandelt wird, sind alle möglichen Kombinationen denkbar (RAID 10, RAID 15, etc.)
- Gleichzeitig kann man Software-RAID durch Fein-Einstellungen (Kernel, etc.) sehr gut 'tunen'. Es wird sogar behauptet, dass es zwischen einem Linux Software-RAID und einem Onboard RAID-Controller keinen Performance-Unterschied gibt.
Installation
Es ist möglich, schon bei der Installation ein RAID-Array zu erzeugen und das System darauf zu installieren. Dazu muss das Install-System über folgende Features verfügen:
- Der Linux-Kernel muss RAID unterstützen. Evtl. Vorhandene SCSI-Controller sollten natürlich auch unterstützt werden.
- Die raidtools müssen vorhanden sein.
- Die zu erzeugenden Partitionen, aus denen das Array besteht, müssen vom Typ 0xFD (Linux RAID autodetect), nicht vom Typ 0x83 (Linux) sein.
Soll das System selbst (zunächst) nicht auf RAID laufen, kann eine normale Standard-Installation vorgenommen werden. Der zu installierende Kernel sollte RAID unterstützen.
Ein RAID-Device erstellen
Unter Linux besteht ein RAID-Array aus einer Ansammlung von Block-Devices, die wiederum ein Block-Device (das RAID-Device) ergeben.
Am sinnvollsten ist es natürlich, Festplatten-Partitionen für das Erstellen eines RAID-Devices zu benutzen. Ein RAID-Device hat unter Linux die Bezeichnung /dev/md?.
Die Datei /etc/raidtab
/etc/raidtab ist die Konfigurationsdatei für das Erstellen eines RAID-Verbandes. Der Aufbau dieser Datei ist einfach gehalten.
- raiddev device
erfolgt immer am Anfang der Definition eines RAID-Verbandes - nr-raid-disks zahl
Anzahl der benutzten Block-Devices im RAID-Verband - nr-spare-disks zahl
Anzahl der vorhandenen spare disks im RAID-Verband. Nur nutzbar in Verbindung mit RAID 1,4 und 5. - persistent-superblock 0/1
Sollte immer mit 1 definiert werden. Der persistent Superblock ist ein kleiner Bereich am Ende des Devices, in dem System-Informationen über das RAID Device stehen. Wichtig für Autodetection und für den Fall, dass Festplatten ihre Device-Bezeichnung ändern. - parity-algorithm
Nur für RAID 5. Es sollte immer left-symmetric genommen werden. - chunk-size Streifengröße
Die Größe eines Streifens in einem Striped Level. - device device
Definition eines Devices in einem RAID-Verband - raid-disk nummer bzw. spare-disk nummer
Fortlaufende Nummer, kommt direkt unterhalb einer Device-Definition, beginnend mit 0.
Beispiel für linear mode (chaining)
raiddev /dev/md0 raid-level linear nr-raid-disks 2 chunk-size 32 persistent-superblock 1 device /dev/sdb6 raid-disk 0 device /dev/sdc5 raid-disk 1
chunk-size ist eigentlich unnötig, da es beim linear mode kein Striping gibt. Die Raidtools verlangen aber nach diesem Parameter. Deswegen wird dort einfach irgend etwas angegeben.
Beispiel für RAID 0
raiddev /dev/md0 raid-level 0 nr-raid-disks 2 chunk-size 4 persistent-superblock 1 device /dev/sdb6 raid-disk 0 device /dev/sdc5 raid-disk 1
Beispiel für RAID 1
raiddev /dev/md0 raid-level linear nr-raid-disks 2 nr-spare-disks 1 chunk-size 32 persistent-superblock 1 device /dev/sdb6 raid-disk 0 device /dev/sdc5 raid-disk 1 device /dev/sdd5 spare-disk 0
Beispiel für RAID 5
raiddev /dev/md0 raid-level 5 nr-raid-disks 3 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 spare-disk 0
Den RAID-Verband starten
Sobald ein RAID-Verband oder mehrere RAID-Verbände in /etc/raidtab definiert sind, kann der RAID-Verband mit
mkraid /dev/md0
gestartet werden. Um den RAID-Verband zu stoppen gibt man
raidstop /dev/md0
ein. Um den RAID-Verband erneut zu starten, benutzt man den Befehl
raidstart /dev/md0
Informationen
Wenn nun ein RAID-Verband läuft, möchte man auch über dessen Zustand Bescheid wissen. Die erste Anlaufstelle ist hier /proc/mdstat. Dort wird aufgeführt, welche RAID-Verbände am Laufen sind und welche Block-Devices daran teilnehmen. Ferner können dort auch Synchronisierungs-Prozesse beobachtet werden.
lsraid ist ein Programm mit zahlreichen Optionen und Ausgabemöglichkeiten. Die Manpage von lsraid (8) gibt hierzu erschöpfend Auskunft. Zwei der am häufigsten benutzten Optionen sind:
lsraid -A -a /dev/md0
gibt eine kurze Liste des md0 Devices aus
lsraid -R -p
gibt eine Liste aller vorhandenen Devices im raidtab-Format aus
RAID beim Booten starten
Läuft das System selbst nicht auf RAID, ist es möglich, den RAID-Verband zu jedem beliebigen Zeitpunkt mit raidstart
zu starten. Um dies beim Booten zu tun, ist lediglich ein entsprechender Eintrag in die rc-Skripte nötig. Evtl. ist darauf zu achten, dass die nötigen Module vorher geladen wurden. Die Partitionen können dabei von jedem beliebigen Typ sein.
Wenn das System selbst auf RAID läuft, ist es unbedingt nötig, dass die Partitionen vom Typ 0xFD (Linux RAID autodetect) sind, außerdem muss die RAID-Unterstützung im Kernel sein. Der Kernel scannt beim Laden die vorhandenen physikalischen Partitionen und fügt sie dann selbsttätig zu einem RAID-Verband zusammen.
Ein Device hinzufügen oder entfernen
Es ist möglich, zur Laufzeit eines RAID-Verbandes Devices hinzuzufügen oder zu entfernen. Dies ist z.B. dann nötig, wenn eine defekte Festplatte ersetzt werden soll. Die Befehle dazu lauten raidhotadd
und raidhotremove
.
Weiterführende Literatur
- Software-RAID-HOWTO, jeder Linux-Distribution beiliegend