# Mdadm

mdadm (für multiple disk administration, früher auch mdctl) 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.

## Features

mdadm erstellt sogenannte multiple devices (kurz MD) aus verschiedenen Block-Devices (wie z. B. einer ganzen Festplatte, einer einzelnen Partition oder einem USB-Stick). Das MD kann dann wiederum vom MD-Gerätetreiber als Block-Device verwendet werden. mdadm unterstützt folgende Arten von MDs:
* 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 Gerät für Paritätbits (erhöhte Ausfallsicherheit).
* Level 5: Wie Level 4, aber die Paritätbits werden über alle Geräte verteilt.
* Level 6: Wie Level 5, aber mit zwei zusätzlichen Geräten für zwei unabhängige Paritätsbits pro Segment (weiter erhöhte Ausfallsicherheit).
* Level 10: Kombination von Level 0 über Level 1.
Mehr über die verschiedenen RAID-Levels findet sich auch im Artikel RAID#Die gebräuchlichen RAID-Level im Einzelnen.
Vor dem Linux-Kernel 2.6 konnte mdadm die MDs als /dev/mdn (wobei n eine Nummer zwischen 0 und 99 ist) einbinden, der Kernel 2.4 auch als /dev/md/name, wobei name ein frei wählbarer Name ist. Diese Geräte waren nicht partitionierbar. Der Kernel 2.6. führte neue partitionierbare Arrays ein. Die Geräte heißen nun /dev/md_d2p3 (die 3. Partition des 2. MDs). Seit Kernel 2.6.28 können auch die alten MDs partitioniert werden. Sie heißen dann /dev/md2p3 (die 3. Partition des 2. MDs).

### Booten von einem Software-Raid

Grundsätzlich ist das Problem beim Booten eines Kernels, welcher sich auf einem MD befindet, dass im BIOS oder Bootloader keine Unterstützung für die verwendeten RAID-Algorithmen vorliegt. Inzwischen ist mit GRUB2 und dessen Modulen die Möglichkeit geschaffen worden, eine simple Software-RAID-Unterstützung im Bootloader bereitzustellen. So ist es inzwischen auch möglich, einen Kernel aus einem LVM-Volume aus einem Softraid zu booten. Der Bootloader und dessen Module befinden sich bei für MBR partitionierten Festplatten in den ersten Sektoren und bei GPT partitionierten in einer separaten Partition.

## Mdmpd

Mdmpd ist ein Computerprogramm für GNU/Linux-Betriebssysteme. Es ist Bestandteil des mdadm-Paketes und wurde ursprünglich von der Firma Red Hat entwickelt.
Das Programm wird beim Systemstart als Daemon geladen und danach zur Überwachung von RAID-Verbünden genutzt. Der Name des Programms mdmpd ist ein Synonym für engl. daemon to monitor MD multipath devices (dt. Hintergrunddienst zur Überwachung von Mehrfachübertragungen auf Festplatten).
Speicherlösungen in Unternehmen benötigen oft mehrere Möglichkeiten zur Kommunikation mit einem einzelnen Laufwerk innerhalb eines RAID-Verbundes. So kann das System bei einer Störung des Controllers, an dem ein Laufwerk angeschlossen ist, problemlos die Kommunikation mit dem Laufwerk über einen anderen Controller erledigen und bleibt somit voll funktionsfähig. Diese Lösung wird auch multipath disk access (Zugriff auf Laufwerke über mehrere Kanäle) genannt und zum Beispiel bei SAS-Festplatten verwendet. Die Implementierung dieser Zugriffsart erfolgt über die Software Raid Funktionalität des Linux-Kernels, auch als md-Treiber (multiple disk) bekannt.

### Funktionsweise

Der Bestandteil des md-Treibers im Kernel erledigt ausschließlich I/O-Anfragen an das entsprechende Laufwerk und die Fehlerbehandlung des aktiven Kanals. Eine Überprüfung, ob ein ehemals fehlerhafter Kanal wieder funktionsfähig ist, findet nicht statt.
Beim Systemstart führt der Daemon eine initiale Überprüfung des RAID-Verbundes und eine Speicherung dieses Status durch, danach läuft der Daemon im Hintergrund und wartet auf weitere Benachrichtigungen des Kernels.
Nach dem Empfang einer solchen Nachricht prüft der Daemon, ob der aktive Kanal zu einem Laufwerk ausgefallen ist. Danach wird alle 15 Sekunden eine Anfrage durch diesen Kanal geschickt, bis der Ausfall durch den Wechsel des Kanals behoben wurde. Sobald die Störung behoben wurde, fügt der Daemon den (jetzt nicht mehr aktiven) Kanal dem ursprünglichen RAID als Backup-Kanal hinzu.
Bei der Benutzung von procfs, einem dynamischen Dateisystem zur Speicherung systemrelevanter Daten, werden in der virtuellen Datei /proc/mdstat alle konfigurierten RAID-Verbünde sowie weitere Informationen über deren Zustand gespeichert. mdmpd benötigt diese Informationen zur Lokalisierung des RAID-Verbundes, zur Identifikation der Bestandteile des RAID-Verbundes sowie zur Benachrichtigung über relevante Ereignisse.

## Weblink

* man-Page von mdadm (englisch)