F.3. Verwendung von mdadm zur Konfiguration von RAID-basiertem Speicher und Multipath-Speicher

Ähnlich wie andere Tools, einschließlich dem raidtools-Paketsatz, kann der Befehl mdadm dazu benutzt werden, alle notwendigen Funktionen in Bezug auf die Verwaltung von Mehrfachgeräte-Sätzen zu verrichten. In diesem Abschnitt zeigen wir wie mdadm benutzt werden kann:

F.3.1. Erstellen eines RAID-Gerätes mit mdadm

Um ein RAID-Gerät zu erstellen, bearbeiten Sie die Datei /etc/mdadm.conf, um angemessene DEVICE und ARRAY-Werte festzulegen:

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

In diesem Beispiel benutzt die DEVICE-Zeile traditionelles Dateinamen-Globbing (siehe die glob(7) man-Seite für weitere Informationen), um die folgende SCSI-Geräte festzulegen:

Die ARRAY-Zeile definiert ein RAID-Gerät (/dev/md0), welches die SCSI-Geräte miteinschließt, die in der DEVICE-Zeile festgelegt sind.

Vor der Erstellung oder Nutzung jeglicher RAID-Geräte, zeigt die Datei /proc/mdstat keine aktiven RAID-Geräte an:

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

Als nächstes benutzen Sie die oben angeführte Konfiguration und den Befehl mdadm, um ein RAID-0-Array zu erstellen:

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

Einmal erstellt, kann das RAID-Gerät jederzeit nach Statusinformationen abgefragt werden. Das folgende Beispiel zeigt den Output des Befehls mdadm --detail /dev/md0:

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. Erstellen eines Multipath-Gerätes mit mdadm

Zusätzlich zur Erstellung von RAID-Arrays, kann mdadm auch dazu verwendet werden, Vorteile aus Hardware zu ziehen, die mehr als einen I/O-Pfad zu individuellen SCSI LUNs (Plattenlaufwerken) unterstützt. Das Ziel von Multipath-Speicherung ist die kontinuierliche und anhaltende Datenverfügbarkeit im Falle eines Hardwarebetriebsausfalles oder individueller Sättigung von Pfaden. Da diese Konfiguration mehrere Pfade enthält (jeder agiert als unabhängiger virtueller Controller), die auf eine gebräuchliche SCSI LUN (Festplattenlaufwerk) zugreifen, ermittelt der Linux Kernel jede gemeinsam benutzte Festplatte einmal "durch" jeden einzelnen Pfad. In anderen Worten ist die SCSI LUN (Fesplattenlaufwerk), bekannt als /dev/sda auch als /dev/sdb, /dev/sdc und so weiter, abhängig von der spezifischen Konfiguration, zugänglich.

Sodass immer ein einzelnes Gerät erreichbar bleibt, im Falle dass ein I/O Pfad fehlschlägt oder gesättigt wird, beinhaltet mdadm einen zusätzlichen Parameter zu dessen ––level-Option. Dieser Parameter — multipath — weisst den md-layer im Linux Kernel an, I/O-Anfragen von einem Pfad zum anderen im Falle eines I/O-Pfad Fehlverhaltens zu rerouten .

Um ein Multipath-Gerät zu erstellen, bearbeiten Sie die Datei /etc/mdadm.conf, um die Werte in den DEVICE und ARRAY-Zeilen festzulegen, welche Ihre Hardwarekonfiguration wiederspiegeln.

AnmerkungHinweis
 

Im Gegensatz zum vorherigen RAID-Beispiel (wobei jedes Gerät, das in /etc/mdadm.conf festgelegt ist, verschiedene physikalische Plattenlaufwerke darstellen muss) verweist jedes Gerät in dieser Datei auf das selbe gemeinsam benutzte Plattenlaufwerk.

Der Befehl, der zur Erstellung eines Multipath-Gerätes benutzt wird, ist ähnlich dem Befehl zur Erstellung eines RAID-Gerätes. Der Unterschied ist die Ersetzung eines RAID-Level-Parameters mit dem multipath-Parameter:

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

Aufgrund der Länge der mdadm-Befehlszeile, wurde diese in zwei Zeilen unterteilt.

In diesem Beispiel besteht die Hardware aus einer SCSI LUN, dargestellt als vier separate SCSI-Geräte, wobei jedes einzelne Gerät auf den selben Speicher über verschiedene Pfade zugreift. Ist das Multipath-Gerät /dev/md0 einmal erstellt, so werden alle entsprechenden I/O-Operationen auf /dev/sda1, /dev/sdb1, /dev/sdc1 oder /dev/sdd1 gerichtet (abhängig davon, welcher Pfad gegenwärtig aktiv und betriebsbereit ist).

Die Konfiguration von /dev/md0 kann mittels mdadm --detail /dev/md0 eingehender betrachtet werden, um sicher zu stellen, dass es sich dabei um ein Multipath-Gerät handelt:

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

Ein anderes Merkmal von mdadm ist die Fähigkeit das Entfernen eines Gerätes von einer Betriebskongiguration zu erzwingen (egal, ob es dabei um ein Mitglied eines RAID-Arrays oder um einen Pfad in einer Multipath-Konfiguration handelt). Im folgenden Beispiel ist /dev/sda1 als fehlerhaft geflaggt, wird sodann entfernt, um schlussendlich wieder zur Konfiguration hinzugefügt zu werden. Auf eine Multipath-Konfiguration würde dies zu diesem Zeitpunkt in puncto I/O-Aktivitäten keine Auswirkungen haben:

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#