Linux: Schneller und sicherer durch RAID

11.03.2005 von Michael Kofler
Ein RAID-Verbund von Festplatten kann sowohl die Geschwindigkeit als auch die Datensicherheit erhöhen. Dank Software-RAID lassen sich diese Vorteile unter Linux kostenlos mit ein paar wenigen Kommandos nutzen.

Unsere neue Linux-Serie beschreibt die verschiedenen Facetten der Administration des Dateisystems. Mit Ausnahme der ersten beiden Teile richtet sich die Serie explizit an Linux-Profis. Die achtteilige Artikelreihe behandelt dabei folgende Themen:

Die Artikelserie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als PDF-eBook herunterladen.

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten

RAID-Grundlagen

RAID steht für Redundant Array of Inexpensive/Independent Disks, wobei beide Definitionen gebräuchlich sind. Die Grundidee besteht darin, Partitionen mehrerer Festplatten logisch miteinander zu verknüpfen. Das Ziel ist dabei, ein zuverlässigeres und/oder schnelleres Gesamtsystem zu schaffen:

Der folgende Überblick über verschiedene RAID-Level geht davon aus, dass Partitionen unterschiedlicher Festplatten miteinander verbunden werden. Theoretisch können auch Partitionen einer Festplatte verbunden werden, das ist aber nicht sinnvoll - weder vom Sicherheits- noch vom Geschwindigkeitsstandpunkt aus.

Zunächst folgt eine knappe Einführung in RAID. Einen umfassenden Überblick mit einer detaillierten Gegenüberstellung aller Vor- und Nachteile der acht verschiedenen RAID-Level finden Sie in unserem Grundlagenbeitrag RAID im Überblick.

Gebräuchliche RAID-Level

Linear Concatenation: Hier werden mehrere physikalische Partitionen zu einer größeren virtuellen Partition verbunden. Der Vorteil besteht darin, dass sehr große Partitionen entstehen, die über mehrere Festplatten reichen. Es gibt keinen Geschwindigkeitsvorteil, und das Ausfallrisiko ist höher: Wenn eine Festplatte ausfällt, sind alle Daten verloren.

RAID-0 (Striping): Auch hier werden mehrere Partitionen zu einer größeren Partition vereint. Allerdings beschreibt das System die Partitionen nicht linear der Reihe nach; sondern verteilt die Daten quasi parallel in kleinen Blöcken (typisch 4 bis 64 KByte) auf die einzelnen Partitionen. Beim Zugriff auf eine längere Datei liefern alle Festplatten alternierend die Daten. Daraus ergibt sich im optimalen Fall eine Vervielfachung der Datenrate. Bei drei Festplatten kann sich der Datendurchsatz verdreifachen.

In der Praxis ist dieser Effekt aber sowohl durch physikalische Grenzen wie die maximale Übertragungsrate des SCSI-Busses als auch durch den nötigen Verwaltungs-Overhead beschränkt. Das Ausfallrisiko ist wie bei der linearen Verbindung von Partitionen hoch. Eine defekte Festplatte führt zum Verlust aller Daten.

RAID-0 beschleunigt Blockoperationen, also das Lesen und Schreiben großer zusammenhängender Datenmengen. Bei kleinen Datenblöcken ist der Effekt etwas weniger ausgeprägt. Die Anzahl der Random-Access-Zugriffe pro Sekunde wird durch das Striping hingegen nicht oder nur geringfügig verbessert. Mit anderen Worten: Striping ist vor allem dann sinnvoll, wenn Sie oft große Dateien bearbeiten (Bildverarbeitung, Multimedia), hilft aber beim Zugriff auf kleine Dateien und kleine Datensegmente großer Dateien wenig.

Weitere gebräuchliche RAID-Level

RAID-1 (Mirroring): Hier speichert das System dieselben Daten doppelt in zwei Partitionen. Wenn eine Festplatte ausfällt, stehen alle Daten auf der anderen Festplatte zur Verfügung. Der Vorteil ist die höhere Sicherheit, der Nachteil die halbierte Kapazität. Die Geschwindigkeit hängt von der Implementierung ab.

Bei Hardware-RAID-1 kann bei Schreiboperationen weit gehend die gleiche Geschwindigkeit wie bei einem normalen Zugriff auf eine Partition erreicht werden, bei Lese- und Suchoperationen ist sogar eine Beschleunigung möglich. Bei Software-RAID sind aber insbesondere Schreibvorgänge etwas langsamer.

RAID-5 (Parity Striping): RAID-5 funktioniert im Prinzip wie RAID-0, allerdings werden zusätzlich in einer - für jeden Datenblock wechselnden - Partition Paritätsinformationen gespeichert. Wenn eine Festplatte ausfällt, kann RAID-5 die gesamten Daten rekonstruieren.

