HomeMapIndexSearchNewsArchivesLinksAbout LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Antonio Castro

Bemerkung:
Ich bin dem ganzen Team des LinuxFocus dankbar, das mir aus dem Hintergrund heraus sehr oft geholfen hat, den Artikel verbessert und übersetzt hat. Hier muß ich jemanden ganz besonders erwähnen. Dieser Artikel wäre nie ohne die Hilfe von Luis Colorado zustande gekommen, der mir via E-Mail sein Wissen über RAID Systeme vermittelte. Danke Luis.

Inhalt
Einleitung
Auswahl der Festplatten für ein RAID System
Merkmale eines SCSI Systemes
RAID Arten
Installation eines RAID0 Systemes
Literaturverweise

Installation und Konfiguration eines RAID Systemes

[Ilustration]

Zusammenfassung:
RAID (Redundant Array of Inexpensive Disks) besteht aus einer Reihe von Systemen für die Organisation mehrerer Festplatten zu einer Einheit, die sich wie ein einziges Laufwerk verhält und dabei die Festplatten parallel betreibt, wodurch sich die Zugriffswerte verbessern lassen und sich glecihzeitig ein Backup-system realisieren läßt.


Einleitung

Es gibt eine Reihe von Hardwarelösungen auf dem Markt, die meist recht teuer sind und generell auf dem Einsatz bestimmer Kontrollerkarten basieren.

Desweiteren sind RAID Realisierungen zu finden, die auf Karten mit einem einfachen Z80 Chip und integrierter Software fußen, und so mehrere identische Festplatten zu einem RAID System zusammenfassen. Verglichen mit diesen Systemen kann man nicht behaupten, daß diese Lösung effizienter als ein Linux basiertes System sei.

Realisierungen, basierend auf Kontrollerkarten sind teuer und zwingen den Benutzer ebenfalls, identische Festplatten zu verwenden. Linux wäre in der Lage, entsprechende Gerätetreiber vorausgesetzt, solche Karten zu nutzen. Allerdings ist dies nicht wirklich von Interesse, da es durchaus eine Lösung gibt (natürlich basierend auf freier Software) die ebenso effizient ist und durch die eine teure Hardwarelösung vermieden werden kann.
 
... ...es gibt unter Linux eine Lösung, basierend auf freier Software, die ebenso effizient ist und durch die die teure Hardwarelösung vermieden werden kann.

Das betrachtete RAID System für Linux ist auf Kernelebene realisiert und erlaubt den Einsatz von verschiedenen Festplatten. Es können auch IDE und SCSI Platten zusammen verwendet werden. Sogar Platten von verschiedener Kapazität können zum Einsatz kommen, allerdings müssen dann den Platten Partitionen der gleichen Grösse zugewiesen werden. Häufig werden mehrere Platten der gleichen Größe verwendet, allerdings sollte halt nochmals darauf hingewiesen werden, daß Linux hier viel flexibler ist. Zum Beispiel können Teile einer Festplatte für ein RAID System verwendet und andere als eigenständige Partition betrieben werden. Dies ist meist keine gute Idee, da eine eigenständige Partition innerhlab eines RAID Systemes die Zugriffsgeschwindigkeit des selbigen reduziert. Anders ausgedrückt: obwohl es möglich ist, beliebige Arten von Festplatten zu verwenden, ist es immer besser (wenn möglich), Platten der selben Kapazität und gleicher Eigenschaften zu verwenden. Ein weiterer Aspekt, der zu überlegen ist, ist der Einsatz von SCSI, wo auf mehrere Geräte, die an den Bus angeschlossen sind, zugegriffen werden kann.

Im Gegensatz dazu kann niemals auf mehrere Geräte, die an dem gleichen IDE Kontroller hängen, gleichzeitig zugegriffen werden. Leider sind SCSI Festplatten immernoch viel teurer, als ihre IDE Gegenstücke. Die Softwarelösung eines Linux RAID Systemes ist genauso effizient (wenn nicht gar effizienter), wie Lösungen, die auf speziellen Karten basieren. Zugleich ist die Softwarelösung natürlich wesentlich günstiger und flexibler, besonders wenn man sich die Platten anschaut, die eingesetzt werden können.

