RAID

Bei CPUs und Hauptspeichern verdoppelt sich die Leistung etwa jedes Jahr. Massenspeicher verdoppeln ihre Kapazität nur etwa alle zwei Jahre, die Positionierzeit halbiert sich gar nur alle sieben Jahre. Plattenlaufwerke hinken also immer mehr der Technologiekurve der CPUs hinterher.
Man benötigt deshalb Techniken, die es auf Basis der sich langsamer entwickelnden Plattentechnologie dennoch schaffen, mit der Prozessorgeschwindigkeit und dem Datenhunger der heutigen Systeme Schritt zu halten - durch erhöhte Zugriffsgeschwindigkeitund erhöhte Kapazität.
Typische MTBF-Zeiten (MTBF = Mean Time Between Failure = durchschnittliche Zeit zwischen zwei Ausfällen) von Laufwerken liegen heute bei über 500.000 Stunden. Bei 100 Laufwerken an einem Rechner muss man mit einem Ausfall pro Halbjahr rechnen. Selbst wenn man davon ausgeht, dass die Zuverlässigkeit der Laufwerke in den nächsten Jahren weiter steigt, ist dieser Zustand nicht tragbar. Es werden also Systeme benötigt, die ausfallsicher sind.

Unter dem Oberbegriff RAID fasst man Technologien zusammen, die mehrere Laufwerke zu grösseren, teilweise auch ausfallsicheren Gesamtsystemen zusammenpacken. RAID steht dabei für Redundant Array of Independent Disks, wobei oft statt "independent" auch "inexpensive" gelesen wird.
Redundant = ausfallsicher bedeutet, dass der Ausfall eines Einzellaufwerks weder zu einem Ausfall des Gesamtsystems noch zu Betriebsunterbrechung oder gar zu Datenverlust führt. RAID schliesst oft verwendete Technologien wie Mirroring (d. h. Spiegelung von zwei oder mehreren Laufwerken an einem Controller), Duplexing (dito, aber mit zwei getrennten Controllern) und Striping (Zusammenfassen von mehreren Laufwerken als logische Einheit und blockweises Verteilen der Daten auf diese Laufwerke) ein.
Unterschiedliche Level von RAID werden in der Literatur diskutiert. Die Bezeichnung Level in der RAID-Bezeichnung ist eigentlich missverständlich, denn RAID-Level 1 baut keinesfalls auf RAID-Level 0 auf. Statt Level sollte man eigentlich besser Typ sagen.
Bevor auf die einzelnen RAID-Level genauer eingegangen wird, folgen einige grundlegende Überlegungen zu Plattenzugriffen, denn die Änderung der Performance beim Schritt vom Einzellaufwerk zu RAID ist stark abhängig von der Anwendung:
Wichtig ist der Mix zwischen Schreib- und Lesezugriffen und die durchschnittliche Länge eines einzelnen Transfers.
Bei einem Einzelplattenlaufwerk ist ein Lesezugriff (Caches, Read-ahead-Buffer und andere Techniken zur Performancesteigerung sollen vorläufig ausser Betracht bleiben) gleich schnell wie ein Schreibzugriff. Dies ist bei Plattenarrays keinesfalls so und auch von Level zu Level unterschiedlich.
Geschwindigkeitsunterschiede gibt es auch von kurzen (meist einer oder ganz wenige Blöcke) zu langen Requests (meist mehrere Hundert Blöcke). Der erste Typ kommt vor allem in Datenbankanwendungen, Transaction Processing Systemen und kommerziellen Multiuser-Anwendungen vor. Der zweite Typ ist in der Regel bei Bildverarbeitung, Einsatz von Supercomputern oder technisch/wissenschaftlicher Datenerfassung zu finden. Jedes der weiter unten diskutierten RAID-Konzepte hat eine andere Charakteristik bei langen bzw. kurzen Requestlängen.
RAID ist keine Lösung für alle Arten von Problemen mit dem Plattendurchsatz. RAID ist keinesfalls immer schneller als der Einsatz von (konventionell genutzten) Einzellaufwerken. Auch beim Einsatz einer der nachfolgend beschriebenen RAID-Typen sollte man die Aufteilung der Daten optimieren. Aus der Regel, dass man auf wenige Daten sehr häufig und auf die meisten Daten sehr selten zugreift, folgt: Sinnvoll ist ein hierarchisches System mit Halbleiterspeicher (z. B. RAM-Disk) für ständig benutzte Daten, ein sehr schneller Massenspeicher (eventuell gespiegelt) für oft genutzte, einen durchschnittlich schnellen und grossen Massenspeicher (z. B. RAID) für weniger oft genutzte Daten und einen Archivspeicher (z. B optische Platten mit automatischem Wechsler) für selten benutzte Daten.

