Software RAID mit MDADM verwalten

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Dieser Artikel beinhaltet die grundlegende Vorgehensweise, ein Array mit MDADM zu erstellen und zu verwalten.

MDADM (multiple disk administration) ist ein Hilfsprogramm für Linux zur Verwaltung eines Software-RAIDs. Mit dem Programm können RAID-Verbünde erstellt, konfiguriert, überwacht und gelöscht werden. MDADM wird als freie Software unter der GNU General Public License (GPL) veröffentlicht.

MDADM erstellt sogenannte multiple devices (kurz MD) aus verschiedenen Block-Devices (wie z.B. einer ganzen Festplatte, einer einzelnen Partition oder einem USB-Stick)

MDADM ist eine praktische Software-RAID-Lösung, die aktiv weiterentwickelt wird. Sie ermöglicht den gleichzeitigen, parallelen Zugriff auf alle Platten. Außerdem sind die erstellten Arrays hardwareunabhängig, dies zufolge ist der Aspekt der Datensicherheit stark erhöht.

Mögliche RAID-Level

  • Linear: Aneinanderhängen von mehreren Partitionen
  • Multipath: Kein RAID, sondern ein Mapping einer Datei auf zwei verschiedene Pfade auf der gleichen Partition (Spiegelung)
  • Faulty: Emuliert ein fehlerhaftes RAID-System für Testfälle
  • Level 0 (Block Level Striping): Aneinanderhängen von mehreren kleinen Block-Devices zu einem großen.
  • Level 1 (Mirror): Spiegelung einer Disk
  • Level 4: Wie Level 0, aber mit einem zusätzlichen Device für Paritätsbits (erhöhte Ausfallsicherheit).
  • Level 5: Wie Level 4, die Paritätsbits werden aber über alle Geräte verteilt.
  • Level 6: Wie Level 5 aber mit zwei unabhängigen Paritätsbits pro Segment (erhöhte Ausfallsicherheit).
  • Level 10: Kombination von Level 0 und Level 1.

Installation von mdadm

Wenn bei der Linux Installation kein RAID erstellt wurden muss das mdadm Paket aus den Repositories installiert werden.

:~$ sudo aptitude install mdadm

Nach der Installation sind keine weiteren Schritte zur Konfiguration nötig und das Tool kann verwendet werden.

Befehle zur Konfiguration und Verwaltung

Grundsätzliche Syntax

mdadm [mode] <raiddevice> [options] <component-devices>

Array erstellen

mdadm --create /dev/md/<Label> --level=<RAID-Level> --raid-devices=<Anzahl der physischen Partitionen im Array> /dev/sdX1 /dev/sdY1

Parameter:

  • --create kann ein optionaler Parameter gegeben werden in welchem ein Label für das RAID festgelegt werden kann. Bsp.: /dev/md/md_1
  • --level=: Spezifiziert den gewünschten RAID-Level. Erlaubte Eingaben sind: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty, container
  • --raid-devices=: Spezifiziert die Anzahl der physischen Partitionen im Software-RAID. Zusätzlich müssen noch die einzelnen Partitionen angegeben werden. Bsp.: --raid-devices=2 /dev/sda2 /dev/sdb3

RAID 0 mit MDADM

Um ein RAID 0 (Block Level Striping) Array zu erstellen werden mindestens 2 Partitionen benötigt. Diese sollten gleich groß, und sich auf verschiedenen physischen Festplatten befinden. Der RAID 0 Array kann mit folgendem Befehl initalisiert werden: mdadm --create /dev/md/<Label> --level=0 --raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1

Beispiel (2 physische Festplatten):

root@swraid:~# mdadm --create /dev/md/md_test --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/md_test started.

RAID 1 mit MDADM

