Linux-Magazin: RAID
Performancesteigerung und Datensicherheit mit RAID
Rasant mit RAID
| |
![]() RAID ist eine Technologie, die entwickelt wurde, um Plattenzugriffe zu beschleunigen und gleichzeitig für Ausfallsicherheit zu sorgen. Die verschiedenen RAID-Level wurden an der University of California, Berkeley, entwickelt.
|
|
1. Analyse der I/O-Aktivitäten |
In den letzten Jahrzehnten ist die Leistung der 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. Die Elektromechanik konnte im letzten Jahrzehnt jedoch nur soweit verbessert werden, daß die Zugriffsgeschwindigkeit lediglich um 10 bis 50 Prozent gesteigert werden konnte. Diese Entwicklung hat einige Experten 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 an der Technik zulassen, mußten andere Wege gefunden
werden, aus diesem Dilemma zu entkommen.
Analyse der I/O-Aktivitäten
Man hat die Dateisysteme auf Belastung hin untersucht und festgestellt, daß diese ganz schlecht über das komplette System verteilt ist. Es existieren sogenannte Brennpunkte (in der Literatur: ¨hot spots¨). Das sind Bereiche mit sehr hoher Anzahl an Zugriffen (z.B. Swappartitionen, /var/spool/news, /var/spool/proxy etc.), sowie Bereiche mit geringer bis keiner Aktivität (z.B. /var/spool/locate und /var/spool/rwho als Extrema bzw. Teile von /home und /usr im Normalfall). Teilweise bestehen diese Brennpunkte aus einer einzigen Datei oder aus einem ganzen Satz von Dateien, die normalerweise auf ein und derselben Platte liegen. Aus dieser Betrachtung stammt die sogenannte 80/20-Regel. Sie besagt, daß auf den meisten Systemen auf 20% der Plattenkapazität 80% der I/O-Anfragen anfallen.
Ein Team an der University of California, Berkeley, veröffentlichte bereits '87, daß die Performance gesteigert werden kann, wenn die Daten auf mehrere kleinere Platten und auf einer großen verteilt werden. Dabei sinkt die MTBF (mean time between failure) für das gesamte System allerdings dramatisch. Um diesem zu begegnen, haben sie mehrere RAID-Stufen (RAID-1 bis RAID-5) entwickelt. Die Industrie hat später noch zwei weitere (RAID-0 und RAID-6) geprägt. RAID steht für "Redundant Array of Inexpensive Disks". Es werden also mehr Platten eingesetzt, als für das pure Erreichen der gewünschten Kapazität nötig wären. Auf diese Weise wird der gesunkenen MTBF entgegengesteuert.
Die an der UCB spezifizierten RAID-Stufen haben folgende Eigenschaften:
- Mehrere physikalische Platten, die nach außen hin wie eine gesehen
werden. (Unter Linux ist dieses das MD-Device, /dev/md
) Dadurch erhält man Transparenz für höhere Schichten der Hardware bzw. des Betreibssystems und erzwingt praktisch Unterstützung. - Die Daten werden in einer definierten Art und Weise auf die verschiedenen Platten verteilt.
- Redundanter Plattenplatz wird benutzt, damit Daten auch bei Ausfall einer oder mehrerer Platten wiederhergestellt werden können.
Striping
Um die Daten auf auf die Platten zu verteilen, werden Platten in gleichgroße Stücke, sogenannte "chunks" aufgeteilt. Die Stücke in einer Ebene (z.B. erster Chunk auf jeder Platte, zweiter Chunk etc.) nennt man Streifen. Die Größe der Stücke beträgt je nach Anwendung mehrere kBytes. Sie sollte so gewählt werden, daß ein Großteil der zu speichenden Daten in ein solches Stück paßt. Die Größe sollte auch in einem Verhältnis zur Sektorgröße der Platten stehen, sonst bekommt man dort gleich wieder Performanceverluste. Die Treiber von Linux erlauben daher per se nur Stückgrößen von von n kBytes. Sinnvoll ist es z.B., die Größe so zu wählen, daß sie der Blockgröße des darüberliegenden Dateisystems entspricht.
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
praktisch 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.
Redundanz
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, dazuwerden ganz andere Methoden benötigt. Hier
bedeutet es Ausfallsicherheit. Wenn eine oder zwei Festplatten
ausfallen (Hardwaredefekte etc.), dann können die Daten immer noch
komplett restauriert werden.
RAID-0
Die einfachste Möglichkeit, dem ursprünglichen Dilemma zu begegnen, ist das o.g. "Striping" (engl. Streifung) von Platten. Auf diese Weise werden die I/O-Anfragen ziemlich gleichmäßig auf alle beteiligten Platten verteilt (Stichwort: Load-Balancing). Die Performance bezüglich oben genannter Brennpunkte wird erheblich gesteigert. Gerade dann, wenn der Plattentreiber sogenanntes Command-Queueing unterstützt (z.B. Linux' SCSI-Treiber) bzw. die Platten an unterschiedlichen Adaptern hängen, erhält man einen ungeheuren Performancegewinn. Es ist von Vorteil, mehrere kleine Platten zu einer großen zusammenzusetzen. Hinzu kommt, daß kleinere Platten meist auch schneller als größere sind.
Der zunehmenden Gefahr eines Ausfalles wird bei RAID-0 allerdings
nicht begegnet. Da hier keine Platte redundant ist, müßte dieses
Verfahren eigentlich auch AID heißen.
RAID-1
Der nächste Schritt ist RAID-1. Hier werden die Platten einfach gespiegelt. Damit hat man zwar ein großes Maß an Ausfallsicherheit gewonnen, jedoch nichts gegen das ursprüngliche Brennpunkteproblem unternommen.
Ein RAID-1-System kann man zusätzlich auch wie ein RAID-0-System als
Striping-System fahren. Dann hat man ein Höchstmaß an Performance und
sehr gute Datensicherheit, allerdings auch die höchsten Kosten, denn
man muß den gleichen Plattenplatz genau zweimal vorhalten. Wenn das
RAID-System auch die Lesezugriffe auf die gespiegelten Platten
verteilt, wird das Lesen von Daten noch schneller.
RAID-2 und RAID-3
In diesen Stufen wird je eine zusätzliche Festplatte zur Speicherung von Checksummen benötigt. Wie bei RAID-0 werden die Daten alternierend auf die Festplatten verteilt. Bei jedem Schreibvorgang wird wie in Abb. 2 zu sehen auf der zusätzlichen Platte eine Checksumme über die auf den anderen Stücke im gleichen Streifen geschrieben.
Somit kann jede Festplatte komplett restauriert werden, sollte sie ausfallen. Bei Lesezugriffen hat man wie bei RAID-0 einen Performancegewinn, jedoch werden Schreibzugriffe im Vergleich zu RAID-0 etwas verlangsamt, da jedesmal eine Checksumme über die entsprechenden Stücke (chunks) berechnet und geschrieben werden muß.
Üblicherweise ist ein solches Stück in diesen beiden Stufen ein Bit
oder Byte groß. Das bedeutet, daß die Daten auf jeden Fall gesplittet
und auf alle Platten verteilt werden. Aufgrund der Größe muß man hier
jedoch Performanceverluste hinnehmen, denn die Sektorgröße der Platten
ist bei den meisten erheblich größer. Es würde also noch nicht einmal
ein Sektor am Stück geschrieben werden. Beim RAID-3-Verfahren wird ein
simples XOR verwendet. RAID-2 setzt mehrere zusätzliche Platten ein
und berechnet die Checksummen nach einem Hamming-Algorithmus, ist also
etwas rechenintensiver.
RAID-4
Der Unterschied zwischen RAID-3 und RAID-4 besteht darin, daß bei RAID-4 die Größe der Stück beliebig ist. Die Checksummen werden jedoch immer noch auf einer eigenen Platte gespeichert.
Durch größere Stücke verlangsamen sich die Schreibvorgänge ein wenig,
da größere Datenmengen gelesen und verknüpft werden müssen. Im
Gegenzug werden aber Lese- und Schreibvorgänge wieder beschleunigt, da
nicht nur Teile von Sektoren, sondern sogar mehrere auf einmal gelesen
bzw. geschrieben werden. In der Praxis wird man meist nicht merken,
daß theoretisch zum Schreiben von einem Stück mehrere andere gelesen
werden müssen, da die meisten Platten und Plattentreiber selbst einen
gewissen Puffer haben und diese Daten schnell verfügbar sind.
RAID-5
Anders sieht es bei RAID-5 aus. Die Checksummen werden zwar weiter mit XOR über beliebig große Stücke gebildet, jedoch nicht mehr ausschließlich auf der letzten Festplatte gespeichert. Im Gegenteil, der erste Checksummen-Block liegt auf der letzten, der nächste auf der vorletzten Platte u.s.w. Abbildung 3 verdeutlicht das.
Gegenüber RAID-3 hat RAID-5 einen Geschwindigkeitsgewinn erfahren, denn ein Großteil der Daten liegt wieder innerhalb eines Chunks, so daß die Daten am Stück geschrieben werden können und nicht wie bei RAID-3 in vielen kleinen Portionen.
Wie man leicht sieht, hat man hier ein sehr gutes
Preis/Leistungs-Verhältnis. Um Redundanz, und damit Ausfallsicherheit
der Daten zu erhalten, muß lediglich eine zusätzliche Platte eingebaut
werden. Erst wenn eine zweite Platte stirbt, bekommt man
Schwierigkeiten. Die I/O-Anfragen werden gleichmäßig auf die Platten
verteilt, so daß man auch gute I/O-Performance erhält.
RAID-6
Diese RAID-Stufe wurde nicht an der University of California, Berkeley, entwickelt, sondern von der Industrie geprägt. Hier wird die Sicherheit, die bereits mit RAID-5 gewonnen wurde, noch gesteigert.
Es werden zwei zusätzliche Platten benötigt, um die redundanten Daten aufzunehmen. Wie in Abb. 4 zu sehen werden die Platten wieder in Chunks unterteilt und mit Daten gefüllt. Die ersten Chunks auf den letzten beiden Platten enthalten dabei die Checksummen der Chunks der bisherigen Platten. Die Platten, auf denen die Chunks mit P und Q stehen, "wandern" dabei in jedem Streifen um eine Position nach vorne. Die Checksummen sind also genau wie die Daten gleichmäßig auf die Platten verteilt. I/O-Zugriffe werden so optimal verteilt.
Zur Berechnung der Checksummen wird der Algorithmus von Reed-Solomon benutzt. Er berechnet zwei voneinander unabhängige Checksummen, P und Q, auf Basis der gespeicherten Daten. Die ursprünglichen Daten lassen sich dabei aus einer der Checksummen und einem Teil der Daten rekonstruieren.
Es ist klar ersichtlich, daß man hier die größte Ausfallsicherheit bei gleichzeitiger Performancesteigerung erhalten hat. Selbst, wenn zwei Platten ausfallen, können die Daten komplett aus den verbliebenen rekonstruiert werden. Erst wenn die dritte Festplatte ausfällt, sind die Daten unwiderruflich verloren.
|
Tabelle 1: Übersicht über die RAID-Level |
|||||||
| RAID-0 | RAID-1 | RAID-2 | RAID-3 | RAID-4 | RAID-5 | RAID-6 | |
|---|---|---|---|---|---|---|---|
| Redundanz | o | * | * | * | * | * | * |
| Striping | * | o | * | * | * | * | * |
| Chunksize | nkB | nkB | 1Bit | 1Bit | nkB | nkB | nkB |
| Checksumme | / | / | Hamming | xor | xor | xor | Reed |
| Disks | 0 | 2x | +n | +1 | +1 | +1 | +2 |
| Performance | +++ | 0/+++ | ++ | ++ | ++ | ++ | ++ |
| Sicherheit | - | +++ | ++ | ++ | ++ | ++ | +++ |
Anwendungsbereiche
Wie sich der geneigte Leser leicht überlegen kann, gibt es keine ultimative RAID-Stufe. Keine RAID-Stufe wird allen Anforderungen gleichzeitig gerecht. Je nach Struktur und Sensibilität der Daten muß die passende RAID-Stufe ausgesucht werden.
- Swapspace
- muß nur schnell sein, Redundanz ist hier überflüssig. Hier eignet sich RAID-0 zusammen mit einem Satz schneller und kleiner Platten am besten.
- /var/spool
- Auf diesen Bereich wird häufig zugegriffen (z.B. /var/spool/news oder /var/spool/proxy) und er enthält nur mittelmäßig wichtige Daten (z.B. /var/spool/mail). Verlust wäre zwar schmerzlich, jedoch zu verkraften. Hier bieten sich RAID-0 und RAID-5 an.
- /pub
- Auf einem FTP-Server hatte man früher häufig das Problem, daß man zwar in der Summe ausreichend GB Speicherplatz hat, die Festplatten jedoch nur ungünstig anordnen kann. Hier leistet RAID-0 Abhilfe. Ein FTP-Server beinhaltet oft redundante Daten. Teilweise handelt es sich um Spiegelungen von anderen Rechnern, teilweise wird dieser Server selbst wieder von anderen gespiegelt. Ein Teil der Daten ist also problemlos restaurierbar.
- /usr
- Im /usr-Bereich liegen viele Programme und Daten auf die schnell zugegriffen werden muß. Auch dieser Bereich ist meist vollkommen restaurierbar, auch wenn das ein recht aufwendiges Unterfangen ist. Daher bieten sich hierfür ebenfalls RAID-0 und RAID-5 an.
- /home
- Das ist wohl der wichtigste Bereich in einem Unix-System. Es enthält fast ausschließlich nicht rekonstruierbare Daten. Daher sollte hier unbedingt die Verwendung von RAID-5 oder gar RAID-6 in Betracht gezogen werden.
Implementierungen
Wie man schnell sieht, werden Schreibvorgänge bei höheren RAID-Stufen, RAID-4 und aufwärts, von erheblichem Rechenaufwand begleitet. Das ist auch der Grund, weshalb es diese bisher meistens nur als Hardwarelösungen gibt. Bei diesen Lösungen bekommt selbst die unterste Ebene des Betriebssystemkerns nicht mit, daß es sich um ein Disk Array handelt.
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 nur einen Controller für RAID-1 und zwei bzw. vier Platten gefunden, der lediglich 300,-- kostet. Es ist also ein recht kostspieliges Unterfangen.
Wenn man die Preise einmal mit aktuellen Festplattenpreisen vergleicht, bekommt man schnell Geschmack daran, RAID als Softwarelösung zu betreiben. Vier 4GB Platten oder acht 2GB Platten kosten nur ca. 5.000,--.
Hardwarelösungen haben gegenüber Softwarelösungen jedoch den Vorteil, daß sie so konzipiert werden können, daß man im laufenden Betrieb Platten entnehmen und ersetzen kann. Bei jeder Lösung, die ausschließlich auf Software basiert, muß das System dazu heruntergefahren werden.
Aus diesem Grund haben verschiedene Unix-Hersteller sogenannte SoftRAID-Systeme entwickelt. Das sind Kerneltreiber, die einen RAID-Level implementieren. Wenn sie funktionieren und sich die aufzuwendende Rechenzeit in Grenzen hält, sind sie gerade im Middle- und Low-End-Bereich eine echte Alternative.
Die meisten kommerziellen Unix-Derivate, selbst Windows NT, besitzen Plattentreiber, die RAID-Stufen implementiert haben. Mit von der Partie ist natürlich auch Linux. Im stabilen Kernel 2.0.x befinden sich bereits Treiber für RAID-0 und lineare Verkettung sowie Ansätze für RAID-1 und RAID-5.
Die Entwicklung der Treiber für RAID-1 und RAID-5 wurde während der Entstehung dieses Artikels beendet und ausgiebig getestet. Wahrscheinlich sind sie mittlerweile bereits im aktuellen 2.1.x Kernel integriert.
Das ist das Interessante an Linux und freier Software allgemein. Die
Entwicklung geht teilweise so rasant voran, daß man ab und zu Probleme
hat, auf dem aktuellen Stand zu bleiben. Ganz wichtig sind hierbei
raum- und zeitüberwindende Medien wie Mailinglisten und IRC. Zudem hat
wirklich jeder die Chance, die Entwicklung voranzutreiben und die
Software seinen eigenen Anforderungen anzupassen. Auch wenn sie
anfangs vielleicht noch nicht optimal funktioniert, so arbeitet meist
ein Team daran, sie zu verbessern.
Linux
Die Basis für RAID-Implementierungen ist der sogenannte "Multiple Devices driver for Linux", abgekürzt MD. Dieser Treiber stellt sogenannte Block-Devices zur Verfügung. Alle Block-Devices können Dateisysteme enthalten und gemountet werden. So sind die Loopback-Devices (/dev/loopn) z.B. auch Block-Devices.
Die Devices /dev/mdn sind Container für beliebig zusammengesetzte Plattensysteme. Sie sind als Blockdevices gleichberechtigt zu SCSI-Platten und -CD-ROMs. Damit bilden wie in Abb. 5 zu sehen genau wie die Loopback-Devices eine Zwischenebene. Sie liegen zwischen den Hardware-Treibern (scsi disks) und den Dateisystemen.
Lineare Verkettung von Festplatten könnte man vielleicht als Vorstufe zu RAID-0 sehen. Die verwendeten Platten werden sequenziell aneinander gekettet und nacheinander beschrieben. Auf diese Weise erhält man mit minimalem Aufwand große Platten (Interessant z.B. für FTP-Server).
Marc Zyngier aus Frankreich hatte noch eine ganze Menge nicht benutzter 100MB Festplatten im Schrank rumliegen. Wozu kann man so kleine Platten auch noch einsetzen? Da er gerade seinen Wehrdienst ableistete und nach einer sinnvollen Beschäftigung suchte, hat er sich mit den Kerneltreibern beschäftigt und die Treiber für md, linear und raid0 entwickelt.
Mitte Dezember ging eine Mail von Miguel de Icaza aus Mexiko durch die Kernel-Mailingliste, in der er schrieb, daß er zusammen mit Ingo Molnar aus Ungarn bzw. Östereich Treiber für RAID-1 entwickelt hat, der nun von anderen getestet werden kann. Ein paar Tage später habe ich Miguel im LinuxNET getroffen, wo er mir stolz erzählt hat, daß der Treiber für RAID-5 kurz vor Vollendung stehe, zwei Stunden später berichtete er mir, daß er nun auch funktioniere .
|
Tabelle 2: Personalities |
|
| RAID-Level | md-personality |
| linear | 1 | RAID-0 | 2 | RAID-1 | 3 | RAID-5 | 4 |
Jeder unterstützten RAID-Stufe wurde eine Identifikation, genannt
personality, zugeordnet. Anhand dieser weiß der MD-Treiber, welche
RAID-Stufe benutzt und ggf. nachgeladen werden soll. RAID und MD sind
natürlich vollkommen modularisiert aufgebaut. Der MD-Treiber versucht
dazu das Modul md-personality-nr zu laden. Daher muß man,
wenn man Module und den kerneld benutzt, entsprechende
Aliase in der Konfigurationsdatei /etc/conf.modules
setzen. Aktuelle Versioen von modprobe haben diese
bereits eincompiliert.
alias md-personality-1 linear alias md-personality-2 raid0 alias md-personality-3 raid1 alias md-personality-4 raid5
Einrichten unter Linux
Die Benutzung der RAID-Stufen unter Linux ist relativ einfach, man muß sich nur vor Augen halten, wie die Treiber im Kernel angeordnet sind. Auch wenn die RAID-Treiber mit beliebigen Blockdevices arbeiten, ist der reelle Betrieb natürlich nur mit Partitionen sinnvoll. Dazu werden die MD-Utilities (Quelle siehe Literatur) benötigt.
Um z.B. ein Swap-Device aufzubauen, das via RAID-0 und einer Sektorgröße von 4 kBytes (gleichzeitig der PAGE_SIZE im Speichermanagement von Linux) über drei Festplatten verteilt ist, geht man wie folgt vor:
Als erstes muß definiert werden, welche Partitionen mit welcher RAID-Stufe zu welchem Multiplen Device zusammengesetzt werden. Diese Definitionen stehen in der Datei /etc/mdtab. Sie können manuell oder von mdcreate geschrieben werden.
Der Befehl
macht genau das gewünschte und erzeugt folgenden Eintrag in /etc/mdtab:
/dev/md0 raid0,4k,0,8864e1d1 /dev/sda1 /dev/sdb1 /dev/sdc1
Anschließend muß diese Definition dem Kernel mitgeteilt werden, denn zur Zeit existiert sie nur in dieser Datei. Das geschieht mit dem Programm mdadd:
Auf diese Weise werden alle in /etc/mdtab definierten MD-Devices aktiviert. Danach erst kann auf sie zugegriffen werden. Diese Zeile sollte auch im entsprechenden Boot-Skript (/etc/rc.boot oder /etc/init.d/boot, je nach Distribution) stehen.
Danach kann auf das Device genauso wie auf eine herkömmliche Partition zugegriffen werden, also folgt nun ein mkswap-Aufruf gefolgt von einem swapon. Genauso wird für weitere RAID-Systeme vorgegangen.
Per se hat man bei Linux 4 MD-Devices, die jeweils maximal 8 Blockdevices verbinden können. Für den privaten Gebrauch reicht das aus, auf großen Servern ist es jedoch zweifellos zuwenig. Die Werte werden in der Datei .../linux/drivers/block/md.h definiert und können problemlos angepaßt werden.
Hilfe, die Platte ist tot
Wie geht man nun vor, wenn eine Platte tatsächlich ausfällt? Als dieser Artikel entstand, gab es in einem offiziellen Kernel noch keine echte RAID-Stufe. Zur Zeit hat man also Pech gehabt, bzw. ist auf das Backup angewiesen, das man vorgestern machen wollte...
Die mit RAID-1 gespiegelten Platten bzw. Partitionen lassen sich auch
einzeln mounten, somit ist die Rekonstruktion der Daten kein
Problem. Bei RAID-5 ist es schon schwieriger. Dafür wird es
ein Programm mdrecover (der Name kann sich ändern) geben, das
diese Aufgabe erledigt. Später wird der das RAID-Modul selbst in der
Lage sein, festzustellen, daß eine Platte rekonstruiert werden muß und
dieses eigenständig durchführen. Die Daten können natürlich auch
bei Ausfall einer Platte weiter gelesen werden.
RAID im Einsatz
In meinem Umfeld ist RAID mit Linux bereits mehrfach im Einsatz,
allerdings nur RAID-0. Die Gesellschafft für wissenschaftliche
Datenverarbeiten mbH Göttingen betreibt einen großen FTP-Server
ftp.gwdg.de, der u.a. auch viele Linuxarchive enthält. Dieser läuft
auf einem Linuxrechner mit 6 9GB Platten. Ich selbst betreibe einen
mit zur Zeit nur zwei Festplatten.
Literatur:
[1] "A Case for Redundant Arrays of Inexpensive Disks (RAID)",
David Patterson, Garth Gibson, Randy Katz,
University of Berkeley, California, December 1987
[2] "An Introduction to RAID",
Pete McLean,
April 1991, Digital Equipment Corporation
ftp://ftp.infodrom.north.de/pub/texte/raid/raid.tar.gz
[3] Kernel-Mailinglisten,
linux-kernel@vger.rutgers.edu
linux-raid@vger.rutgers.edu
[4] Discussions on #Linux, LinuxNET
[5] /usr/src/linux/drivers/block/{md,raid0}.c
[6] mdutils 0.35, Marc Zyngier
ftp://sweet-smoke.ufr-info-p7.ibp.fr/pub/Linux/{md035.tar.gz,md-FAQ}
[7] RAID-HOWTO,
Mike Neuffer <mike@i-Connect.Net>
http://www.i-Connect.Net/~mike/scsi/
