Universität Karlsruhe Fakultät für Informatik Universität Karlsruhe

Proseminar Fehlertoleranzverfahren

RAID-Systeme

Thomas Karcher

Inhaltsverzeichnis

        1. Einführung
                1.1. Motivation
                1.2. Geschichte
                1.3. Physikalischer Aufbau von Festplatten
                1.4. Physikalische Fehlerquellen
                1.5. Maßzahlen für Verfügbarkeit/Zuverlässigkeit
                1.6. Performanz: I/O
        2. Die Theorie
                2.1. RAID - "Redundant Array of Independent/Inexpensive Disks"
                        2.1.1. RAID Level 0
                        2.1.2. RAID Level 1
                        2.1.3. RAID Level 2
                        2.1.4. RAID Level 3
                        2.1.5. RAID Level 4
                        2.1.6. RAID Level 5
                        2.1.7. RAID Level 6
                        2.1.8. RAID Level 7
                2.2. Kombinationen verschiedener RAID-Levels
                        2.2.1. RAID Level 10
                        2.2.2. RAID Level 53
                        2.2.3. RAID Level 0+1
                2.3. Kosten
                2.4. Performanz-Vergleich
                2.5. Nachteile/Probleme
                2.6. Alternativen
        3. Die Praxis - ein Beispiel
                3.1. Gegebenheiten
                3.2. Planung
                3.3. Hardware-Einbau
                3.4. Software-Konfiguration
                        3.4.1. Kernel-Konfiguration
                        3.4.2. Konfiguration des RAIDs
                3.5. Inbetriebnahme
                3.6. Last
        Literatur

1. Einführung

1.1. Motivation

Schon in den achtziger Jahren zeigte sich, dass Prozessoren, Arbeitsspeicher und Busse sich schneller entwickeln würden als Festplattensysteme, die um 1980 als Massenspeicher für große Datenmengen aufkamen. Es war absehbar, dass Plattenspeicher über kurz oder lang zum Flaschenhals für den Datendurchsatz zu Prozessor und Speicher würden.

Ein weiteres Problem der Plattenspeicher ist ihre Verfügbarkeit: Aufgrund ihrer Empfindlichkeit gegenüber Alterung, äußerer Gewalteinwirkung und Verschleiß sind sie anfällig für physikalische Schäden, die permanenten und eventuell existenzbedrohlichen Datenverlust zur Folge haben können.

Des Weiteren waren (und sind teilweise auch noch heute) Festplattensysteme mit großen Kapazitäten im Preis nicht zu verachten - Preise im fünf- bis sechsstelligen Bereich sind für professionelle Plattenarrays damals wie heute keine Seltenheit.

1.2. Geschichte

Um diese drei Probleme auf einmal zu lösen, verfassten David Patterson, Garth Gibson und Randy Katz an der Berkeley University 1987 "A Case for Redundant Arrays of Inexpensive Disks (RAID)". Sie legten den theoretischen Grundstein für die heutigen RAID-Level-Standards. Die Grundidee ist der Zusammenschluss von mehreren "kleinen" Festplatten zu einem logischen "großen" Festplattenverbund, um so den Gesamtpreis zu senken und die Performanz und ebenso die Zuverlässigkeit zu erhöhen.

1.3. Physikalischer Aufbau von Festplatten

In der Festplatte befinden sich rotierende Scheiben (2/4 Stück = 4/8 Seiten - in Ausnahmenfällen auch 8 Scheiben = 16 Seiten), die sich unter auf Schienen befestigten Köpfen bewegen. Dabei existiert zu jeder Seite der Platten ein Kopf. Die Schienen greifen kammartig zwischen die Platten und lassen sich nur blockweise bewegen - somit auch die Köpfe (s. Abb. 1).

Die Schreib-/Leseköpfe schweben auf einem sehr dünnen Luftkissen über der Oberfläche der Platte (ähnlich einem Luftkissenboot). Dabei dürfen sie diese nicht berühren, d.h. in direkten physikalischen Kontakt mit ihr treten, da es sonst zu einem Headcrash kommt. Da aber Festplatten nach dem Ausschalten nicht mehr rotieren, existiert auch kein Luftkissen mehr und die Köpfe müssen in dafür vorgesehenen Zonen landen. Dies regelt eine Elektronik, welche auf das Ausschalten der Stromversorgung reagiert und die Köpfe in einen Ruhezustand positioniert.