RAID-5 versucht, die Vorteile von RAID-0 und RAID-1 zu vereinen, ohne die Nachteile zu übernehmen. Wenn n gleich große Partitionen eine RAID-5-Partition bilden, steht immerhin (n - 1) mal der Platz einer Partition für Daten zur Verfügung. Der Overhead zur Verwaltung der Paritätsinformationen kann zumindest teilweise durch den parallelen Zugriff auf die Festplatten ausgeglichen werden.

IDE- versus SCSI-, Hardware- versus Software-RAID

Auf Grund seines Funktionsprinzips bietet das SCSI-System für alle RAID-Varianten und unabhängig von einer Software- oder Hardware-Implementierung große Vorteile. Der wichtigste Vorteil besteht darin, dass sich Festplatten nach der Entgegennahme eines Kommandos vorübergehend vom SCSI-Bus abmelden können, bis die Daten tatsächlich bereitstehen. In der verbleibenden Zeit ist der SCSI-Bus frei zur Übertragung von Kommandos und Daten von anderen Platten.

IDE-Platten erreichen eine optimale Performance nur dann, wenn die Festplatten an unterschiedlichen Controllern angeschlossen sind. Die in der Praxis häufigste und sinnvollste IDE-Konfiguration ist ein RAID-0-System mit zwei Festplatten an zwei Controllern (/dev/hda und /dev/hdc). Nur in diesem Fall kann das theoretische Potenzial von RAID-0 selbst mit IDE-Festplatten beinahe ausgeschöpft werden. Die Datenübertragungsrate für große Dateien kann sich dabei annähernd verdoppeln.

Hardware- versus Software-RAID

RAID kann man entweder durch einen RAID-Controller (einen SCSI- oder IDE-Controller mit zusätzlichen RAID-Funktionen) oder per Software realisieren. Beide Varianten haben Vor- und Nachteile:

Hardware-RAID belastet den Rechner (die CPU) nicht und ist im Regelfall schneller und stabiler. Manche Hardware-RAID-Lösungen unterstützen zudem den Austausch und die Restauration defekter Platten im laufenden System (hot swap). Allerdings sind Hardware-RAID-Controller zum Teil recht teuer. Außerdem unterstützt Linux nicht alle Hardware-RAID-Controller. Der Link auf http://www.linux-ide.org/chipsets.htm führt zu einer Liste der Linux-kompatiblen IDE-RAID-Controller. Eine vergleichbare Liste für SCSI-RAID-Controller ist nicht bekannt.

Software-RAID verursacht keine zusätzlichen Kosten. Je nach RAID-Level kann die gleiche Datenübertragungsrate wie mit Hardware-RAID erreicht werden, allerdings bei einer höheren CPU-Belastung. Dieser Artikel berücksichtigt ausschließlich Software-RAID!

Weitere RAID-Grundlagen finden Sie in diversen HOWTOs und FAQs:

http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html

http://www.tldp.org/HOWTO/Multi-Disk-HOWTO.html

http://www.tldp.org/HOWTO/ATA-RAID-HOWTO/index.html

http://www.tldp.org/FAQ/Linux-RAID-FAQ/index.html

Konfiguration von RAID-0 (Striping)

An dieser Stelle geht es darum, eine sehr einfache Form von Software-RAID zu konfigurieren, nämlich RAID-0 (Striping). Der Lohn für diese Arbeit besteht darin, dass manche Festplattenoperationen beinahe n-mal schneller durchgeführt werden können (wobei n die Anzahl der Festplatten bezeichnet).

Die Grundidee von Software-RAID sieht so aus: Zwischen den Treiber zum Festplattenzugriff (IDE/SCSI) und den Dateisystemtreiber (zum Beispiel ext2) wird eine Zwischenschicht gesetzt. Der so genannte Multi Devices Driver Support (kurz md) bildet aus mehreren Festplatten-Partitionen ein neues, logisches Device, auf das der Dateisystemtreiber zugreifen kann (/dev/mdn). Mit anderen Worten: Wenn Sie nach der RAID-Konfiguration das Dateisystem einrichten, verwenden Sie nicht mehr /dev/hd, sondern /dev/mdn als Datenpartition.

Es gibt drei wesentliche Voraussetzungen für das Striping:

Dieser Beitrag beschreibt ausschließlich die raidtools-Version 1.0. Doch vorab noch zwei Hinweise

RAID einrichten

Zugriff: Der Zugriff auf die virtuellen RAID-Partitionen erfolgt über die Devices /dev/md*. Bei den meisten Distributionen sind diese automatisch eingerichtet. Falls das nicht der Fall ist, schaffen die folgenden Kommandos Abhilfe:

root# mknod /dev/md0 b 9 0
root# mknod /dev/md1 b 9 1
root# mknod /dev/md2 b 9 2
root# mknod /dev/md3 b 9 3
root# chown root.disk /dev/md*
root# chmod 660 /dev/md*

