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.
:~$ sudo apt install mdadm
Nach der Installation sind keine weiteren Schritte zur Konfiguration nötig und das Tool kann verwendet werden.
Im /etc Verzeichnis befindet sich das Unterverzeichnis mdadm wo wir die Konfigurationsdatei mdadm.conf
für unser mdadm Tool finden.
Damit wir nicht in die md127 Falle tappen. wir also die md Devicenamen nicht nach Hostname benannt bekommen müssen wir noch eine kleine Anpassung tätigen.
In der /etc/mdadm/mdadm.conf
sollte ein Eintrag vorhanden sein HOMEHOST
. Wenn dieser nicht vorhanden ist bitte eintragen und mit dem Wert <ignore> versehen. Sollte dieser Eintrag vorhanden sein dann bitte den vorhandenen Wert in <ignore> ändern.
Der Wert <system> sorgt dafür das unser Label und Name den Hostname Wert unseres Systems bekommen.
Danach müssen wir unsere neue Konfiguration noch in die intiramfs speichern
update-initramfs -u
Haben wir ein aktives RAID können wir mit:
root@debian:# mdadm --examine /dev/sdc1
uns Metadaten der Partition für das RAID anschauen und sehen dort auch Name:
Sollte der Name nicht korrekt sein kann man diesen Wert im Nachgang noch ändern. Das Ändern der Nummer kann durch einmaliges manuelles Zusammensetzen erfolgen, beispielsweise auf 0:
# mdadm --stop /dev/md127 # mdadm --assemble /dev/md0 --update=name /dev/sdx3 /dev/sdy3 # mdadm --stop /dev/md0
mdadm [mode] <raiddevice> [options] <component-devices>
mdadm --create /dev/md<Label> --name=<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
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> –name=<Label> –level=0 –raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1
Beispiel (2 physische Festplatten):
root@debian:~# mdadm --create /dev/md0 --name=0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
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> –name=<Label> –level=1 –raid-devices=<Anzahl> /dev/sdX1 /dev/sdY1
Beispiel (2 physische Festplatten):
root@debian:/dev# mdadm --create /dev/md0 --name=0 --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/md0 started.
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@debian:/dev# umount -l /mnt/test root@debian:/dev# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 root@debian:/dev# mdadm --zero-superblock /dev/sdb1 root@debian:/dev# mdadm --zero-superblock /dev/sdc1
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@debian:/mnt/test# mdadm --examine --brief --scan --config=partitions ARRAY /dev/md0 metadata=1.2 UUID=81c1d8e5:27f6f8b9:9cdc99e6:9d92a1cf name=0
root@debian:/dev/md# mdadm --detail /dev/md0 /dev/md0: 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 : 0 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
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.
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@debian:/dev# watch cat /proc/mdstat Personalities : [raid0] [raid1] md0 : 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.