Werkzeug zur Verwaltung von Raid-Verbunden.
Homepage: http://packages.qa.debian.org/m/mdadm.html
Lizenz: GPL
Tipps & Tricks
Mini-Howto
Scenario:
- Es soll eine Raid-0-Partition (Striping) und eine Raid-1 Partition (Mirroring) eingerichtet werden.
- Zur Verfügung stehen zwei Platten: hda und sda
Einrichten
- Partitionen erstellen/aussuchen. Sinnvollerweise sind die Paare gleich groß: hda13 + sda10, hda14 + sda11
- Mit fdisk den Partitionstyp aller 4 Partitionen auf 0xfd (Linux raid autodetect) ändern.
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]
Links
Software Raid Debian Girmore (en) (Link korrigiert)
RAID5 Online Resizing with Linux Mikas Blog (en)
Growing a RAID5 array - MDADM Freg Gaff
Software RAID1 Debian Etch 4.0, kernel 2.6.18, GRUB (en) 2006-02-25
Convert Root System to Bootable Software RAID1 (Debian) 2004-06-03