Software-RAID mit mdadm bietet Ausfallsicherheit und Performance ohne Hardware-RAID-Controller. Linux unterstützt alle gängigen RAID-Level direkt im Kernel.
RAID-Level
| Level | Disks | Redundanz | Kapazität | Verwendung |
|---|
| RAID 0 | 2+ | Keine | 100% | Performance |
| RAID 1 | 2 | 1 Disk | 50% | Boot, kleine Daten |
| RAID 5 | 3+ | 1 Disk | (n-1)/n | Allgemein |
| RAID 6 | 4+ | 2 Disks | (n-2)/n | Große Arrays |
| RAID 10 | 4+ | Mirror | 50% | Datenbanken |
Installation
# Debian/Ubuntu
apt install mdadm
# RHEL/CentOS
dnf install mdadm
RAID erstellen
RAID 1 (Mirror)
# Zwei Disks spiegeln
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# Mit Spare
mdadm --create /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 \
/dev/sdb1 /dev/sdc1 /dev/sdd1
RAID 5
# Drei oder mehr Disks
mdadm --create /dev/md0 --level=5 --raid-devices=3 \
/dev/sdb1 /dev/sdc1 /dev/sdd1
# Mit Chunk-Size
mdadm --create /dev/md0 --level=5 --raid-devices=4 --chunk=256 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
RAID 6
# Vier oder mehr Disks (2 Parity)
mdadm --create /dev/md0 --level=6 --raid-devices=4 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
RAID 10
# Mindestens 4 Disks
mdadm --create /dev/md0 --level=10 --raid-devices=4 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
# Mit Layout
mdadm --create /dev/md0 --level=10 --layout=n2 --raid-devices=4 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
RAID 0 (Stripe)
# Performance ohne Redundanz
mdadm --create /dev/md0 --level=0 --raid-devices=2 \
/dev/sdb1 /dev/sdc1
RAID verwenden
Dateisystem erstellen
# ext4
mkfs.ext4 /dev/md0
# XFS
mkfs.xfs /dev/md0
Mounten
# Mounten
mount /dev/md0 /mnt/raid
# In fstab
echo '/dev/md0 /mnt/raid ext4 defaults 0 2' >> /etc/fstab
Status und Überwachung
Array-Status
# Kurzer Status
cat /proc/mdstat
# Detailliert
mdadm --detail /dev/md0
# Alle Arrays
mdadm --detail --scan
Beispiel-Ausgabe
md0 : active raid1 sdc1[1] sdb1[0]
1953382464 blocks super 1.2 [2/2] [UU]
# [UU] = beide Disks aktiv
# [U_] = eine Disk fehlt
# [2/2] = 2 von 2 Disks aktiv
Monitoring
# E-Mail bei Problemen
mdadm --monitor --scan --daemonize --mail=admin@example.de
# In /etc/mdadm/mdadm.conf
MAILADDR admin@example.de
# Service aktivieren
systemctl enable mdmonitor
Disk-Ausfall
Defekte Disk ersetzen
# 1. Defekte Disk markieren
mdadm --fail /dev/md0 /dev/sdb1
# 2. Aus Array entfernen
mdadm --remove /dev/md0 /dev/sdb1
# 3. Physisch tauschen, dann neue Disk hinzufügen
mdadm --add /dev/md0 /dev/sdb1
# 4. Rebuild-Status prüfen
watch cat /proc/mdstat
Rebuild beschleunigen
# Minimum Speed erhöhen
echo 50000 > /proc/sys/dev/raid/speed_limit_min
# Maximum Speed
echo 200000 > /proc/sys/dev/raid/speed_limit_max
Konfiguration speichern
mdadm.conf
# Konfiguration generieren
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# Initramfs aktualisieren
update-initramfs -u
Beispiel mdadm.conf
# /etc/mdadm/mdadm.conf
MAILADDR admin@example.de
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=xxx:xxx:xxx:xxx
Array verwalten
Array stoppen
# Unmounten
umount /dev/md0
# Stoppen
mdadm --stop /dev/md0
Array starten
# Manuell starten
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1
# Automatisch
mdadm --assemble --scan
Array löschen
# Stoppen
mdadm --stop /dev/md0
# Superblocks löschen
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdc1
Array erweitern
RAID 1 zu RAID 5
# Nicht direkt möglich - neues Array erstellen und Daten migrieren
Mehr Disks zu RAID 5
# Disk hinzufügen
mdadm --add /dev/md0 /dev/sde1
# Array erweitern
mdadm --grow /dev/md0 --raid-devices=4
# Dateisystem vergrößern
resize2fs /dev/md0
Spare Disks
Spare hinzufügen
mdadm --add /dev/md0 /dev/sde1
# Wird automatisch Spare wenn Array voll
Spare entfernen
mdadm --remove /dev/md0 /dev/sde1
Bitmap (Write-Intent)
# Bitmap aktivieren (beschleunigt Rebuild)
mdadm --grow /dev/md0 --bitmap=internal
# Bitmap deaktivieren
mdadm --grow /dev/md0 --bitmap=none
Troubleshooting
Array startet nicht
# Disks prüfen
mdadm --examine /dev/sdb1
# Force-Assemble
mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1
Degraded Array
# Status prüfen
mdadm --detail /dev/md0
# Mit fehlender Disk starten
mdadm --assemble --force /dev/md0 /dev/sdb1
Superblock reparieren
# Superblock von anderer Disk kopieren
mdadm --add /dev/md0 /dev/sdb1
# Bei komplettem Verlust
mdadm --create /dev/md0 --assume-clean --level=1 --raid-devices=2 \
/dev/sdb1 /dev/sdc1
Boot von RAID
GRUB auf RAID 1
# Boot-Partitionen auf RAID 1
mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 \
/dev/sda1 /dev/sdb1
# GRUB installieren
grub-install /dev/sda
grub-install /dev/sdb
# Initramfs mit mdadm
update-initramfs -u
Chunk-Size optimieren
# Größerer Chunk für sequentiellen Zugriff
mdadm --create /dev/md0 --level=5 --chunk=512 ...
# Kleinerer Chunk für Random I/O
mdadm --create /dev/md0 --level=5 --chunk=64 ...
Stripe-Cache
# Cache vergrößern (RAID 5/6)
echo 8192 > /sys/block/md0/md/stripe_cache_size
Status-Script
#!/bin/bash
# raid-status.sh
echo "=== RAID Status ==="
cat /proc/mdstat
echo ""
echo "=== Array Details ==="
for md in /dev/md*; do
[ -b "$md" ] && mdadm --detail "$md" 2>/dev/null
done
echo ""
echo "=== Disk Health ==="
for disk in /dev/sd[a-z]; do
[ -b "$disk" ] && smartctl -H "$disk" 2>/dev/null | grep -E "SMART|result"
done
Zusammenfassung
| Befehl | Funktion |
|---|
| mdadm --create | Array erstellen |
| mdadm --detail | Array-Details |
| mdadm --add | Disk hinzufügen |
| mdadm --fail | Disk als defekt markieren |
| mdadm --remove | Disk entfernen |
| mdadm --stop | Array stoppen |
| mdadm --assemble | Array zusammenbauen |
| Level | Mindest-Disks | Redundanz |
|---|
| RAID 0 | 2 | Keine |
| RAID 1 | 2 | 1 Disk |
| RAID 5 | 3 | 1 Disk |
| RAID 6 | 4 | 2 Disks |
| RAID 10 | 4 | 1 pro Mirror |
| Datei | Funktion |
|---|
| /proc/mdstat | Aktueller Status |
| /etc/mdadm/mdadm.conf | Konfiguration |
Fazit
Software-RAID mit mdadm ist zuverlässig und flexibel. RAID 1 eignet sich für Boot und kleine Systeme. RAID 5/6 bietet gute Balance aus Kapazität und Redundanz. RAID 10 ist optimal für Datenbanken. Regelmäßiges Monitoring und SMART-Checks verhindern Überraschungen. Ersatz-Disks als Spare beschleunigen die Wiederherstellung.