RAID-Level 0
Dieser Typ von RAID steht für Striping. Bei diesem Verfahren werden mehrere kleinere Laufwerke zu einem grossen logischen Laufwerk zusammengefasst. Der Striping-Faktor sagt dabei aus, wie gross die Stücke sind, welche jeweils auf eines der Laufwerke geschrieben werden. Sind die Stücke sehr klein (typisch ein Byte), so erreicht man unabhängig von der Länge des Lese- oder Schreibrequests eine wesentliche Erhöhung der Transferrate, da alle Laufwerke in einem RAID-0-Set praktisch gleichzeitig transferieren.
Bei kurzen Schreibrequests (z. B. Einzelblöcken) hat diese Technik Nachteile: Kürzt man die physikalische Länge der Blöcke auf der Platte (bei 512 Byte Blöcken und vier Laufwerken z. B. nur 128 Bytes lang), vermindert sich die nutzbare Kapazität durch den zusätzlichen Platz für Blockheader. Lässt man die Länge der physikalischen Blöcke bei der Standardlänge, hat man zwar keinen Kapazitätsverlust, aber es muss beim Schreiben eines einzelnen Blocks erst auf allen Platten jeweils derjenige physikalische Block gelesen werden, in dem Teile des zu schreibenden Blocks stehen. Die Teilinformation muss ersetzt werden, dann erst können alle beteiligten Blöcke wieder auf die Platten zurückgeschrieben werden.
RAID-0 mit kleinem Striping-Faktor bietet den Vorteil der hohen Transferrate beim Schreiben und Lesen von langen Requests, hat aber wesentliche Nachteile in der Leistung bei kurzen Requests.
Vergleicht man RAID-0 nicht mit einem (entsprechend grösseren) Einzellaufwerk, sondern mit mehreren kleineren Laufwerken, die ja kurze Requests überlappt abarbeiten können, wird der Nachteil von RAID-0 noch deutlicher.

Wählt man den Striping-Faktor nun gross (mehrere Blöcke), erreicht man, dass sowohl die Schreib- als auch die Leseperformance bei kurzen Transfers mit der eines Einzelplattenlaufwerks vergleichbar bleibt. Auch ist es möglich, mehrere kurze Requests gleichzeitig auf unterschiedlichen Platten abzuarbeiten.
In beiden Fällen bleibt jedoch der Nachteil, dass bei Ausfall eines einzelnen Laufwerks auf die gesamten Daten nicht mehr zugegriffen werden kann. RAID-0 (Striping) ist eigentlich kein RAID (keine erhöhte Datensicherheit).

Host-based Striping gibt es bei vielen Betriebssystemen als Softwarelösung oder auch eingebaut im Plattencontroller. Da die Plattenlaufwerke vom Controller oftmals nur über einen Datenkanal angesprochen werden, kommt bei einer Controllerlösung meist der Vorteil der höheren möglichen Datenübertragung nicht zum Tragen, da die Requests auf den einzelnen Laufwerken doch sequenziell und nicht parallel abgearbeitet werden.

RAID-Level 1
RAID-1 bedeutet Mirroring. Hier werden alle Daten einer Platte auf alle weiteren Platten des RAID-Sets geschrieben. Vorteil: Bei Ausfall einer Platte bleiben die Daten weiter zugreifbar. Die Leistung beim Schreiben bleibt der einer Einzelplatte bzw. RAID-0 gleich (solange die Platten auf die Kanäle verteilt sind), geht man davon aus, dass die zusätzliche Rechnerbelastung durch doppeltes Schreiben nicht zählt.
Die Leseleistung verdoppelt sich im besten Fall, da jetzt die Requests auf zwei Plattenlaufwerke (bzw. zwei Sets) aufgeteilt werden können, die unabhängig voneinander lesen können.
Allerdings sind die Kosten für RAID-1 hoch: Nur die Kapazität einer Festplatte des verfügbaren Platzes steht für die Originaldaten zur Verfügung, die Rest wird durch redundante Daten verbraucht. Jedoch ist RAID-1 einfach zu implementieren.
Mirroring (von Einzelplatten) gibt es als Controller-Lösung oder als Softwarelösung für unterschiedliche Betriebssysteme.

