Inhaltsverzeichnis

Software-RAID unter Debian Linux erstellen

Ein RAID dient dazu aus mehreren physikalischen Festplatten oder Speichermedien ein logisches Volume aufzubauen. Das kann aus mehreren Motivationen heraus geschehen, zB um den Datendurchsatz des Volumes zu erhöhen (RAID 0) oder um eine Platte zu spiegeln, um die Ausfallsicherheit zu erhöhen (RAID 1) oder um beides zu kombinieren (RAID 10). Daraus ergeben sich mehrere Ableger, welche im Grunde eine dieser beiden Grundfunktionen bereitstellt (zB RAID 5 (single parity) oder RAID 6 (double parity)).

Es gibt auch mehrere Möglichkeiten ein RAID-System zu erstellen. Zum Einen das Hardware-RAID, welches idR durch einen eigenen RAID-Controller im System realisiert wird und zum Anderen durch ein Software-RAID, welches idR durch eine geeignete Software im Betriebssystem realisiert wird. Letzteres hat den Vorteil, dass es kostengünstig zu realisieren ist; hat aber auch den Nachteil, dass es Leistung bzw Ressourcen des Systems benötigt, etwa zum Berechnen der Parität.

Dieses Howto beschreibt das Anlegen eines zusätzlichen RAID 0, RAID 1; RAID 10 und RAID 5 als Software-RAID in Linux Debian Squeeze.

Dazu wird das Paket »mdadm«1) (Multiple Disk ADMinistration) benötigt:

# aptitude install mdadm

Sie werden unmittelbar noch während der Installation von »mdadm« mit einem Konfigurator konfrontiert, welcher von Ihnen wissen will, ob ein Festplattenverband als Startlaufwerk verwendet wird. Da wir einen MD-Verbund nur als zusätzliches Laufwerk ins System einbinden, wählen wir hier »none«:

Danach laden wir die benötigten Kernel-Module, um uns einen Reboot des Systems zu sparen:

# modprobe -a md linear multipath raid0 raid1 raid5 raid6 raid10

Danach können Sie den Status der md-Konfiguration abrufen:

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
unused devices: <none>

Für die weitere Vorgehensweise benötigen Sie natürlich noch die mindestens geforderte Anzahl an Festplatten, welche an den jeweiligen RAID-Level gestellt werden (RAID 0 → 2; RAID 1 → 2; RAID 5 → 3; RAID 6 und RAID 10 → 4 Festplatten).

RAID erstellen

Um ein RAID zu erstellen verwenden Sie das Tool »mdadm« mit den passenden Parametern. zB:

# mdadm --create --verbose /dev/md0 --auto=yes --level=1 --raid-devices=2 /dev/sdb /dev/sdc

»mdadm --create« legt hier ein neues RAID an; das logische Device »/dev/md0« ist die dazugehörige Gerätedatei, welche später dann auch zB in der Datei »/etc/fstab« zum Mounten verwendet wird; »--level=1« gibt den zu verwendenden RAID-Level an (Hier RAID 1 == gespiegelte Platte); »--raid-devices=2« gibt die Anzahl der zu verwendenden Festplatten an und am Ende kommen noch die Festplatten, welche schließlich verwendet werden sollen.

Der Status des RAID »/dev/md0« kann nun abgerufen werden:

# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Dec 25 22:06:15 2012
     Raid Level : raid1
     Array Size : 1048564 (1024.16 MiB 1073.73 MB)
  Used Dev Size : 1048564 (1024.16 MiB 1073.73 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Dec 25 22:06:15 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : debian606x86RAID:0  (local to host debian606x86RAID)
           UUID : 3e50691c:78972c58:3901a5ad:d612dc98
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

Des Weiteren wird noch ein RAID 5 aus drei weiteren Platten angelegt:

# mdadm --create --verbose /dev/md1 --auto=yes --level=5 --raid-devices=3 /dev/sdd /dev/sde /dev/sdf

# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Tue Dec 25 23:39:04 2012
     Raid Level : raid5
     Array Size : 2096128 (2047.34 MiB 2146.44 MB)
  Used Dev Size : 1048064 (1023.67 MiB 1073.22 MB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Tue Dec 25 23:39:04 2012
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : debian606x86RAID:1  (local to host debian606x86RAID)
           UUID : 8e21dced:c2b36052:da3c78b3:e1f8b294
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       48        0      active sync   /dev/sdd
       1       8       64        1      active sync   /dev/sde
       2       8       80        2      active sync   /dev/sdf

Dateisystem anlegen und Volume mounten

Legen Sie auf dem angelegten Volume ein Dateisystem an (zB):

# mkfs.ext3 /dev/md0
# mkfs.ext3 /dev/md1

Die Mountpoints angelegt:

# mkdir /raid1 /raid5

Und mounten Sie im Anschluss das neue Volume:

# mount -t ext3 /dev/md0 /raid1
# mount -t ext3 /dev/md1 /raid5

Die Raid-Arrays sind nun einsetzbar. Damit sie beim Systemstart automatisch eingebunden werden, müssen Sie noch passende Einträge in die Datei »/etc/fstab« vornehmen.

Defekte Platten ersetzen

Fallt nun eine Platte komplett aus, kann zB ein RAID1,5,6 oder 10 dieses kompensieren und weiterhin Zugriff auf die Daten ermöglichen. Hier an einem Beispiel mit einem RAID 1 wird das uA so angezeigt:

# mdadm --detail /dev/md2
/dev/md2:
        Version : 1.2
  Creation Time : Tue Dec 25 19:04:55 2012
     Raid Level : raid1
     Array Size : 1048564 (1024.16 MiB 1073.73 MB)
  Used Dev Size : 1048564 (1024.16 MiB 1073.73 MB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Tue Dec 25 19:14:18 2012
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : debian606LVMTS:2  (local to host debian606LVMTS)
           UUID : a69be700:f22d4b68:e334dab3:2b83286e
         Events : 38

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       16        1      active sync   /dev/sdb

Um die ausgefallene Platte nun zu ersetzen, fügen Sie eine neue Platte dem RAID hinzu:

# mdadm --manage /dev/md0 --add /dev/sdb 
mdadm: added /dev/sdb

Note: Hier kommt eine unangenehme Eigenschaft der Unix Geräte Dateien ins Spiel. Fällt nun eine Platte (zB »/dev/sdd«) komplett aus, rutschen alle anderen Festplatten in den Gerätedateien nach. Das bedeutet, dass die Platte, welche vorher »/dev/sde« gewesen ist, jetzt »/dev/sdd« ist uns. Angesprochen werden die RAIDs aber immer noch korrekt:

In einem intakten Festplattenverband schaut die Zuordnung der Festplatten zB wie folgt aus:

# blkid
/dev/sda1: UUID="afbaa7df-912f-4705-aa9a-8cf015f0c1b7" TYPE="ext3" 
/dev/sda5: UUID="92416d64-ae35-4d96-8a14-d1a9515d5625" TYPE="ext3" 
/dev/sda6: UUID="89d23849-546b-4cee-9056-ec3b0a3fd4f8" TYPE="ext3" 
/dev/sda7: UUID="93996859-1ece-483a-9fd7-6135ab485da9" TYPE="swap" 
/dev/sda8: UUID="b975705c-9961-47fe-80ba-d5026c5a90b8" TYPE="ext3" 
/dev/sda9: UUID="d59c8583-9323-43b0-9c3c-3b147e47821a" TYPE="ext3" 
/dev/sdb: UUID="f166056f-c54e-344a-5afc-5bb82634e797" LABEL="debian606LVMTS:0" TYPE="linux_raid_member" 
/dev/sdc: UUID="f166056f-c54e-344a-5afc-5bb82634e797" LABEL="debian606LVMTS:0" TYPE="linux_raid_member" 
/dev/md0: UUID="3a68f04e-9fbe-44cd-8b25-966cbe945a94" TYPE="ext3" SEC_TYPE="ext2" 
/dev/sdd: UUID="6a78842b-4763-68d5-c8c9-6ebcd91029e5" LABEL="debian606LVMTS:1" TYPE="linux_raid_member" 
/dev/sde: UUID="6a78842b-4763-68d5-c8c9-6ebcd91029e5" LABEL="debian606LVMTS:1" TYPE="linux_raid_member" 
/dev/sdf: UUID="6a78842b-4763-68d5-c8c9-6ebcd91029e5" LABEL="debian606LVMTS:1" TYPE="linux_raid_member" 
/dev/md1: UUID="a2f3aee1-dc81-425b-b2c2-a970d110e687" TYPE="ext3" SEC_TYPE="ext2"

Nachdem zB die Platte »/dev/sdd« ausgefallen ist, zeigt sich die Zuordnung wie folgt:

RAID löschen

Um ein RAID wieder zu löschen, müssen Sie es zuerst unmounten:

# unmount /dev/md0

Das zu löschende Volume anhalten:

# mdadm --stop /dev/md0

Und die Superblöcke auf den RAID-Mitgliedern löschen:

# mdadm --zero-superblock /dev/sd[b-c]

Danach ist das RAID nicht mehr verfügbar:

# mdadm --detail /dev/md0
mdadm: cannot open /dev/md0: No such file or directory