Um ein RAID 1 (Block Level Mirroring) Array zu erstellen werden wiederum mindestens zwei physische Partitonen benötigt. Diese sollten gleich groß und sich auf verschiedenen physischen Festplatten befinden. Der RAID 1 Array kann mit folgendem Befehlt initialisiert werden: mdadm --create /dev/md/<Label> --level=1 --raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1

Beispiel (2 physische Festplatten):

root@swraid:/dev# mdadm --create /dev/md/md_test --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90 
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/md_test started.

Array löschen

Um ein RAID-Array auszubinden muss das Array ausgehängt sein (umount) und der Befehl mdadm --stop /dev/md/<Name des RAID> aufgerufen werden. Dadurch wird das Array zwar aus dem System ausgebunden allerdings bleibt das RAID-Array physisch vorhanden.

Um das Array zu entfernen muss bei jeder Festplatte der Superblock, welcher die Festplatte/Partition als RAID-Device festlegt, auf Null gesetzt werden. Dies kann mit dem Befehl mdadm --zero-superblock /dev/<physische Partition> durchgeführt werden.

Beispiel:

root@swraid:/dev# umount -l /mnt/test
root@swraid:/dev# mdadm --stop /dev/md/md_test
mdadm: stopped /dev/md/md_test
root@swraid:/dev# mdadm --zero-superblock /dev/sdb1
root@swraid:/dev# mdadm --zero-superblock /dev/sdc1

Arrays/Partitionen auflisten

RAID-Arrays können mit zweierlei Befehlen aufgelistet werden --detail bezieht sich auf ein gesamtes aktives Array wohingegen sich --examine auf die einzelnen physichen Devices in einem RAID-Verbund bezieht.

root@swraid:/mnt/test# mdadm --examine --brief --scan  --config=partitions
ARRAY /dev/md/md_test metadata=1.2 UUID=81c1d8e5:27f6f8b9:9cdc99e6:9d92a1cf name=swraid:md_test

Dieser befehlt kann auch mit -Ebsc partitions abgekürzt werden.

