Lugs Penguin Logo

LUGS - Vorträge: RAID vom 21.10.1999

LUGS

Über die LUGS
Statuten und Protokolle
Sektionen
Terminliste
IRC
Mailinglisten
Kontaktadressen
Mitglied werden
Internes
Mitgliederliste

LINUX

Was ist Linux?
   Screenshots
Distributionen
   kmLinux
Firmen
Ressourcen
LIB

Dokumentation
Events
Projekte
Vorträge
Allgemeines

ChangeLog
Sprache
Galerie

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:

  1. 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.
  2. Die RAID-Devices erzeugen, gruppieren und beim Kernel anmelden mit mdadd -a. Das muss bei jedem Booten ausgeführt werden.
  3. Die RAID-Devices aktivieren und mountbar machen mit mdrun -a. Auch das ist bei jedem Booten nötig.
  4. 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:

  1. Mit mdcreate/etc/mdtab erzeugen.
  2. Ein Konfigurations-File raid.conf erstellen.
  3. Mit mkraid das RAID vorbereiten:
    mkraid /etc/raid.conf
    
  4. Mit mdadd und mdrun das RAID aktivieren und anmelden.
  5. 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.

Powered by Linux, served by Apache / PHP, last changes done 04.02.2008 -- Copyright