Während ein Gerät an einem SCSI Bus Daten auf diesen legen und parallel dazu ein anderes Gerät Daten empfangen kann, läuft der Zugriff auf IDE Festplatten seriell ab, eine nach der anderen.

Auswahl der Festplatten für ein RAID System

Der Einsatz von sehr schnellen Festplatten zur Realisierung eines RAID Systemes ist meist nicht gerechtfertigt. Sie sind oft viel zu teuer. Die Platten sind schnell, da ihre Plattenköpfe effizienter sind und schneller positioniert werden können. Der Wechsel zwischen Sektoren ist die zeitaufwendigste Aktion einer Festplatte. Jedoch wird unter Linux, im Gegesatz zu MS-DOS zum Beispiel, dieser Tatsache Rechnung getragen, in dem die Information nicht in der gleichen Reihenfolge, in der sie benötigt werden, abgespeichert werden. Vielmehr merkt sich das System die Anfragen und bedient sie in der effektivsten Reihenfolge. Es gibt weitere Strategien, die zur Leistungsteigerung beitragen, zum Beispiel die Minimierung von Festplattenzugriffe, durch Cachen der Daten im Speicher. Die Umdrehungsgeschwindigkeit von Festplatten ist oft gar nicht so unterschiedlich. Vielmehr unterscheiden sie sich bei der Dichte und der Anzahl der Köpfe, wodurch die Transferrate doch stark beeinflußt wird. Diese Werte müssen berücksichtigt werden. Alles in allem sollten möglichst SCSI Festplatten mit ähnlichen Werten verwendet werden, nicht unbedingt die teuersten. Die Geschwindigkeit des RAID Systemes wird durch den parallelen Einsatz der Geräte und nicht durch deren einzelne Leistung erreicht.

Wichtig ist, daß das Linux System von einer Platte starten muß, die nicht zum RAID Verband gehört und möglichst klein sein sollte, damit das Wurzelverzeichnis relativ leer ist.

Merkmale eines SCSI Systemes

Es ist angebracht, ein bischen mehr auf die relevanten Merkmale einer Platte einzugehen.
 

Name Busbreite in Bits Anzahl von Geräten MB/s Anschluß  Max. Kabellänge 
SCSI-1 8 7 5 50 polig LowDens 6 m 
SCSI-2
(alias) Fast SCSI, Narrow SCSI
8 7 10 50 Pins HighDens 3 m 
SCSI-3
(alias) Ultra SCSI, Fast20
8 7 20 50 polig HighDens 3 m 
Ultra Wide
(alias) Fast SCSI-3
16 15 40 68 polig HighDens 1.5 m 
Ultra2 16 15 80 68 polig HighDens 12 m 

Ein RAID System wird von mehreren verschiedenen Festplattenpartitionen gebildet, als Ergebnis erhält man aber eine einzelne logische Partition einer einzelnen Platte, auf denen man keine weiteren Partitionen anlegen kann. Der Name dieses logischen Gerätes ist "Metadisk".

IDE Platten haben unter Linux Gerätedateien mit den Namen /dev/hd..., während die zu den SCSI Geräten gehörenden auf die Namen /dev/sd... hören. Für Metadisks sind das entsprechend /dev/md..., sobald später der Kernel mit den entsprechenden Optionen erzeugt worden ist. Für diese Geräte sollten dann folgende Einträge da sein:

brw-rw----   1 root     disk       9,   0 may 28  1997 md0
brw-rw----   1 root     disk       9,   1 may 28  1997 md1
brw-rw----   1 root     disk       9,   2 may 28  1997 md2
brw-rw----   1 root     disk       9,   3 may 28  1997 md3
Das erste Ziel sollte sein, die Zugriffszeiten für das Swapping so klein wie möglich zu machen. Am besten verwendet man dafür eine kleine Metadisk im RAID System oder man verteilt den Swapspeicher (wie sonst üblich) auf alle physikalischen Platten. Werden mehrere Swap Partitionen verwendet, jede auf einer anderen Platte, so wird das Swap Management von Linux die Last gleichmäß auf ihnen verteilen. Ein RAID System ist in diesem Falle unnötig.

RAID Arten

RAID0 (Stripping mode)
In diesem Modus werden die Platten alternativ abwechselnd verwendet, jeder Block kann sich auf irgendeiner Platte befinden, wodurch eine höhere Effizienz erreicht wird. Da die Wahrscheinlichkeit für das Auffinden eines Blockes einer Datei für alle Platten gleich ist, werden alle Platten simultan verwendet, wodurch die Leistung der Metadisk fast n-mal höher, als die einer einzelnen ist.
RAID1
Dieser Modus zielt auf die höchste Sicherheit der Daten ab. Datenblöcke werden auf allen physikalischen Platten dupliziert (jeder Block der virtuellen Platte hat einen identischen Block auf jedem physikalischen Gerät). Durch diese Konfiguration ist die Leseoperation n-mal schneller (bei n Geräten), verglichen mit der Operation einer einzelnen Platte, die Schreiboperation jedoch recht langsam. Eine Leseoperation kann n Blöcke parallel einlesen, von jedem Gerät ein Block. Bei einer Schreiboperation wird ein Block n mal dupliziert, für jede physikalische Platte.
Die Speicherkapazität betreffend wird bei dieser Anordnung kein Vorteil erzielt.
RAID4
(RAID2 und RAID3 werden nicht mehr verwendet).
Hier wird versucht, die Vorteile von RAID0 und RAID1 zu verbinden. Daten werden organisiert, indem die Methoden beider Modi kombiniert werden. Die physikalischen Platten 1 bis n-1 werden im Modus RAID0 organisiert, während die n-te Platte die Parität der einzelnen Bits der korrespondierenden Blöcke auf den Platten 1 bis n-1 sichert. Sollte eine der Platten ausfallen, so können die Daten über die Paritätsinformationen der n.ten Platte wiedergewonnen werden. Die Effizienz einer Leseoperation ist n-1, die einer Schreiboperation 1/2 (da nun das Schreiben eines Datenblockes auch bedeutet, auf die n-te Platte zu schreiben) - verglichen mit einer einzelnen Platte. Um die Daten einer zerstörten Platte wiederherzustellen, muß man lediglich die Informationen einlesen und wieder abspeichern (gelesen wird dann nämlich von der Paritätsplatte, beschrieben aber nun das neu installierte Gerät).
RAID5
Ähnlich zu RAID4, außer daß nun die Informationen der Paritätsplatte über alle Festplatten verteilt ist (es existiert keine dedizierte Paritätsplatte mehr). Dadurch wird die Last der Paritätsplatte verteilt, auf die ja unter RAID4 bei jeder Schreiboperation zugegriffen wurde (nun liegen die Paritätsinformationen auf verschiedenen Platten).
 
... Es wird RAID0 wegen seiner Effizienz betrachtet, auch wenn hier die Redundanz fehlt, ...
Es gibt noch andere RAID Kombinationen, die RAID1 und einen anderen Modus kombinieren. Es gibt auch Versuche, Festplattenkompression für die physikalischen Geräte zu ermöglichen, wobei dies nicht unumstritten ist, da der Nutzen der Kompression nicht so ganz klar ist. Sicherlich werden in Zukunft noch weitere Vorschläge auftauchen. Doch erstmal wird nun RAID0 wegen seiner Effizienz betrachtet, auch wenn hier die Redundanz fehlt, die im Falle eines Plattendefektes die Daten erhält. Besteht das RAID System nur aus ein paar Platten (3 oder 4), so ist der Preis der Redundanz recht hoch (ein drittel bzw. ein viertel an Plattenkapazität geht verloren). Redundanz schützt zwar die Daten vor Plattenfehlern, aber nicht vor dem ungewollten Löschen. Deswegen entbindet ein redundantes RAID System nicht von der Verpflichtung, Backups zu machen. Bei einer großen Zahl von Platten (5 oder mehr) fällt die Verschwendung von Festplattenplatz nicht mehr so stark ins Gewicht. Einige 16-Bit SCSI Karten können bis zu 15 Geräte verwalten. In diesem Fall kann man nur zu RAID5 raten.