RAID-Level 0+1
RAID-0+1, manchmal auch RAID-10 genannt, vereinigt Mirroring und Striping. Hier wird tatsächlich die Hälfte der Gesamtkapazität gespiegelt, wobei sich die hohe Sicherheit der Spiegelung mit der Performance von RAID-0 verbindet. In den meisten Fällen ist dies die schnellste RAID-Lösung, aber natürlich gilt auch hier das Argument von RAID-1: Die Kosten sind, da doppelt so viele Platten verwendet werden, sehr hoch.

RAID-Level 4
Während Ausfallsicherheit bei RAID-1 und 0+1 doppelte Plattenkapazität erfordert - und bei RAID-0 gar nicht gegeben ist - verwendet RAID-4 Parity, um die Daten zu sichern. Zu jeweils x Festplatten, die nach den Striping-Verfahren beschrieben werden, kommt lediglich eine zusätzliche Parityplatte, deren n-tes bit jeweils das Paritybit zu den x n-ten bits der restlichen Platten enthält. Fällt eine Festplatte aus, kann aus dieser Parityplatte zusammen mit den Daten der übrigen Platten bit für bit der Inhalt der defekten Platte rekonstuiert werden. Das Schreiben von Daten auf einer Platte erfordert allerdings immer auch das Ändern der Parityplatte - beide Blöcke müssen zuerst gelesen und aus ihnen und den neuen Daten der neue Paritywert berechnet werden. So ist die Performance geringer als bei RAID-0 oder -1.

RAID-Level 5
Bei RAID muss bei jedem Schreibzugriff auf die Parity-Disk zugegriffen werden. Dieses Laufwerk wird damit der Flaschenhals in diesem System. RAID-5 verteilt Parity und Daten blockbereichsweise auf alle Laufwerke. Jedes Laufwerk ist damit für einen bestimmten Blockbereich Parity-Laufwerk. Lesezugriffe werden etwas schneller, weil sie auf noch mehr Laufwerke verteilt werden können.
Bei kurzen Transfers ist aber auch RAID-5 auf der Basis von Zugriffen pro Zeiteinheit pro Megabyte einem Einzellaufwerk weit unterlegen.

Andere RAID-Level
Neben den oben genannten RAID-Leveln, die in einer Studie der Universität Berkeley erstmals beschrieben wurden und sich als Quasi-Standard etabliert haben, gibt es noch eine Reihe von herstellerspezifizierten RAID-Level, die aber in der Regel nur Modifikationen der o. g. RAID-Level darstellen.

Wo wird RAID nun implementiert? Es gibt zwei Möglichkeiten: entweder in einem Controller, der zwischen dem Rechner und den Laufwerken sitzt (als Karte im Rechner oder in einer separaten Box) oder im Hostrechner selbst. Vorteil der ersten Lösung: keine zusätzliche Belastung des Rechners durch die Verwaltung von RAID. Vorteil der zweiten Lösung: Da in diesem Falle nicht alle Daten durch den Flaschenhals RAID-Controller zum Hostrechner müssen, kann eine höhere Datentransferrate durch die gleichzeitige Verwendung mehrerer Übertragungspfade erreicht werden.
Eine Reihe von Herstellern (sowohl Plattenlaufwerks- als auch Controllerhersteller) bieten RAID-Implementierungen an. Diese Implementierungen unterscheiden sich in folgenden technischen Eigenschaften:

Einfachere Implementierungen schliessen mehrere Laufwerke an einen SCSI-Bus an und fassen diese unter Verwendung von einem RAID- oder RAID-ähnlichen Konzept zusammen. Andere Implementierungen haben pro Plattenlaufwerk einen eigenen Controller, sie erhöhen dadurch die Ausfallsicherheit, da selbst bei Ausfall des Controllers die Daten weiter zugreifbar bleiben.
Laufwerke können fest eingebaut werden. Es ist jedoch auf jeden Fall besser, wenn auch teurer, die einzelnen Laufwerke so einzubauen, dass sie im laufenden Betrieb ausgewechselt werden können und somit der Datenzugriff nicht unterbrochen werden muss (Hot-Swap). Gute RAID-Systeme erlauben beim Austausch eines Laufwerks das Rekonstruieren der Daten für dieses Laufwerk während des normalen Betriebs.

