Am 21.10.1999 hielt Philipp Frauenfelder einen Vortrag über Software
RAID. Diese Zusammenfassung hält sich nur bedingt an den Inhalt des
Vortrags, da dieser unvollständig war.
RAID (Redundant Array of Inexpensive (bzw. Independent) Disks) ist
eine Möglichkeit, mehrere Festplatten (oder Partitionen) zu einer
Einheit zusammenzufassen und so eine grössere, schnellere oder
sicherere Platte zu simulieren.
Verschiedene Levels
- 0 - Striping: die Schreib- und Lesezugriff geschehen
parallel; schneller, aber gefährlicherer Level: es muss nur eine der
benutzten Platten defekt sein, damit die Daten auf allen Platten
verloren sind.
- 1 - Mirroring: das Lesen ist parallel, Schreiben auch,
allerdings wird auf die langsamste Platte gewartet. Dadurch
verlangsamt sich das Schreiben, wird aber auch sicherer; die beiden
Partitionen müssen gleich gross sein.
- 3: die Daten werden auf drei Partitionen verteilt, wobei
die ersten zwei sich durch Striping (wie 0) die Daten teilen und die
dritte (Parity-Disk) Redundanzinformationen enthält. Falls eine
der drei Platten ausfällt, lassen sich die Daten immer noch
rekonstruieren. Dieser Level wird eher selten benutzt. Grosser
Nachteil: die Parity-Disk kann zum Flaschenhals werden, da bei allen
Schreib-Operationen auf diese Platte zugegriffen wird.
- 5: wie Level 3, aber die Redundanzinformationen werden
auf die verschiedenen Disks verteilt (keine Parity-Disk), um das
Problem des Flaschenhalses aus Level 4 zu vermeiden.
Software-RAID für Linux
RAID bietet Schutz vor Ausfällen einer Platte, bei
Mehrfachausfällen gibt es noch keine Software-Möglichkeiten
für Linux; es existieren allerdings Algorithmen, die vor
Mehrfachausfällen schützen. Vor Stromausfällen schützt RAID
überhaupt nicht.
Die raidtools (für Kernel 2.2.x) sind sehr ausgereift und
stabil; einzig Level 5 ist kompliziert zu bedienen.
RAID 0
Einrichtung
Im Kernel muss RAID aktiviert sein (CONFIG_BLK_DEV_MD=y) und die
gewünschten Levels müssen ausgewählt werden (auch als Modul
möglich).
Anschliessend führen folgende Schritte zu einem RAID 0 Device:
- Mit mdcreate einen Eintrag in /etc/mdtab
erzeugen.
mdcreate -c8k raid0 /dev/md0 /dev/sdb2 /dev/sdc2
erzeugt
/dev/md0 raid0,8k,0,b58e0d52 /dev/sdb2 /dev/sdc2
in /etc/mdtab. Dieser Befehl ist nur einmal bei der
Einrichtung der RAID-Devices nötig.
- Die RAID-Devices erzeugen, gruppieren und beim Kernel anmelden
mit mdadd -a. Das muss bei jedem Booten ausgeführt
werden.
- Die RAID-Devices aktivieren und mountbar machen mit mdrun
-a. Auch das ist bei jedem Booten nötig.
- Ein Filesystem anlegen. Zum Beispiel mit mke2fs
/dev/md0. Das ist nur einmal bei der Einrichtung nötig.
Die Befehle mdadd und mdrun werden von den modernen
Distributionen automatisch beim Booten ausgeführt.
In /proc/mdstat stehen dann Statusinformationen zu den
einzelnen Devices zur Verfügung. Das kann zum Beispiel so
aussehen:
Personalities : [2 raid0]
read_ahead 128 sectors
md0 : active raid0 sdb2 sdc2 3085920 blocks 8k chunks
md1 : active raid0 sdb7 sdc7 1861984 blocks 4k chunks
md2 : inactive
md3 : inactive
Performance
In diesem Bereich unterschieden sich Philipps Messungen stark von den
Zahlen, die die Zuhörer boten: Während Philipps Zahlen eher
enttäuschend aussahen (kaum höherer Durchsatz als mit einer Platte
allein), wurde für eine ideale Konfiguration (2 SCSI-Controller mit 6
Disks) fünffacher Durchsatz genannt.
Messung mit einer Platte:
File './Bonnie.4387', size: 104857600
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
100 1881 94.6 12682 46.3 4792 32.8 1900 92.1 13012 37.2 158.4 5.2
und mit zwei Platten (4k chunks):
File './Bonnie.1629', size: 104857600
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
-------Sequential Output-------- ---Sequential Input-- --Random--
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
100 1940 97.5 16961 84.0 5949 49.5 1926 93.2 14743 57.6 230.3 6.6
Als Grafiken (je <5kB): Durchsatzraten und Zugriffe pro Sekunde / CPU-Auslastung mit
verschiedenen Blockgrössen.
RAID 1
Einrichtung
Im Unterschied zu RAID 0 braucht RAID 1 ein zusätzliches
Konfigurations-File (neben /etc/mdtab). Dieses
raid.conf sieht dabei so aus:
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
device /dev/sdb6
raid-disk 0
device /dev/sdc6
raid-disk 1
Eingerichtet wird so ein RAID 1 mit folgenden Befehlen:
- Mit mdcreate/etc/mdtab
erzeugen.
- Ein Konfigurations-File raid.conf erstellen.
- Mit mkraid das RAID vorbereiten:
mkraid /etc/raid.conf
- Mit mdadd und mdrun das RAID aktivieren und
anmelden.
- Mit mke2fs ein Filesystem erzeugen.
Dabei ist wie beim RAID 0 nur der Schritt mit mdadd und
mdrun beim nächsten Booten nötig, die meisten modernen
Distributionen erledigen das allerdings automatisch.
Wiederherstellung nach einem Ausfall
Wie schon erwähnt schützt RAID gegen defekte Festplatten und nicht
gegen Stromausfall. Falls eine Platte defekt ist, diese austauschen
und dann nach einem eventuellen fsck auf der übriggebliebenen
Platte: zuerst die Daten kopieren und dann den RAID-Superblock auf der
neuen Platte wiederherstellen. Das kann man zum Beispiel so erledigen
(es gibt noch andere Möglichkeiten: siehe Dokumentation):
dd of=/dev/sdc6 if=/dev/sdb6
mkraid raid.conf -f --only-superblock
Der zweite Befehl ist nötig, da sich die beiden Platten im
RAID-Superblock unterscheiden. Dieser muss wiederhergestellt
werden. Alternativ zu diesen beiden Befehlen kann auch ckraid
benutzt werden.
Falls schlimmere Sachen passiert sind (Stromausfall), dann ist auch
die Wiederherstellung komplizierter: vor allem, wenn man nicht sicher
ist, auf welcher Platte die guten Daten und auf welcher die schlechten
sind.
Weitere Informationen
- HOWTO: Multi Disk System Tuning (Multi-Disk-HOWTO)
- Mini-HOWTO: Software-RAID
- Man-Pages von mdcreate(8), mdadd(8), mdtab(5), mkraid(8),
ckraid(8)
- Dokumentation, die dem raidtools Paket beiliegt
- Gelbe
Seiten von Transtec (Abschnitt 4.2.4)
Zusammenfassung des Vortrages durch Franziska Meyer.
|