Sollte man nicht identische Platten verwenden wollen, so sollte man nicht vergessen, daß RAID Systeme immer mit identischen Blöcken aon Informationen arbeiten. Es ist richtig, daß die langsameren Platten mehr beansprucht werden, in jedem Fall weist das RAID System aber immer noch ein besseres Leistungsverhalten auf als eine einzelne Platte. Der Leistungszuwachs durch ein richtig konfiguriertes RAID System ist wirklich spektakulär. Die Leistung steigt fast linear mit der Anzahl der Platten der RAID Anordnung.

Installation eines RAID0 Systemes

Als nächstes wird die Installation eines RAID0 Systemes beschrieben. Sollte der Leser ein RAID System anders, als das hier beschriebene, unter einem 2.0.xx Kernel aufbauen wollen, so muß er sich einen speziellen Patch besorgen.

RAID0 ist nicht redundant, jedoch ist Redundanz in einem System mit einer großen Zahl von Platten angebracht, da hier nicht allzu viel Festplattenkapazität verschwendet wird. Eine einzelne Platten für Redundanz einzusetzen, wenn nur drei Platten zu Verfügung stehen, ist reine Verschwendung. Auch wird durch Redundanz ja nur der Verlust von Informationen abgedeckt, welcher durch physikalische Fehler der Platten bedingt ist, ein eher selteneres Ereignis. Stehen hingegen zum Beispiel zehn Platten bereit, fällt der Einsatz einer Platte für Paritätszwecke nicht so ins Gewicht. Bei einem RAID0 System bedeutet ein Festplattenfehler auf einer Platte den Verlust aller Informationen aller physikalischen Geräte, ordentliche Backup-Maßnahmen sind deshalb angebracht.

Der erste Schritt besteht darin, die entsprechenden Treiber in den Kernel einzubinden. Für RAID unter Linux 2.0.xx sind bestehen die folgenden Möglichkeiten:

   Multiple devices driver support (CONFIG_BLK_DEV_MD) [Y/n/?] Y
      Linear (append) mode (CONFIG_MD_LINEAR) [Y/m/n/?] Y
      RAID-0 (striping) mode (CONFIG_MD_STRIPED) [Y/m/n/?] Y
Nach dem Booten des Systemes mit dem neuen Kernel wird im /proc Verzeichnis ein Eintrag mdstat zu finden sein, der den Status der vier (Standardwert) Geräte, die als md0, md1, md2 und md3 angelegt worden sind, beinhaltet. Da noch keines von ihnen initialisiert wurde, sollten sie als inaktiv gekennzeichnet und noch nicht verwendbar sein.
Die neuen Geräte werden über die folgenden mdutils Werkzeuge verwaltet: Zu finden sind sie unter sweet-smoke.ufr-info-p7.ibp.fr /pub/Linux, sind aber auch oft Teil der Distributionen.

Für Kernel 2.1.62 und höher existiert ein anderes Paket namens RAIDtools, das RAID0, RAID4 oder RAID5 erlaubt.

Im folgenden Beispiel wird gezeigt, wie eine RAID0 Metadisk unter Einsatz von zwei Festplatten, genauer /dev/sdb1 and /dev/sdc1, realisiert wird.
 
Metagerät RAID Modus Disk Partition 1 Disk Partition 1 
/dev/md0 linear /dev/sdb1 /dev/sdc1 