Einen wichtigen Einfluss auf die Ausfallsicherheit von RAID-Systemen haben auch andere Elemente: Hängen alle Laufwerke an einem einzigen Power-Supply, ist die Ausfallwahrscheinlichkeit (aber nicht notwendigerweise die Wahrscheinlichkeit des Datenverlustes) höher als bei getrennten Stromversorgungen für jedes einzelne Laufwerk oder einer anderen, redundanten Art der Stromversorgung. Natürlich sollten dann auch Kabel, Lüfter, Controller und Rechneranschlüsse doppelt ausgeführt werden, um den Single Point of Failure auszuschliessen.

Und noch eine Warnung: Bei allen Betrachtungen von Ausfallhäufigkeiten und Ausfallwahrscheinlichkeiten geht man davon aus, dass Laufwerksausfälle statistisch unabhängig voneinander vorkommen. In der Praxis können externe Ereignisse (Blitzschlag, Stromspitzen) eintreten, die zu einer höheren punktuellen Ausfallwahrscheinlichkeit - von mehr als einem Laufwerk - führen können, so dass die MTBF-Überlegungen für RAID-Systeme teilweise praxisfremd sind.
Und selbst bei einem RAID-System mit unendlich hoher durchschnittlicher Zeit zwischen zwei Ausfällen darf man das Backup nicht vergessen: Vor einem falschen Delete-Kommando oder einem Softwarefehler, der Daten zerstört, schützt auch RAID nicht. Und Würmer, Trojanische Pferde, Viren und Bomben werden wohl auch nicht aussterben oder Respekt gegenüber RAID entwickeln.

Fazit:
RAID-Systeme dienen der verbesserten Verfügbarkeit von Daten und nicht der Performanceverbesserung. Sie sind in der Regel bei der Geschwindigkeit Einzellaufwerken unterlegen. Sinnvoll ist der Einsatz von RAID-Level 0 bis 5 zum Speichern von grossen Datenmengen, auf die entweder seltener oder nur mit langen Transfers zugegriffen wird. RAID bietet hier eine kostengünstige Möglichkeit, ausfallsichere Massenspeicher zu konfigurieren. Für häufiger benutzte Daten empfiehlt sich weiterhin der Einsatz von (gespiegelten) Einzellaufwerken, für extrem häufig verwendete Daten hingegen der Einsatz von RAM-Disks, die, vorausgesetzt die Anzahl der Schreibzugriffe ist nicht zu hoch, mit normalen Winchesterplatten gespiegelt werden können. Spiegeln sollte man wegen der geringeren Rechnerbelastung in der Regel im Controller bzw. Hostadapter. Braucht man die hohe Transferrate langer Transfers, sollte Striping mehrere Datenpfade zum Rechner zulassen und deswegen Host-based sein. Hardware-RAID-Systeme werden in den Kapiteln Externe RAID-Systeme von transtec und SCSI/IDE RAID-Systeme angeboten. Interne Hardware RAID-Systeme mit PCI-Controllern sind in den Kapiteln PCI RAID-Controller con ICP vortex und MegaRAID PCI-RAID-Controller von AMI zu finden.
Auf jeden Fall sollte ein RAID (und der Rechner) an eine USV-Anlage (Näheres dazu im Kapitel USV ) angeschlossen werden, da sonst im Fall eines Stromausfalls der eigentliche Sinn, die absolute Datenverfügbarkeit, nicht mehr erfüllt ist.

RAID-Systeme für Windows NT

Bei Windows NT ergeben sich vielfältige Möglichkeiten, ein RAID System aufzubauen. Folgende Konfigurationen sind möglich:
- Software RAID
- Interne Hardware RAID mit PCI-RAID-Controller
- Externe Hardware RAID