Partitionen einrichten: Sie benötigen zumindest zwei Partitionen mit dem Partitionstyp fd. Das folgende Beispiel nimmt an, dass die Partitionen die Device-Namen /dev/hda10 und /dev/hdc10 haben. Die Partitionen müssen nicht formatiert werden. (Dieser Schritt folgt später.)

Sie können diese Partitionen mit jedem Partitionierungswerkzeug einrichten, etwa mit fdisk. Die Partitionen sollten gleich groß sein, das ist aber nicht unbedingt erforderlich. Je nach RAID-Level führt eine unterschiedliche Größe aber dazu, dass die Geschwindigkeit nicht optimal ist oder dass Teile der größeren Partition nicht genutzt werden können.

Konfiguration des RAIDs

Die Konfiguration der RAID-Devices erfolgt in /etc/raidtab. Die folgenden Zeilen zeigen beispielhaft den Aufbau dieser Datei:

# /etc/raidtab
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
nr-spare-disks 0
chunk-size 32
persistent-superblock 1
device /dev/hda10
raid-disk 0
device /dev/hdc10
raid-disk 1

Das bedeutet, dass ein auf zwei Festplatten verteiltes RAID-0-System erstellt werden soll. chunk-size gibt die Seitengröße an, die hier mit 32 KByte gewählt wurde. Dabei gibt es keine einfache Regel, welche Größe eine optimale Geschwindigkeit erreicht - probieren Sie es aus. Das Software-RAID-HOWTO empfiehlt 32 KByte als guten Startwert.

persistent-superblock bedeutet, dass am Ende jeder Partition einige Verwaltungsinformationen gespeichert werden. Dies ermöglicht eine richtige Zusammensetzung des RAID-Systems selbst dann, wenn die Reihenfolge der Festplatten im System vertauscht wurde. Die Option ist auch erforderlich, damit der Kernel beim Starten automatisch RAID erkennt.

Inbetriebnahme

Das so definierte RAID-System wird nun mit mkraid erzeugt:

root# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hda10, 24097KB, raid superblock at 24000KB
disk 1: /dev/hdc10, 24066KB, raid superblock at 24000KB

Als Nächstes müssen Sie auf der neuen virtuellen Partition /dev/md0 ein Dateisystem anlegen. Diese Partition binden Sie mit mount in das Linux-Dateisystem ein. Die Partition wird hier über das Verzeichnis /striped angesprochen - selbstverständlich können Sie stattdessen auch einen anderen Namen verwenden.

root# mke2fs -j /dev/md0
root# mkdir /striped
root# mount -t ext3 /dev/md0 /striped/

Wenn alles klappt, sollten Sie die neue Partition in /etc/fstab aufnehmen, um den Tippaufwand bei mount zu minimieren oder um zu erreichen, dass die Partition beim Systemstart automatisch in das Dateisystem eingebunden wird:

# in /etc/fstab
/dev/md0 /striped ext3 defaults 0 0

Systemstart und -stopp

Bei den meisten Linux-Distributionen wird das RAID-System während des Init-V-Prozesses automatisch initialisiert, sofern drei Voraussetzungen erfüllt sind:

Bei Red Hat und Fedora wird das RAID-System nur dann initialisiert, wenn /etc /fstab eine RAID-Partition enthält, die während des Systemstarts in das Dateisystem eingebunden werden soll. Ist das nicht der Fall, können Sie das RAID-System manuell mit raidstart --all starten. Dieses Kommando aktiviert alle /dev/md-Devices, die in /etc/raidtab spezifiziert sind.

RAID kann nicht ohne Weiteres für die Root-Partition verwendet werden. Der Grund besteht darin, dass das Lesen einer RAID-Partition erst funktioniert, nachdem die entsprechenden Kernel-Module aktiv sind. Dazu müssen der Kernel und diverse Konfigurationsdateien aber zuerst einmal geladen werden. Viele Software-RAID-Systeme verwenden deswegen eine normale root-Partition und RAID nur für die Datenpartitionen.

Wenn Sie RAID auch für die Systempartition verwenden möchten, benötigen Sie eine eigene, gewöhnliche /boot-Partition für das Kernel-Image für GRUB beziehungsweise LILO. Des Weiteren müssen Sie das RAID-Modul in einer Initial-RAM-Disk zur Verfügung stellen. Tipps zur Verwendung von RAID für die /root- Partition finden Sie auch in folgendem, allerdings etwas älteren HOWTO: http://www.tldp.org/HOWTO/Boot+Root+Raid+LILO.html

Ausblick

Nachdem wir in diesem Teil die Konfiguration eines einfachen RAID-Systems unter Linux vorgestellt haben, geht es in Teil 7 um die dynamische Verwaltung von Festplatten mit LVM. Mit dem Logical Volume Manager können Sie im laufenden Betrieb Partitionen beispielsweise vergrößern oder zusammenlegen. Über Snapshots können Sie zudem den aktuellen Zustand des Dateisystems für Backups einfrieren.

Diese Artikelserie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als eBook herunterladen. (ala)

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten