RAID (Redundant Array of Independent Disks) erhöht Ausfallsicherheit und/oder Performance. Linux bietet mit mdadm ein leistungsstarkes Software-RAID.

RAID-Level

Übersicht

| Level | Min. Disks | Redundanz | Performance | Kapazität | |-------|------------|-----------|-------------|-----------| | RAID 0 | 2 | Keine | Lesen/Schreiben ↑↑ | 100% | | RAID 1 | 2 | 1 Disk | Lesen ↑ | 50% | | RAID 5 | 3 | 1 Disk | Lesen ↑ | (n-1)/n | | RAID 6 | 4 | 2 Disks | Lesen ↑ | (n-2)/n | | RAID 10 | 4 | 1 pro Mirror | Lesen/Schreiben ↑ | 50% |

RAID 0 (Striping)

┌─────────┐  ┌─────────┐
│ Disk 1  │  │ Disk 2  │
│ Block 1 │  │ Block 2 │
│ Block 3 │  │ Block 4 │
│ Block 5 │  │ Block 6 │
└─────────┘  └─────────┘

+ Maximale Performance
+ Volle Kapazität
- Keine Redundanz
- Ein Disk-Ausfall = Totalverlust

RAID 1 (Mirroring)

┌─────────┐  ┌─────────┐
│ Disk 1  │  │ Disk 2  │
│ Block 1 │  │ Block 1 │
│ Block 2 │  │ Block 2 │
│ Block 3 │  │ Block 3 │
└─────────┘  └─────────┘

+ Volle Redundanz
+ Schnelles Lesen
- 50% Kapazität

RAID 5 (Striping + Parity)

┌─────────┐  ┌─────────┐  ┌─────────┐
│ Disk 1  │  │ Disk 2  │  │ Disk 3  │
│ Block 1 │  │ Block 2 │  │ Parity  │
│ Block 3 │  │ Parity  │  │ Block 4 │
│ Parity  │  │ Block 5 │  │ Block 6 │
└─────────┘  └─────────┘  └─────────┘

+ Gute Kapazitätsnutzung
+ Redundanz gegen 1 Ausfall
- Schreibperformance
- Rebuild-Zeit

RAID 10 (Mirror + Stripe)

┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐
│ Disk 1  │  │ Disk 2  │  │ Disk 3  │  │ Disk 4  │
│ Block 1 │  │ Block 1 │  │ Block 2 │  │ Block 2 │
│ Block 3 │  │ Block 3 │  │ Block 4 │  │ Block 4 │
└─────────┘  └─────────┘  └─────────┘  └─────────┘
   Mirror A                   Mirror B

+ Beste Performance
+ Gute Redundanz
- 50% Kapazität

mdadm installieren

# Debian/Ubuntu
apt install mdadm

# CentOS/RHEL
dnf install mdadm

RAID erstellen

RAID 1

# Partitionen vorbereiten
fdisk /dev/sdb  # Typ: fd (Linux RAID autodetect)
fdisk /dev/sdc  # Typ: fd

# RAID-1 erstellen
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# Status prüfen
cat /proc/mdstat
mdadm --detail /dev/md0

RAID 5

# Drei Festplatten
mdadm --create /dev/md0 --level=5 --raid-devices=3 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1

# Mit Spare-Disk
mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

RAID 6

mdadm --create /dev/md0 --level=6 --raid-devices=4 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

RAID 10

mdadm --create /dev/md0 --level=10 --raid-devices=4 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Dateisystem erstellen

# Dateisystem erstellen
mkfs.ext4 /dev/md0
# Oder XFS
mkfs.xfs /dev/md0

# Mounten
mkdir /data
mount /dev/md0 /data

# In fstab eintragen
echo '/dev/md0 /data ext4 defaults 0 0' >> /etc/fstab

Konfiguration speichern

# mdadm.conf aktualisieren
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

# Initramfs aktualisieren (Debian/Ubuntu)
update-initramfs -u

# CentOS/RHEL
dracut --force

Status überwachen

Array-Status

# Übersicht
cat /proc/mdstat

# Details
mdadm --detail /dev/md0

# Alle Arrays
mdadm --detail --scan

Ausgabe interpretieren

md0 : active raid5 sdd1[2] sdc1[1] sdb1[0]
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

[UUU] = Alle Disks OK
[U_U] = Mittlere Disk fehlt
[3/3] = 3 von 3 Disks aktiv

Monitoring

# E-Mail bei Problemen
# /etc/mdadm/mdadm.conf
MAILADDR admin@example.com

# Monitoring-Daemon
systemctl enable --now mdmonitor

Festplatte ersetzen

Defekte Festplatte markieren

# Als fehlerhaft markieren
mdadm --manage /dev/md0 --fail /dev/sdc1

# Entfernen
mdadm --manage /dev/md0 --remove /dev/sdc1

Neue Festplatte hinzufügen

# Festplatte partitionieren
fdisk /dev/sdf  # Typ: fd

# Zum Array hinzufügen
mdadm --manage /dev/md0 --add /dev/sdf1

# Rebuild-Status beobachten
watch cat /proc/mdstat

Rebuild beschleunigen

# Rebuild-Geschwindigkeit erhöhen
echo 200000 > /proc/sys/dev/raid/speed_limit_min
echo 500000 > /proc/sys/dev/raid/speed_limit_max

Array erweitern

RAID 5 vergrößern

# Neue Disk hinzufügen
mdadm --manage /dev/md0 --add /dev/sdf1

# Array erweitern
mdadm --grow /dev/md0 --raid-devices=4

# Reshape-Fortschritt
cat /proc/mdstat

# Dateisystem erweitern
resize2fs /dev/md0  # ext4
xfs_growfs /dev/md0  # XFS

Array stoppen/starten

Stoppen

# Unmounten
umount /data

# Array stoppen
mdadm --stop /dev/md0

Starten

# Manuell starten
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1

# Automatisch (scan)
mdadm --assemble --scan

Beim Boot starten

# mdadm.conf korrekt?
mdadm --detail --scan

# Initramfs aktualisieren
update-initramfs -u

Troubleshooting

Array degradiert

# Status prüfen
mdadm --detail /dev/md0

# Welche Disk fehlt?
cat /proc/mdstat

# Disk-Health prüfen
smartctl -a /dev/sdc

Array nicht gefunden

# Scan nach Arrays
mdadm --examine --scan

# Manuell assemblieren
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1

# Super-Block prüfen
mdadm --examine /dev/sdb1

Array reparieren

# Forced assemble
mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1

# Read-Only assemblieren
mdadm --assemble --readonly /dev/md0 /dev/sdb1 /dev/sdc1

Super-Block löschen

# Partition aus altem Array wiederverwenden
mdadm --zero-superblock /dev/sdb1

Best Practices

Empfehlungen

1. RAID ist kein Backup!
2. Immer Spare-Disk vorhalten
3. E-Mail-Benachrichtigung einrichten
4. Regelmäßig Status prüfen
5. SMART-Monitoring aktivieren
6. Gleiche Disk-Größen verwenden
7. Rebuild nicht unterbrechen

RAID-Level-Empfehlungen

Datenbank:      RAID 10 (Performance + Redundanz)
Fileserver:     RAID 6 (Große Kapazität + Redundanz)
Webserver:      RAID 1 (Einfach, redundant)
Scratch/Temp:   RAID 0 (Nur Performance)

Monitoring-Skript

#!/bin/bash
# /usr/local/bin/check-raid.sh

STATUS=$(cat /proc/mdstat)

if echo "$STATUS" | grep -q "_"; then
    echo "RAID DEGRADED!"
    echo "$STATUS" | mail -s "RAID Alert: $(hostname)" admin@example.com
    exit 2
fi

if echo "$STATUS" | grep -q "resync\|recovery"; then
    echo "RAID REBUILDING"
    exit 1
fi

echo "RAID OK"
exit 0

Zusammenfassung

| Befehl | Funktion | |--------|----------| | mdadm --create | Array erstellen | | mdadm --detail | Details anzeigen | | mdadm --manage --add | Disk hinzufügen | | mdadm --manage --fail | Disk als defekt markieren | | mdadm --grow | Array erweitern | | mdadm --stop | Array stoppen | | cat /proc/mdstat | Status-Übersicht |

| RAID-Level | Einsatz | |------------|---------| | RAID 0 | Temporäre Daten | | RAID 1 | Boot, kleine Arrays | | RAID 5 | Allgemein, Kosten-effizient | | RAID 6 | Große Arrays, kritische Daten | | RAID 10 | Datenbanken, High-Performance |

Fazit

Software-RAID mit mdadm bietet flexible und zuverlässige Speicherlösungen. RAID 1 ist ideal für Boot-Partitionen, RAID 5/6 für Daten-Arrays und RAID 10 für Performance-kritische Anwendungen. Denken Sie daran: RAID schützt vor Hardware-Ausfällen, ersetzt aber kein Backup. Überwachen Sie Ihre Arrays und halten Sie Spare-Disks bereit.