Ein Headcrash kann auftreten, wenn das Gehäuse offen ist und die Luft nicht in der geordneten Bahn bleibt, in der sie das Luftkissen für den Festplattenkopf erzeugt, oder wenn durch Gewalteinwirkung der Kopf die rotierende Scheibe trotz des Luftkissens berührt.


Abb. 1: Schematische Ansicht des Festplatteninnern

Detailliertere Informationen sind unter [HDD] verfügbar.

1.4. Physikalische Fehlerquellen

Da Festplatten aus beweglichen Teilen bestehen, unterliegen sie einem natürlichen physikalischen Verschleiß im Laufe der Zeit. Hinzu kommt die bereits erwähnte Empfindlichkeit gegenüber äußerer Gewalteinwirkung, die zum o. g. Headcrash und damit zum Datenverlust führen kann. Fehler können natürlich auch viel unerwartetere Ursachen haben: Spannungsspitzen in der Stromversorgung, Temperatur, Feuchtigkeit, etc.

Ein RAID-System soll in gewissem Umfang den sicheren Betrieb eines Plattensystems ohne Datenverlust gewährleisten, auch wenn einzelne Festplatten warum auch immer ausfallen.

1.5. Maßzahlen für Verfügbarkeit/Zuverlässigkeit

Für die Verschleißerscheinungen einer Festplatte gibt es Maßzahlen, die Auskunft über die durchschnittliche Lebensdauer einer Festplatte geben sollen. Diese Zahlen kommen meist vom Hersteller und sind ein Maßstab für die Eignung einer Festplatte im Dauerbetrieb, wie es in Serversystemen gefordert ist.

Vom Hersteller wird manchmal die sogenannte MTBF (mean time between failure) angegeben. Sie wird in Stunden angegeben und misst die durchschnittliche Zeit zwischen zwei Ausfällen.

Aussagekräftiger für die Qualität ist jedoch die MTTF (mean time to failure); auch sie ist eine Zahl in Stunden, misst aber die durchschnittliche Zeit bis zum ersten Ausfall. Da Festplatten beim ersten Ausfall in der Regel ausgetauscht werden, um weiteren Ausfällen vorzubeugen, ist sie eher ein brauchbares Maß für die Lebensdauer einer Festplatte als die MTBF.

Das im Vergleich zur MTBF und MTTF vergleichsweise sehr kleine Maß der MTTR (mean time to repair) ist vom Hersteller der Festplatte unabhängig; es ist die durchschnittliche Dauer der Reparatur der Festplatte (in der Regel des Austauschs) und dient der Erfassung der Dauer eines Ausfalls: MTBF = MTTF + MTTR (siehe auch [MTBF]).

Die sich aus allen diesen Werten ergebende Maßzahl ist die MTTDL (mean time to data loss), die durchschnittliche Zeit bis zum Datenverlust. RAID-Systeme dienen u. a. dazu, diese möglichst lange zu verzögern.

Aus diesen Werten können Prognosen für die Verfügbarkeit (engl. "availability") von RAID-Systemen gebildet werden. RAID-Systeme sollen die Verfügbarkeit erhöhen, indem Ausfälle einzelner Festplatten mit geringerer Verfügbarkeit toleriert werden und das System trotzdem weiterarbeitet. Das RAID-System erkennt selbstständig fehlerhaft arbeitende Festplatten und trennt sie vom produktiven Betrieb.

Die Zuverlässigkeit eines RAID-Systems (engl. "reliability") ist ebenfalls deutlich höher als die einzelner Festplatten. Ein RAID-System stellt auch im Fehlerfall einer einzelnen Festplatte sicher, dass der Betrieb innerhalb definierter Grenzen normal fortgeführt werden kann.

Je nach RAID-Level ist nach einem Ausfall einer Festplatte eine Wiederherstellungs-Phase (engl. "recovery") notwendig, um die auf der ausgefallenen Festplatte vorhandenen Daten zu rekonstruieren.

1.6. Performanz: I/O

