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

Performance

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.