RAID und Linux

Redundant Array of Inexpensive Disks

Martin Schulze
joey@infodrom.north.de

16. Dezember 1996


Zusammenfassung

RAID ist eine Technologie, die entwickelt wurde, um Plattenzugriffe zu beschleunigen und gleichzeitig für Ausfallsicherheit zu sorgen. Die verschiedenen RAID-Level wurden bereits '87 an der University of California, Berkeley, entwickelt.

Historie

In den letzten beiden Jahrzehnten ist die Leistung von Prozessoren jedes Jahr um das fünf bis zehnfache gestiegen - je nachdem, welcher Statistik man Glauben schenkt. In derselben Zeit wurde die Plattenkapazität verdoppelt, wobei der Preis alle zwei Jahre um die Hälfte fiel. Die Elektromechanik konnte im letzten Jahrzehnt jedoch nur soweit verbessert werden, daß die Geschwindigkeit der Zugriffe lediglich um 10 bis 50 Prozent gesteigert werden konnten. Diese Entwicklung hat einige Leute dazu bewegt, eine gewaltige I/O-Krise vorherzusagen.

Da in naher Zukunft keine neue Technologie in Sicht ist, die magnetisch- bzw. optisch-orientierte Platten als Sekundärspeicher ersetzen könnte, und die Gesetze der Mechanik nur noch bedingt Verbesserungen erlauben, mußten andere Wege gefunden werden, aus diesem Dilemma zu entkommen.

Aus diesem Grund wurden verschiedene RAID-Stufen entwickelt, die vor allem in Großrechnern Einsatz fanden und immer noch finden. Mittlerweile sind sie auch im Middle- und Low-End-Bereich anzutreffen. Sie besitzen folgende Eigenschaften:

RAID-0

Abbildung 1: Arbeitsweise von RAID-0

RAID-0

Um die Daten auf auf die Platten zu verteilen, werden die Platten in gleichgroße Stücke, sogenannte chunks aufgeteilt. Die Stücke in einer Ebene nennt man Streifen. Die Größe der Stücke sollte in Abhängigkeit zur durchschnittlichen Größe der gespeicheten Daten und zur Sektorgröße der Platten gewählt werden. Die Treiber von Linux erlauben per se nur Stückgrößen von von n kBytes.

Abb. 1 zeigt, wie die Daten angeordnet werden. Der Anwender sieht dabei nur die logische Ebene /dev/md0 und nicht die zugrundeliegende physikalische. Für ihn ist das gesamte Gebilde transparent eine einzige Festplatte, auf der die Daten sequenziell abgelegt sind. Stattdessen werden die Daten jedoch ebenfalls in Stücke aufgeteilt und in den Chunks abgelegt. Diese werden wie in der Abbildung alternierend auf die beteiligten Festplatten verteilt.

So werden alle Platten gleichmäßig beansprucht und die I/O-Anfragen können besser verteilt werden. Zudem können mehrere Lese- bzw. Schreibvorgänge parallel ablaufen. Dieses Verfahren wird auch als RAID-0 bezeichnet.

Sicherheit der Daten wird dadurch gewährleistet, daß sie komplett - oder wenigstens relevante Auszüge daraus - doppelt gespeichert werden. Sicherheit bedeutet hier nicht, daß ein Hacker sensible Daten nicht erreichen kann, dazu benötigt man andere Methoden, sondern Ausfallsicherheit. Wenn eine oder zwei Festplatten ausfallen (Hardwaredefekte etc.), dann können die Daten immer noch komplett restauriert werden.

RAID-5

Hier wird über alle beschriebenen Stücke in einem Streifen eine Checksumme berechnet, ein simples XOR reicht. Im ersten Streifen wird die Checksumme im letzen Stück gespeichert, im nächsten Streifen steht sie im vorletzten Stück und so fort. Auf diese Weise lassen sich die Daten komplett rekonstruieren, wenn eine Platte ausfallen sollte. Zudem erhält man auch den Vorteil, daß die Platten gleichmäßig beansprucht werden. Da jedoch eine zusätzliche Festplatte benötigt wird, lohnt sich das Verfahren erst ab 4 Platten.

RAID-5

Abbildung 2: Arbeitsweise von RAID-5

Eine Weiterentwicklung ist RAID-6. Hier werden pro Streifen zwei voneinander völlig unabhängige Checksummen berechnet. Wie bei RAID-5 werden sie zuerst in den beiden letzten Chunks gespeichert und nach vorne geschoben.