Ein RAID-System hat nicht nur die Aufgabe der Fehlertoleranz, sondern auch der Steigerung der Performanz durch Parallelisierung von logischen Lese- und Schreibzugriffen auf mehrere physikalische Festplatten. Die einzelnen RAID-Level wenden dabei unterschiedliche Methoden der Lastverteilung an. Sie werden später im Einzelnen beschrieben.

Bei der Installation eines RAID-Systems sollte man sich über das Anwendungsgebiet im Klaren sein, da die Wahl des RAID-Levels maßgeblich für die zukünftige Performanz des Systems sein kann: Werden voraussichtlich viele Zugriffe mit eher kleinem Datenvolumen statt finden oder werden eher bei weniger Zugriffen mehr Daten übertragen?

2. Die Theorie

2.1. RAID - "Redundant Array of Independent/Inexpensive Disks"

Ein RAID-System sorgt im laufenden Betrieb für ständige Kontrolle über die einzelnen Festplatten. Arbeitet eine Festplatte fehlerhaft, wird der RAID-Verbund vom Normalbetrieb in den Fehlerzustand versetzt, die defekte Festplatte vom Betrieb getrennt und evtl. eine Meldung an den Administrator weitergegeben. Ein RAID-System kann aber lediglich gegen Hardware-Probleme eingesetzt werden; menschliche Fehler wie z. B. das versehentliche Löschen einer Datei verhindert es nicht. Backups sind daher immer noch zwingend notwendig!

In der Regel werden Hardware-Lösungen eingesetzt, um ein RAID-System zu realisieren: An eine Controllerkarte werden mehrere Festplatten angeschlossen und von dieser gesteuert. Es gibt aber auch Software-RAID-Lösungen, die sich in der Performanz jedoch mit Hardware-Lösungen nicht messen können.

Allen Lösungen gleich ist, dass der RAID-Verbund für das Betriebssystem mehr oder weniger transparent dargestellt wird, d. h. das Betriebssystem "weiß" nicht, dass es auf einem RAID-System arbeitet.

Im Folgenden wird auf die konkrete technische Umsetzung eines RAID-Festplattenverbunds in einem Computersystem und die damit verbundenen Besonderheiten der einzelnen RAID-Levels eingegangen.

2.1.1. RAID Level 0

Über zwei oder mehr Festplatten werden Schreib- und Leseanforderungen gleichmäßig verteilt. Je mehr Festplatten bzw. Controller angeschlossen werden, desto mehr kann parallelisiert werden und um so besser wirkt sich das auf die Performanz aus. Beste Ergebnisse werden mit einer Festplatte pro Controller erzielt, wobei der Performanzvorteil gegenüber einem Hochleistungs-Controller marginal sein dürfte.

Diese Stufe der Fehlertoleranz verdient den Titel "redundant" eigentlich nicht, denn die Daten werden in keiner Weise redundant gehalten - der Vorteil ist eine enorme Steigerung der Schreib-/Lesegeschwindigkeit. Dem gegenüber steht jedoch der Verlust aller Daten im gesamten Festplattenverbund, wenn auch nur eine Festplatte einen Defekt hat.

Dieses Level eignet sich für Anwendungen, die sehr hohen Datendurchsatz bei vergleichsweise "unwichtigen" Daten erfordern, z. B. Videoschnitt.


Abb. 2: RAID Level 0

2.1.2. RAID Level 1

Wiederum über zwei oder mehr Festplatten mit gerader Anzahl werden Schreibanforderungen und Leseanforderungen verteilt. Ein Schreibvorgang muss zweimal komplett auf jeweils eine Festplatte durchgeführt werden, ein Lesevorgang kann auf die beiden Spiegelplatten gleichmäßig verteilt werden.

Beim Schreiben macht sich lediglich ein geringer Performanzvorteil gegenüber unabhängigen Festplatten bemerkbar, beim Lesen kann der Zugriff aber parallelisiert werden und ist ähnlich schnell wie bei RAID 0.

Jeder Festplatte ist eine Spiegelfestplatte zugeordnet; dadurch ist der Speicherplatzbedarf vergleichsweise hoch im Vergleich zur effektiven Nutzkapazität: Es werden doppelt so viele Festplatten benötigt wie genutzt werden können.

Von einem "Spiegelpaar" darf immer nur eine ausfallen; diese wird nach dem Austausch vom RAID-Controller wieder mit der noch bestehenden Spiegelplatte abgeglichen.