Software RAID
Windows NT bietet bereits standardmässig die Möglichkeit, mehrere Plattenlaufwerke zu einem RAID-System zusammenzufassen. Hierbei brauchen lediglich die Festplatten an einen SCSI-Hostadapter intern oder extern angeschlossen zu werden. Die Konfiguration wird dann über Windows NT vorgenommen. Diese Lösung ist zwar preisgünstig und einfach einzurichten, hat jedoch auch Nachteile. Vor allem, wenn sehr grosse Datenmengen übertragen werden bzw. wenn Zugriffe parallel von mehreren Usern (beispielsweise in einem Netz) auf das RAID erfolgen hat es Auswirkungen auf die Performance des NT-Rechners. Hierbei muss der gesamte Rechenaufwand (Verteilen der Daten auf die einzelnen Platten und Berechnen der Parity) von der CPU des Rechners aufgebracht werden. Des Weiteren wird das Betriebssystem des Rechners über eine Bootplatte geladen, die nicht redundant sein kann, da die RAID-Konfiguration erst nach dem Laden des Betriebssystems zur Verfügung steht. Auf der Bootplatte befinden sich auch alle Konfigurationsdaten für den RAID-Verband. Fällt die Bootplatte aus, ist das RAID System nicht mehr operabel. Diesem Nachteil begegnen die folgenden Hardware-RAID-Lösungen mit separatem RAID-Controller.

Interne Hardware-RAID mit PCI-RAID-Controller
Hierbei übernimmt der RAID-Controller, wie bei den externen Hardware-RAIDs, die gesamte Rechenarbeit. Somit arbeiten die Controller, unabhängig von der CPU-Auslastung, mit konstanter Performance. Die RAID-Konfigurationsdaten befinden sich auf allen Festplatten des RAID Systems und sind somit auch bei Ausfall einer Festplatte oder sogar des ganzen Controllers immer vorhanden. Bei Tausch des Controllers oder einer Festplatte werden die RAID Konfigurationsdaten eingelesen und der Rebuilt gestartet.

RAID-Controller sind mit internen Anschlussbuchsen und einem externen Anschluss für SCSI-Festplatten versehen. Somit hat man die Möglichkeit, die Festplatten des RAID Systems in den Rechner einzubauen oder aber extern anzuschliessen. Weitere Informationen und detailliertere Angaben zu Anschlussmöglichkeiten von Festplatten sind in den Kapiteln PCI-RAID-Controller von ICP vortex und MegaRAID PCI RAID Controller zu finden.

Externe Hardware-RAID
Die High-End-RAID-Lösung stellen die sog. Hardware-RAIDs (bzw. SCSI-to-SCSI-RAIDs) dar. Hier sind der Controller und die Festplatten in einem separaten Gehäuse untergebracht. Das RAID System wird mittels SCSI-Kabel mit dem Hostadapter des Rechners verbunden.

Durch die Backplane, an der Controller und Festplatten direkt angeschlossen sind, erreicht man kürzeste Kabellängen und somit maximale Datensicherheit. Weitere Datensicherheit kann durch den Einsatz von redundanten Controllern erreicht werden. Hierbei wird bei Defekt des Controllers automatisch auf einen zweiten Controller im Gehäuse umgeschaltet, ohne Zeitverzögerung und Datenverlust. Der defekte Controller kann dann im laufenden System gegen einen neuen getauscht werden. Nähere Informationen hierzu stehen im Kapitel Externe RAID-Systeme von transtec .

Hardware-RAIDs arbeiten, wie PCI-RAID-Controller, immer mit konstanter Performance, unabhängig von der CPU-Auslastung. Hierbei werden die Daten vom Hostadapter des Rechners über den SCSI-Bus direkt zum RAID-Controller übertragen. Dort werden die gesamten Daten in den Cache eingelesen. Danach ist der SCSI-Bus nicht mehr belastet. Der Controller des Hardware-RAIDs verteilt dann die Daten auf die einzelnen Platten und berechnet die Parity, in Abhängigkeit vom gewählten RAID-Level. Währenddessen ist die CPU des Rechners nicht mit den Rechenoperationen des RAID Systems belastet. Ein entsprechend gross gewählter Cache, der als Write-back-Cache konfiguriert ist, kann die Schreibperformance erheblich erhöhen. Das Lesen der Daten geschieht dann analog hierzu in umgekehrter Reihenfolge. Hardware-RAIDs können im Vergleich zu PCI-RAID-Controllern plattformübergreifend eingesetzt werden.