Werkzeug zur Verwaltung von Raid-Verbunden.

Homepage: http://packages.qa.debian.org/m/mdadm.html

Lizenz: GPL

Tipps & Tricks

Mini-Howto

Scenario:

Einrichten

mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/hda13 /dev/sda10
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/hda14 /dev/sda11
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdc1 --auto md //legt das md device automatisch an z.b. bei udev
missing lässt in diesem Fall das erste Laufwerk frei _U z.B. zum umkopieren von Daten aufs Raid (Spiegel ohne die erste Platte)

Jetzt müssen die 2 RAID-Partitionen mit Dateisystemen versehen werden:

mkfs.reiserfs /dev/md0
mkfs.ext3 /dev/md1

Kontrolle:

cat /proc/mdstat

Die /etc/fstab ändern:

...
/dev/md0 /work reiserfs auto,users,exec 0 0
/dev/md1 /home ext3 auto,users,noexec 0 0

/etc/mdadm/mdadm.conf erstellen:

cd /etc/mdadm
echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > mdadm.conf
mdadm --detail --scan >> mdadm.conf

Unter udev: Regeln zum Erstellen der Gerätedateien beim Booten: (Dies ist nicht nötig wenn regelkonforme Gerätedateinamen verwendet werden, also md0, md1 etc!)

grep ^M /etc/udev/links.conf && grep -w md0 || echo -e "M md0 b 9 0\nM md1 b 9 1" >>/etc/udev/links.conf

Bei Debian mit nicht regelkonformen Gerätedateien:

mknod /lib/udev/devices/my-raid-array1 b 9 0 ; mknod /lib/udev/devices/my-raid-array2 b 9 1

Ohne udev:

mknod /dev/md0 b 9 0 ; mknod /dev/md1 b 9 1

Bootvorgang

mdadm --assemble /dev/md0 /dev/hda13 /dev/sda10
mdadm --assemble /dev/md1 /dev/hda14 /dev/sda11

Alternativ kann man die RAID*-Funktionen auch fest in den Kernel einbinden (nicht-modular!), dann werden bei 0xFD Partitionstyp die Partitionen automatisch zu md-Devices assembliert und gestartet.

Debian: Automatisches Auswerten der Datei /etc/mdadm/mdadm.conf geschieht im Skript /etc/init.d/mdadm-raid, allerdings nur, wenn in man in /etc/default/mdadm folgende Variable richtig setzt: AUTOSTART=true

Fehlerfall

cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 hda14[0] sda11[2](F)
#      2803200 blocks [2/1] [U_]

Hier ist also sda11 aus dem Tritt gekommen. Fehler beseitigen (z.B. neue Platte einbauen).

# Partition wegnehmen und dann hinzufügen:
mdadm -r /dev/md1 /dev/sda11
mdadm -a /dev/md1 /dev/sda12
cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 sda11[2] hda14[0]
#      2803200 blocks [2/1] [U_]
#      [>....................]  recovery =  4.7% (132096/2803200) finish=1.0min #speed=44032K/sec

Fehlerfall externe Platte

Angenommen, es liegt eine Platte mit einer RAID-Partition (RAID-1, Mirroring) vor, die aus einem anderen System stammt. Es sollen die Daten vom RAID zugänglich gemacht werden:

Die Raid-Partition befinde sich auf /dev/sdd5.

# Zuerst eine neue Gerätedatei anlegen:
mknod /dev/md7 b 9 7
# Dann die RAID-Partition als Einzelpartition einhängen:
mdadm --assemble --force /dev/md7 /dev/sdd5
# Anschauen
cat /proc/mdstat
#Personalities : [raid1]
#md7 : active raid1 sdd5[0]
#      16064896 blocks [2/1] [U_]
# Und als Dateisystem einhängen:
mount /dev/md7 /media/tmp

Die Daten stehen dann unter /media/tmp zur Verfügung.

Defekt simulieren

Falls eine Platte ohne Fehlerfall ausgetauscht werden soll, muss ein "Defekt" simuliert werden, damit der Befehl mdadm -r <raid> <dev> erlaubt ist.

mdadm /dev/md2 --fail /dev/sdc1

Raid-Verbund auflösen

Beschluss, den Striping-Verbund aufzulösen: Damit sind die Resourcen wieder freigegeben.

Die Daten sind damit nicht mehr zugreifbar.

Auf den Platten bzw. Partitionen sind sie noch weiterhin vorhanden, solange diese nicht überschrieben werden.

Sollen die Platten bzw. Partitionen für neue RAID-Verbünde benutzt werden, warnt mdadm bei --create mit Ausgabe des RAID level und des Datums vor einem versehentlichen Überschreiben.

mdadm --stop /dev/md0

/etc/mdadm/mdadm.conf neu erstellen:

cd /etc/mdadm
echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > mdadm.conf
mdadm --detail --scan >> mdadm.conf

Raid komplett löschen

Damit der Kernel die Partitionen nicht als RAID erkennt, muss der Superblock gelöscht werden. Das geht mit dd oder auch komfortabler wie folgt für /dev/sda11

mdadm --zero-superblock /dev/sda11

Das dann einfach für die einzelen Bestandteile wiederholen.

Teilpartition verschieben

Die Partition /dev/sda11 soll nach /dev/sdb5 verschoben werden:

# Als defekt markieren. Damit stoppt die Verwendung:
mdadm -f /dev/md1 /dev/sda11
cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 hda14[0] sda11[2](F)
#      2803200 blocks [2/1] [U_]
# Entfernen:
mdadm -r /dev/md1 /dev/sda11
cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 hda14[0]
#      2803200 blocks [2/1] [U_]
# Neu einhängen:
mdadm -a /dev/md1 /dev/sdb5
cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 sdb5[2] hda14[0]
#      2803200 blocks [2/1] [U_]
#      [>....................]  recovery =  4.7% (132096/2803200) finish=1.0min #speed=44032K/sec
sleep 120
cat /proc/mdstat
#Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
#md1 : active raid1 sdb5[1] hda14[0]
#      2803200 blocks [2/2] [UU]

mdadm (zuletzt geändert am 2018-11-15 20:16:37 durch JonesHamatoma)