Dieses Level eignet sich für Anwendungen, die hohen Datendurchsatz bei hoher Datensicherheit erfordern; unternehmenskritische oder hochverfügbare Daten werden in der Regel auf diesen Festplattensystemen abgelegt, z. B. die Finanzbuchhaltung oder die Personalverwaltung.


Abb. 3: RAID Level 1

2.1.3. RAID Level 2

In diesem Level wird zwischen Daten- und Parity-Platten unterschieden: Die Daten-Platten enthalten die "echten" Daten, die Parity-Platten enthalten Prüfinformationen, um beim Ausfall einer Platte die Daten auf dieser rekonstruieren zu können. Die Anzahl der Daten-Platten richtet sich nach der Daten-Wort-Größe: Pro Bit wird eine Festplatte benötigt, hinzu kommen die Parity-Platten. Bei einer Wortlänge von 64 Bit werden also 64 Daten-Platten benötigt. Für die Ermittlung des Parity-Codes wird ein Hamming ECC (error correcting code) verwendet. Für 64 Bit werden bei diesem Verfahren 8 Prüfbits benötigt. Die Anzahl der benötigten Festplatten steigt also auf 72.

Der Vorteil des Verfahrens liegt in der Möglichkeit, im laufenden Betrieb Fehler zu korrigieren, ohne Performanzeinbußen hinnehmen zu müssen. Der Nachteil liegt auf der Hand: Die benötigte Anzahl der Festplatten ist in der Praxis nicht zumutbar, zumal in diesen Größenordnungen auch nicht unerhebliche Anschaffungskosten entstünden. Ferner ist die Ausnutzung des Plattenplatzes durch den relativ hohen Bedarf an Parity-Platten nicht sehr effizient.

Dieses RAID-Level existiert daher nur in der Theorie, es gibt keine kommerzielle Implementation dieser Lösung.


Abb. 4: RAID Level 2

2.1.4. RAID Level 3

Ein speicherplatzsparenderes Parity-Verfahren wird in diesem Level mit der Elementaroperation XOR verwendet: Eine Schreibanforderung wird in Abschnitte von der Größe einer definierten "chunk-size" unterteilt und auf zwei oder mehr Daten-Platten verteilt. Eine zusätzliche Parity-Festplatte nimmt das Prüfbit für zwei auf den Daten-Platten geschriebene Bits auf.

Durch die Verwendung einer Elementaroperation zur Ermittlung des Prüfbits kann hiermit eine recht gute Schreib-/Leseleistung erzielgt werden. Die Festplattenausnutzung ist weitaus effizienter als beim RAID 2.

Controller für dieses RAID-Level sind komplizierter gebaut als für die vorhergehenden RAID-Levels; bei einer Softwarelösung wird vergleichsweise viel Rechenzeit für die Parity-Bit-Berechnung aufgewendet. In der Praxis hat sich außerdem gezeigt, dass die Parity-Festplatte in Zeiten hoher Last zum Flaschenhals wird, da bei jedem Schreibzugriff das Parity-Bit überprüft bzw. geschrieben werden muss. Ausfallen darf aber lediglich eine Festplatte gleichzeitg.

Üblicherweise werden mit diesem RAID-Level Anwendungen mit relativ hohem Datendurchsatz betrieben, z. B. Bildverarbeitung.


Abb. 5: RAID Level 3

2.1.5. RAID Level 4

Dieses Level stellt lediglich eine Erweiterung zu Level 3 dar; der einzige Unterschied besteht darin, dass die Parity-Berechung nicht mehr bit-weise, sondern block-weise gemäß der "chunk-size" erfolgt. Somit können größere Blöcke mit einer Schreibanforderung abgearbeitet werden.


Abb. 6: RAID Level 4

2.1.6. RAID Level 5

Um nun noch den Flaschenhals aus RAID 3 bzw. 4 zu entfernen, werden die Parity-Daten nicht mehr auf eine speziell dafür vorgesehene Festplatte geschrieben, sondern zusammen mit den Daten auf alle Festplatten verteilt. Damit kann eine bessere Lastverteilung auf die Festplatten erzielt werden.