So ist dürfen sogar zwei Festplatten ausfallen, ohne, daß man Datenverlust hat. Allerdings erkauft man sich diese Sicherheit auch mit einer weiteren Platte, so daß dieses Verfahren nur bei äußerst sensiblen Daten oder viel Festplatten angewendet wird.

Implementierungen

Wie man schnell sieht, werden Schreibvorgänge bei höheren RAID-Stufen, RAID-4 und aufwärts, von erheblichem Rechenaufwand begleitet. Daher wird RAID meistens als Hardwarelösung angeboten, ein RAID-System ist dabei für das Betriebssystem transparent eine einzige Festplatte.

Der Vorteil liegt auf der Hand. Die benötigte Rechenleistung wird komplett von der Hardware übernommen und der Rechner muß keine zusätzliche Rechenzeit aufwenden. Die Sache hat jedoch einen entscheidenden Haken. Schon für ein System mit einer Kapazität von 16GB auf Basis von RAID-5 und WideSCSI muß man gut 20.000 DM hinblättern. Für IDE habe ich einen RAID-1-Controller gefunden, der lediglich 300,-- kostet. Es ist also ein recht kostspieliges Unterfangen.

Die Tabelle folgt noch...

Tabelle 1: Übersicht über die RAID-Stufen

Linux

Die Basis für RAID-Implementie\-rungen ist der sogenannte Multiple Devices driver for Linux, abgekürzt md. Dieser Treiber stellt sogenannte Block-Devices zur Verfügung. Diese können Dateisysteme enthalten und gemountet werden.

Die Devices /dev/mdn sind Container für beliebig zusammengesetzte Plattensysteme. Sie sind gleichberechtigt zu SCSI-Platten. Sie liegen zwischen den Blockdevices und den Dateisystemen. Abbildung 3 verdeutlicht das. Das RAID-System von Linux arbeitet auf allen Blockdevices: Platten, Partitionen, Loopback etc. Der RAID-5-Treiber wird z.B. in Ermangelung ausreichender Platten ausschließlich über Loopback getestet und entwickelt.

RAID-5

Abbildung 3: Position von RAID im Linux-Kernel

Zur Benutzung von RAID mit Linux müssen einige Schritte unternommen werden. Zuerst muß festgehalten werden, welche Devices mit welchem RAID-Level verbunden werden. Dazu verwendet man das Programm mdcreate, das diese Daten in /etc/mdtab schreibt. Anschließend wird der Kernel über mdadd -ar angewiesen, entsprechende Treiber zu laden und die entsprechenden MD-Devices zu initialisieren.

Danach kann /dev/md0 genauso verwendet werden wie /dev/sda1. Es wird ein Dateisystem darauf generiert (mkfs) und das Device gemountet.

Anwendungsgebiete

Swap
Der Swapspace muß nur schnell sein. Also verteilt man ihn mit RAID-0 auf verschiedene kleine Platten.
/var/spool
Auf diesen Bereich im Dateisystem wird sehr oft zugegriffen (Newsspool, Proxy, Mailspool, UUCP-Spool). Da die Daten oft wichtig sind (z.B. Maildir), bietet sich hier RAID-3 oder RAID-5 an.
/pub
Auf einem FTP-Server hat man meistens das Problem, daß man zwar in der Summe viel Plattenplatz hat, jedoch zuviele verschiedene Platten, so daß man den Bereich nicht sinnvoll aufteilen kann. Je nach Restaurierbarkeit der Daten nimmt man hier RAID-0 oder RAID-5.
/home
Dieses ist wohl der wichtigste Bereich in einem Unix-System. Hier nimmt der sicherheitsbewußte Administrator natürlich RAID-5 oder RAID-6.
Zur Zeit sind die Treiber für RAID-1 und RAID-5 noch nicht öffentlich erhältlich, sondern nur von den Entwicklern zu beziehen. RAID-0 ist aber schon lange im Kernel integriert. Über einen Treiber für RAID-6 wird nachgedacht, wann er verfügbar ist, wird sich zeigen.

Konkrete Beispiele für die Anwendung sind ftp.infodrom.north.de, wo zwei Platten über RAID-0 zu einem knapp 5 GB großen FTP-Bereich zusammengesetzt sind. Auf ftp.gwdg.de sind es sogar 9 Platten, die auf die gleiche Weise ca. 50GB /pub ergeben.

PostScript Source und gzip't

Weitere RAID-Dokumentation


© Joey, 17 Dec '96