root@swraid:/dev/md# mdadm --detail /dev/md/md_test 
/dev/md/md_test:
        Version : 1.2
  Creation Time : Fri Jul  5 09:14:36 2013
     Raid Level : raid0
     Array Size : 16776192 (16.00 GiB 17.18 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jul  5 09:14:36 2013
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : swraid:md_test  (local to host swraid)
           UUID : 81c1d8e5:27f6f8b9:9cdc99e6:9d92a1cf
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

Hotspare

Bei Hotspare Festplatten/Partitionen handelt es sich um Festplatten/Partitionen welche im Normalfall nicht verwendet werden. Diese kommen zum Einsatz wenn eine der aktiven Festplatten/Partitionen des RAID-Verbundes einen Fehler aufweist oder defekt ist. Wenn in einem Software-Raid keine Hotspare Platte definiert ist muss der Rebuild eines defekten RAID-Verbundes manuell gestartet werden. Ist eine Hotspare vorhanden wird mit dem Rebuild automatisch begonnen. Eine Hotspare Festplatte kann mit dem Befehlt mdadm --add /dev/md/<RAID-Name> /dev/sdX1 hinzugefügt werden, wobei der erste Parameter der Name des RAID-Verbundes und der zweite der Name der hinzuzufügenden Festplatte ist. Soll eine Hotspare Festplatte aus dem RAID-Verbund entfernt werden, so muss der Befehl mdadm --remove /dev/md/<RAID-Name> /dev/sdX1 aufgerufen werden. Hierbei ist wiederum der erste Parameter die Bezeichnung des RAID-Verbundes und der zweite die Bezeichnung der Hotspare Festplatte.

Rebuild

Wenn eine Partition/Festplatte einen Defekt(Software oder Hardware) aufweist muss der RAID-Verbund rebuilded werden. Dazu muss zunächst das defekte Device aus dem RAID entfernt werden. Dazu wird der Befehl mdadm --manage /dev/md/<RAID-Name> -r /dev/sdX1 benötigt. Der erste Parameter von bezieht sich auf den RAID-Verbund. Der zweite auf das defekte Device. Wenn keine Hotspare Festplatte zur Verfügung steht muss eine neue Festplatte partitioniert werden. Wichtig dabei ist das die neue Festplatte die selbe partitionierung wie die defekte Festplatte aufweist. Zum Partitionieren einer Festplatte helfen die tools fdisk /dev/sdX, cfdisk /dev/sdX1 sowie parted /dev/sdX1. Ist die neue Festplatte korrekt partitioniert kann sie dem RAID-Verbund wieder hinzugefügt werden. Dies geschieht mit mdadm --manage /dev/md/<RAID-Name> -a /dev/sdX1. Wenn dabei keine Fehler aufgetreten sind, kann mit der eigentlichen Wiederherstellung(Rebuild) begonnen werden. Dazu muss die neue Partition im RAID-Verbund auf "faulty" (=fehlerhaft) gesetzt werden: mdadm --manage --set-faulty /dev/md/<RAID-Name> /dev/sdX1. Dadurch wird der rebuild des RAID-Verbundes angestoßen. Mit watch cat /proc/mdstat kann der Fortschritt des Rebuilds verfolgt werden.

Every 2.0s: cat /proc/mdstat                                                         Fri Jul  5 09:59:16 2013


root@swraid:/dev# watch cat /proc/mdstat 
Personalities : [raid0] [raid1]
md127 : active raid1 sdc1[1] sdb1[0]
      8384448 blocks super 1.2 [2/2] [UU]
      [==============>......]  check = 74.7% (6267520/8384448) finish=0.1min speed=202178K/sec

unused devices: <none>

Sobald der Rebuild des RAID-Verbundes abgeschlossen ist muss die Partition aus dem RAID-Verbund entfernt und wieder hinzugefügt werden um den Status "faulty" zu entfernen. mdadm --manage /dev/md/<RAID-Name> -r /dev/sdX1 zum entfernen und mit mdadm --manage /dev/md/<RAID-Name> -a /dev/sdX1 wieder hinzufügen. Mit dem Befehl mdadm --detail /dev/md/<RAID-Name> kann der Status des RAID-Verbundes noch einmal überprüft werden. Dieser sollte nun den State: clean aufweisen.

E-Mail Adresse für Array-Überwachung einrichten

Um eine Benachrichtigung per E-Mail im Falle eines Defekts zu erhalten kann in der Konfigurationsdatei von mdadm (/etc/mdadm/mdadm.conf) bei MAILADDR root statt root die gewünschte E-Mail Adresse eingetragen werden. Dazu muss ein E-Mail Dienst (postfix, exim, ...) auf dem System konfiguriert sein. /etc/mdadm/mdadm.conf mit einem Editor öffnen und folgende Zeile editieren:

Statt MAILADDR root deshalb eine E-Mail Adresse wie zum Beispiel MAILADDR email@example.com eintragen und abspeichern.

Array überprüfen

Um ein konstantes Monitoring zu betreiben wird das tool checkarray benötigt. Dies kann mit crontab -e in die Liste der Cronjobs eingetragen werden.

/usr/share/mdadm/checkarray --cron --all --quiet


Foto Sebastian Strassner.jpg

Autor: Sebastian Strassner

Sebastian Strassner ist im Technical Support bei Thomas-Krenn tätig. In seiner Abteilung kümmert er sich um typische Support-Aufgaben wie den Aufbau von Testsystemen oder die Betreuung der Kunden bei technischen Problemen. Dabei hat er sich vor allem auf Intel und Linux spezialisiert. In seiner Freizeit arbeitet Sebastian gerne mit Holz, fliegt ein paar Runden mit seinem Quadrocopter oder sitzt auch gerne privat vor dem Rechner.


Das könnte Sie auch interessieren

Linux Software RAID
Linux Software RAID Monitoring Plugin