Dieses RAID-Level ist in der Praxis meist erste Wahl - guter Performanz stehen angemessene Kosten bei guter Verfügbarkeit gegenüber. Heutige RAID 5-Implementationen können sehr fein an die entsprechenden Bedürfnisse angepasst werden: Die "chunk-size" ist frei wählbar, eine sog. spare disk, die bei Ausfall einer Festplatte sofort einspringt, kann bereits eingebaut und auf den Betrieb vorbereitet werden, so dass die MTTR minimal wird.

Typisches Einsatzgebiet sind File-, Web- oder Datenbank-Server.


Abb. 7: RAID Level 5

2.1.7. RAID Level 6

Wem eine Parity-Einheit nicht genügt, der kann zu diesem RAID-Level greifen: Es werden hier zwei Parity-Einheiten angelegt, so dass im Gegensatz zu RAID 5 zwei Festplatten ausfallen dürfen, ohne dass ein Datenverlust auftritt.

Nachteilig hierbei ist die stark erhöhte Rechenzeit, die benötigt wird, um auch die zweite Parity-Einheit zu berechnen. Die Schreibgeschwindigkeit ist daher deutlich vermindert, aber die Fehlertoleranz erhöht. Mir ist jedoch keine kommerzielle Implementierung bekannt.


Abb. 8: RAID Level 6

2.1.8. RAID Level 7

Für hochperformanten hochverfügbaren Bedarf gibt es diese proprietäre Lösung der Storage Computer Corporation mit controller-eigenem Echtzeitbetriebssystem für das Caching der Daten. Für den Datentransport wird ein sogenannter X-Bus eingesetzt, der sich durch hohe Performanz auszeichnet.

Wesentliche Merkmale sind asynchrone Schreibzugriffe, deutliche Performanzsteigerung durch intelligentes Caching durch das Realtime-OS, eine kurze Garantiezeit, der hohe Preis und die Nicht-Wartbarkeit durch den Kunden: Der Kunde hat keinen Zugriff auf die Konfiguration dieses RAID-Systems, sondern ist auf die Storage Computer Corporation angewiesen.


Abb. 9: RAID Level 7

2.2. Kombinationen verschiedener RAID-Levels

Die weiteren RAID-Levels sind lediglich Kombinationen der bisher beschriebenen RAID-Levels; grundsätzlich sind aber alle Kombinationen denkbar.

In einem Software-RAID lässt sich eine Kombination verschiedener RAID-Levels über die Konfiguration natürlich wesentlich leichter realisieren als in einem Hardware-Controller, die normalerweise nur die Standard-RAID-Level "kennen".

2.2.1. RAID Level 10

Mehrere "kleine" RAID 1-Plattenverbände werden per RAID 0 zu einem "großen" zusammengeschlossen; dafür werden mindestens vier Festplatten benötigt. Damit kann die Datensicherheit eines RAID 0 durch die darunterliegende Spiegelung enorm verbessert werden. Eine zusätzliche Performanzsteigerung macht sich durch die Verteilung der Zugriffe auf die Spiegelplatten bemerkbar.

Dieses RAID-Level wird üblicherweise bei unternehmenskritischen hochperformanten Datenbanken verwendet.


Abb. 10: RAID Level 10

2.2.2. RAID Level 53

Folgte man der Logik, müsste dieses Level eigentlich "30" oder "03" heißen, denn ähnlich wie bei RAID Level 10 wird ein RAID Level 0 über mehrere "kleine" RAID Level 3 gefahren. Diese Lösung ist allerdings recht teuer und wird daher in der Praxis nur selten eingesetzt.


Abb. 11: RAID Level 53

2.2.3. RAID Level 0+1

Im Gegensatz zu RAID Level 10 wird hier ein RAID 1 über Paare von RAID Level 0-Plattenverbänden gefahren; allerdings ist hier pro RAID Level 1 nur ein einziger Plattenausfall zu verkraften, da dann bereits ein RAID Level 0 komplett ausfällt und somit ungünstigerweise gleich beide RAID Level in den Fehlerzustand geraten. Der relativ hohe Preis macht diese Konfiguration für die Praxis untauglich.


Abb. 12: RAID Level 0+1

2.3. Kosten