Weitere Partitionen könnten hinzugefülgt werden.

Ist die Metadisk erstmal formatiert, sollte sie unter keinen Umständen mehr verändert werden oder alle Informationen gingen verloren.

mdadd -a
mdrun -a
Nun sollte md0 schon initialisiert sein. Um sie zu formatieren:
mke2fs /dev/md0
und gemountet wird sie:
mkdir /mount/md0
mount /dev/md0 /mount/md0

Sollte bis hierhin alles funktioniert haben, kann der Leser diese Befehle in eines der Bootskripte einfügen, sodaß beim nächsten Neustart die RAID0 Metadisk automatisch gemountet wird. Vor dem automatischen Einbinden ist es aber notwendig einen Eintrag in der Datei /etc/fstab anzulegen, sowie die Kommandos mdadd -a und mdrun -a von einem Skript aus vor dem Mounten auszuführen. Bei einer Debian Distribution wäre die Datei /etc/init.d/checkroot.sh ein guter Ort, um die Befehle ausführen zu lassen, direkt vor dem Remounten des Wurzelverzeichnisses im Lese/Schreibmodus, was durch die Zeile mount -n -o remount,rw / realisiert wird.

Beispiel:

Dies ist die Konfiguration, die ich im Augenblick verwende. Ich habe eine 6.3 GB IDE , eine 4.2 GB und 2 GB SCSI Festplatte.

HD 6.3Gb IDE
/ /bigTemp + /incoming  swap 2Gb(RAID) hda4 

HD 4.2Gb SCSI
C: D:  swap 2Gb(RAID) sda4 

HD 2Gb SCSI
swap 2Gb(RAID) sdb2 

#######</etc/fstab>################################################
# <file system> <mount point>  <type>  <options>     <dump>  <pass>
/dev/hda1       /               ext2    defaults       0       1
/dev/hda2       /mnt/hda2       ext2    defaults       0       2
/dev/md0        /mnt/md0        ext2    defaults       0       2
proc            /proc           proc    defaults       0       2
/dev/hda3        none           swap    sw,pri=10 
/dev/sdb1        none           swap    sw,pri=10 
/dev/sda3        none           swap    sw,pri=10
#########</etc/mdtab>####################################### 
# <meta-device> <RAID-mode> <DskPart1> <DskPart1> <DskPart1> 
/dev/md0         RAID0,8k    /dev/hda4  /dev/sda4 /dev/sdb2

Das Wurzelverzeichnis ist auf der 6 GB Platte, unter hda1 zu finden. Desweiteren ist auf der Platte eine große Partition für downloads aus dem Internet, CD Images, usw. Diese Partition hat nicht allzuviel Last, da sie nicht gar so häufig genutzt wird. Die 4 GB Platte hat keine Partitionen, das die Effizienz des RAID Systemes negativ beeinflußen könnten, da es nur MS-DOS Partitionen sind, welche kaum unter Linux verwendet werden. Die 2 GB Platte wird fast komplett für das RAID System verwendet. Auf jeder Platte ist ein kleiner Berreich, der als Swapspeicher verwendet wird.

Es sollte versucht werden alle Platten (Partitionen) der RAID Anordnung ungefähr die gleiche Größe zu geben, da große Unterschiede die Effizienz beeinträchtigen. Kleinere Differenzen sind dagegen nicht weiter tragisch. Der ganze Speicher wird genutzt, sodaß alle Daten der Partitionen, die eingebunden werden können, genutzt werden, und die anderen frei bleiben.

Das Verwenden von mehreren IDE Platten für ein einzige RAID System ist nicht so effizient, da IDE Platten keinen parallelen Zugriff erlauben. Im Verbund mit mit mehreren SCSI Platten arbeiten IDE aber ganz gut (SCSI Platten können ja parallel verwendet werden).

Literaturverweise


Übersetzung:Harald Radke
Webpage mantained by Miguel Ángel Sepúlveda
© Antonio Castro 1998
LinuxFocus 1999