RAID-Systeme bieten eine recht flexible Möglichkeit der Preisgestaltung von der Billig-Lösung als Software-RAID bis hin zu High-End-Geräten als Hochverfügbarkeitslösung für unternehmenskritische Anwendungen. Für ein Software-RAID werden lediglich Festplatten zu handelsüblichen Preisen benötigt, die Software ist für viele Betriebssysteme kostenlos erhältlich oder bereits mitgeliefert. Günstige Hardware-Controller sind ab 50 Euro zu bekommen, High-End-Controller können aber auch vierstellige Preise haben. Letztendlich muss von Situation zu Situation abgewägt werden, wieviel die Daten "wert" sind, die auf dem System gespeichert werden sollen.

Die Hauptintention eines RAID-Systems ist die höhere Verfügbarkeit und Zuverlässigkeit eines Verbunds vergleichsweise günstiger Festplatten gegenüber der niedrigeren Verfügbarkeit und Zuverlässigkeit einer einzigen großen hochverfügbaren Festplatte bei gleichzeitig geringeren Anschaffungs- und Folgekosten.

2.4. Performanz-Vergleich

Nahezu alle RAID-Systeme, die heute auf dem Markt sind, verwenden Caching zur Performanz-Steigerung. Ohne Caching sind alle RAID-Levels deutlich zu langsam für den produktiven Einsatz.

RAID-Levels, die mit Parity arbeiten, sind vor allem beim Schreiben natürlich langsamer als RAID-Levels ohne Parity. Heutige Controller verfügen über ausreichend "Intelligenz", um auch z. B. einen RAID Level 5-Plattenverbund über die Schreibgeschwindigkeit einzelner Platten zu bringen.

2.5. Nachteile/Probleme

RAID-Systeme müssen überwacht werden, um im Fehlerfall die defekte(n) Festplatte(n) austauschen zu können. Nur so kann ein dauerhafter fehlertoleranter Betrieb gewährleistet werden. Mit den bereits erwähnten "spare disks" als bereits eingebaute Ersatz-Festplatten kommt man aber auch hier schon recht weit.

In Plattenverbänden erhöht sich die Ausfallwahrscheinlichkeit einer Festplatte, je mehr Festplatten im Verbund sind. Eine MTTF einer einzelnen Festplatte von z. B. 500.000 Stunden (ca. 57 Jahre) verringert sich in einem Verbund von z. B. 100 Festplatten auf 5.000 Stunden (ca. 7 Monate), d. h. im Schnitt muss in diesem Verbund eine defekte Festplatte alle 7 Monate ausgetauscht werden.

2.6. Alternativen

Optische Medien: Deren Speicherdichte ist mittlerweile nicht mehr so groß, dass sie sich gegenüber Festplatten lohnen würden. Die Auswahl der am Markt verfügbaren Produkte ist nicht sehr groß, dafür sind die Produkte recht teuer.

Magnet-Bänder: Sind für Backups sehr gut geeignet, jedoch für den Einsatzzweck, den RAID-Systeme erfüllen, ungeeignet: Ein Echtzeitzugriff ist praktisch kaum möglich, die Performanz kann sich mit Festplatten nicht messen.

Linear Mode: Ähnelt sehr stark RAID Level 0, verteilt die Zugriffe jedoch nicht, sondern "befüllt" die Festplatten sequenziell. Damit sind die Nachteile eines RAID 0 gegeben, da alle Daten verloren gehen, wenn eine Platte ausfällt, aber der Performanz-Vorteil bleibt durch die Sequenzialität aus.

3. Die Praxis - ein Beispiel

3.1. Gegebenheiten

Wir befinden uns in einer Studenten-WG, deren drei Bewohner in der überwiegenden Mehrzahl zu den technisch begeisterten Menschen gehört. In diesem Umfeld ist der Tatendrang groß und das Budget klein. Es soll ein File-Server aufgebaut und installiert werden, der teilweise vorhandene, teilweise neu hinzugekaufte Festplatten aufnimmt und gegen Festplattenausfälle gewappnet sein soll, da aus Kostengründen kein Backup gefahren werden kann.

Vorhanden sind IDE-Festplatten mit 2 x 20 GB und 3 x 40 GB. Damit die Kapazität noch eine Weile reicht, wurden 2 80 GB-Festplatten sowie ein IDE-Controller hinzugekauft.

3.2. Planung

Die Entscheidung fiel auf RAID Level 5, um maximale Kapazitätsausbeute zu haben. Hardware-Controller für RAID 5 über mehr als vier Festplatten und vor allem über mehr als einen Controller hinweg sind für eine Studenten-WG nicht rentabel, daher wurde beschlossen, das RAID-System per Software unter Linux zu realisieren. Alle RAID Levels benötigen jedoch gleich große "Einheiten"; es wäre daher entweder notwendig, das Software-RAID auf 20 GB-Einheiten zu betreiben oder aber 2 x 20 GB und 3 x 40 GB "intelligent" zu 80 GB-Einheiten zusammenzufassen.

Die erste Möglichkeit scheidet aus, da ein RAID 5 nur eine defekte Einheit verkraftet. Wenn aber nun eine 40 GB- oder ein 80 GB-Festplatte ausfällt, sind gleich zwei oder vier Einheiten defekt, und das RAID ist kaputt.

Bei einem Software-RAID lassen sich mehrere RAID-Levels verschachteln; so haben wir über die zwei 20 GB-Platten und eine 40 GB-Platte ein RAID 0 gelegt und über die beiden übrigen 40 GB-Platten noch einmal. Es stehen nun vier 80 GB-Einheiten zur Verfügung, die als RAID 5 im Verbund stehen. Die echte Plattenkapazität ist ca. 320 GB, die Nutzkapazität ca. 240 GB. Für das bessere Verständnis: s. Abb. 13.


Abb. 13: Schema des RAID-Verbunds

3.3. Hardware-Einbau

Da es nicht ganz einfach ist, von einem RAID-System unter Linux zu starten, wurden noch zwei 1 GB SCSI-Festplatten als Boot-Platten eingebaut, die in keinem RAID-Verbund laufen, sondern nächtlich dupliziert werden, um Konfigurationsfehler schnell wieder korrigieren zu können.

Es war notwendig, das Gehäuse etwas anzupassen, um neun Festplatten einbauen zu können, s. Abb. 14 und 15.


Abb. 14: Innenausbau des Towers


Abb. 15: Selbstgebaute Erweiterung

3.4. Software-Konfiguration

Die Wahl des Betriebssystems fiel nicht schwer - klar, Linux. Hier wurde eine Mandrake 8.0-Distribution verwendet.

3.4.1. Kernel-Konfiguration

Seit Kernel 2.0.34 wird RAID Level 0, RAID Level 1 und RAID Level 5 unterstützt, man muss lediglich die gewünschten RAID Levels einschalten:
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID5=y
Die RAID-Funktionalität kann (noch) nicht als Kernel-Modul eingebunden werden, daher kann der Kernel erst nach der kompletten Neukompilierung und Installation ein Software-RAID steuern. Um dem Kernel zu sagen, wie er das zu tun hat, gibt es die "raidtools" für Linux.

Für weitere Informationen zum Thema Kernel kompilieren und Kernel-Module sei auf die entsprechenden HOWTOs verwiesen ([KernelHOWTO], [ModulesHOWTO]).

3.4.2. Konfiguration des RAIDs

Ausgehend von einer fehlerfreien Hardware-Konfiguration haben wir im System nun diese Platten zur Verfügung (/proc/partitions):
major minor  #blocks  name
   8     0    1027517 sda
  34     0   40031712 hdg
  34    64   39082680 hdh
  33     0   80043264 hde
  33    64   80043264 hdf
  22     0   19938240 hdc
  22    64   40021632 hdd
   3     0   19925880 hda
Geräte mit dem Präfix "sd" sind SCSI-Festplatten, das Präfix "hd" steht für (E)IDE-Geräte.

Die "major"- und "minor"-Zahlen dienen der Identifikation eines Gerätes für Erzeugung eines Devices in /dev. Sie stellen eine Art Adressen dar und haben ansonsten keine weitere Bedeutung.

Die zweite SCSI-Festplatte sdb fehlt in dieser Darstellung, das stört aber nicht weiter, da lediglich die IDE-Festplatten zum RAID-Verbund gehören sollen. Auf diesen wird nun je eine Partition angelegt, die die gesamte Festplatte ausfüllt. Nicht alle Festplatten haben die exakt passende Kapazität; es wurde etwas Mathematik betrieben, um eine bestmögliche Nutzung der Festplattenkapazität zu erzielen. Der "überschüssige" Platz wurde teilweise für swap verwendet oder nochmals als RAID 0 zusammengefasst und für das Verzeichnis /tmp verwendet.

Somit ergibt sich diese Partitionierung:

major minor  #blocks  name
  34     1   40031711 hdg1
  34    65   39082679 hdh1
  33     1   79114176 hde1
  33     2     146664 hde2
  33     3     782423 hde3
  33    65   79114176 hdf1
  33    66     144585 hdf2
  33    67     777068 hdf3
  22     1   19938239 hdc1
  22    65   39255679 hdd1
  22    66     146664 hdd2
  22    67     619288 hdd3
   3     1   19920599 hda1
Nun die eigentliche RAID-Konfiguration (/etc/raidtab):
raiddev /dev/md0
        raid-level      0
        nr-raid-disks   3
        persistent-superblock   1
        chunk-size     4
        device          /dev/hda1
        raid-disk       0
        device          /dev/hdc1
        raid-disk       1
        device          /dev/hdd1
        raid-disk       2

raiddev /dev/md1
        raid-level      0
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      4
        device          /dev/hdg1
        raid-disk       0
        device          /dev/hdh1
        raid-disk       1

raiddev /dev/md2
        raid-level      5
        nr-raid-disks   4
        nr-spare-disks  0
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      128
        device          /dev/md0
        raid-disk       0
        device          /dev/md1
        raid-disk       1
        device          /dev/hde1
        raid-disk       2
        device          /dev/hdf1
        raid-disk       3

raiddev /dev/md3
        raid-level      0
        nr-raid-disks   3
        persistent-superblock 1
        chunk-size      4
        device          /dev/hdd3
        raid-disk       0
        device          /dev/hde3
        raid-disk       1
        device          /dev/hdf3
        raid-disk       2
Der erste Abschnitt weist den Kernel an, ein RAID Level 0 über hda1, hdc1 und hdd1 mit 4 KB chunk-size als /dev/md0 anzulegen. Das sind die beiden 20 GB- und eine 40 GB-Festplatte.

Der zweite Abschnitt definiert ebenso ein RAID Level 0 über hdg1 und hdh1 mit 4 KB chunk-size als /dev/md1. Das sind die beiden übrigen 40 GB-Platten.

Der dritte Abschnitt ist der interessante: Hier wird das RAID Level 5 über die bestehenden RAIDs md0 und md1 sowie über hde1 und hdf1 gelegt. So entsteht mit einer 128 KB chunk-size und dem "left-symmetric"-Paritätsalgorithmus ein RAID 5-Plattenverbund, hier ohne spare disk.

Der vierte Abschnitt ist die erwähnte Zusammenfassung der "Reste" als RAID 0. Der andere Teil, der dem Swap-System zur Verfügung steht, wird automatisch wie ein RAID 0 behandelt und sieht so aus (/proc/swaps):

Filename                        Type            Size    Used    Priority
/dev/sda5                       partition       44456   860     0
/dev/hdd2                       partition       146656  860     0
/dev/hde2                       partition       146656  864     0
/dev/hdf2                       partition       144576  872     0

3.5. Inbetriebnahme

Zunächst muss jedes einzelne RAID mit "mkraid /dev/mdX" angelegt und per "raidstart /dev/mdX" gestartet werden. Da md2 von md0 und md1 abhängig ist, müssen diese natürlich zuerst gestartet werden, bevor md2 initialisiert werden kann. Anschließend können md2 und md3 wie eine normale Festplatte verwendet werden: Dateisystem anlegen, mounten, etc.

3.6. Last

Beim Software-RAID Level 5 startet der Kernel einen zusätzlichen Prozess, der sich um das RAID Level 5 kümmert. Unter der Last des Festplatten-Benchmarkprogramms "bonnie" beobachtet man interessanterweise, dass bonnie selbst ständig über 50 % Prozessorlast erzeugt, während der RAID 5-Prozess zwischen 20 % und 30 % bleibt, obwohl verschiedene RAID Levels verschachtelt wurden.

Literatur

  [Universität Karlsruhe] [Institut für Technische Informatik] [E-Mail an Autor]  
Letzte Änderung: 2002-10-14 13:27:53