Mdadm Howto: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Grundlagen=
*mdadm ist ein Werkzeug für Linux, das es ermöglicht, Software-RAID (Redundant Array of Independent Disks) zu erstellen und zu verwalten.
*Mit mdadm können mehrere Festplatten zu einem einzigen logischen Laufwerk zusammengefasst werden, um die Leistung, die Zuverlässigkeit oder beides zu verbessern.
*Die Hauptfunktionen von mdadm umfassen das Erstellen, Verwalten und Überwachen von RAID-Arrays.
*Es unterstützt verschiedene RAID-Level wie RAID 0, RAID 1, RAID 5, RAID 6 und RAID 10.
*Je nach gewähltem RAID-Level bietet mdadm unterschiedliche Arten von Datensicherheit, Leistung und Speicherkapazität.
*Mit mdadm können neue RAID-Arrays erstellt oder bestehende Arrays erweitert, verkleinert oder gewartet werden.
*Das Tool ermöglicht auch das Hinzufügen oder Entfernen von Festplatten aus einem laufenden RAID-Array, ohne dass der Betrieb unterbrochen wird.
*Dies ist besonders nützlich, wenn es erforderlich ist, die Speicherkapazität zu erhöhen oder defekte Festplatten auszutauschen.
*Darüber hinaus bietet mdadm Funktionen zur Überwachung und Fehlerbehebung von RAID-Arrays.
*Es kann den Status der einzelnen Festplatten überwachen und Warnungen ausgeben, wenn Probleme auftreten.
*Das Tool ermöglicht auch die Rekonstruktion beschädigter Arrays und den Austausch von defekten Festplatten durch neue.
=Einrichten=
=Einrichten=
==Installation==
==Installation==
Debian:
*apt-get install mdadm
*apt-get install mdadm
Rocky:
*dnf install mdadm
==Vorbereitung der Partitionen==
Die Partitionen bekommen den Typ ''Linux RAID'' – <code>fd00</code> bei GPT (<code>gdisk</code>), <code>fd</code> bei MBR (<code>fdisk</code>). Der Typ ist heute nur noch eine Kennzeichnung für den Betrachter; zusammengebaut wird das Array über die Metadaten, nicht über den Typ.
Lagen auf den Partitionen vorher Dateisysteme, LVM-Strukturen oder ein altes RAID, werden die Signaturen entfernt. Sonst warnt <code>mdadm</code> beim Anlegen und fragt nach:
*wipefs -a /dev/sdb1 /dev/sdc1
==Raid 0==
==Raid 0==
*mdadm -C /dev/md0 -l 0 -n 2 /dev/vda5 /dev/vda6
*mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdc1
 
==Raid 1==
==Raid 1==
*mdadm -C /dev/md1 -l 1 -n 2 /dev/vda7 /dev/vda8
*mdadm -C /dev/md1 -l 1 -n 2 /dev/sdd1 /dev/sde1
 
==Raid 5==
==Raid 5==
*mdadm -C /dev/md2 -l 5 -n 3 /dev/vda9 /dev/vda10 /dev/vda11
*mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb2 /dev/sdc2 /dev/sdd2
==Raid 10==  
 
*mdadm -C /dev/md3 -l 10 -n 4 /dev/vda12 /dev/vda13 /dev/vda14 /dev/vda15
==Raid 10==
*mdadm -C /dev/md3 -l 10 -n 4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3
 
==Mit Sparedisks==
==Mit Sparedisks==
*mdadm -C /dev/md3 -l 10 -n 4 -x 2 /dev/vda12 /dev/vda13 /dev/vda14 /dev/vda15 /dev/vdb1 /dev/vdb2
<code>-x</code> gibt die Zahl der Reserveplatten an. Sie laufen im Normalbetrieb leer mit und springen bei einem Ausfall automatisch ein.
*mdadm -C /dev/md3 -l 10 -n 4 -x 2 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3 /dev/sdb4 /dev/sdc4


==Mountpoints erzeugen==
==Mountpoints erzeugen==
*mkdir /mnt/raid{0,1,5,10}
*mkdir /mnt/raid{0,1,5,10}
==Dateisystem aufbringen==
==Dateisystem aufbringen==
*mkfs.ext4 /dev/md0
*mkfs.ext4 /dev/md0
Zeile 20: Zeile 55:
*mkfs.ext4 /dev/md2
*mkfs.ext4 /dev/md2
*mkfs.ext4 /dev/md3
*mkfs.ext4 /dev/md3
==Mounten==
==Mounten==
*mount /dev/md0 /mnt/raid0
*mount /dev/md0 /mnt/raid0
Zeile 25: Zeile 61:
*mount /dev/md2 /mnt/raid5
*mount /dev/md2 /mnt/raid5
*mount /dev/md3 /mnt/raid10
*mount /dev/md3 /mnt/raid10
==Verfügbarer Speicher==
==Verfügbarer Speicher==
*df -h -t ext4
*df -h -t ext4
<pre>
<pre>
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/vda1       50G    25G  23G  53% /
/dev/sda1       50G    25G  23G  53% /
/dev/md0        20G    24K  19G    1% /mnt/raid0
/dev/md0        20G    24K  19G    1% /mnt/raid0
/dev/md1        9,8G    24K  9,3G    1% /mnt/raid1
/dev/md1        9,8G    24K  9,3G    1% /mnt/raid1
Zeile 35: Zeile 72:
/dev/md3        20G    24K  19G    1% /mnt/raid10
/dev/md3        20G    24K  19G    1% /mnt/raid10
</pre>
</pre>
Die Netto-Größen zeigen die Rechnung der Level: RAID 0 aus 2 × 10 GiB ergibt 20 GiB, RAID 1 aus 2 × 10 GiB nur 10 GiB, RAID 5 aus 3 × 10 GiB ergibt 20 GiB (eine Platte geht für die Parität), RAID 10 aus 4 × 10 GiB ebenfalls 20 GiB.
==Geschwindigkeitsmessung==
==Geschwindigkeitsmessung==
*dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
Die Zieldatei muss auf dem gemessenen Array liegen – sonst misst man die Systemplatte.
*dd if=/dev/zero of=/mnt/raid0/tempfile bs=1M count=1024 conv=fdatasync,notrunc
Während ein Array noch synchronisiert, sind die Messwerte nicht aussagekräftig.
;Mit fio
*apt update ; apt install fio
;schreiben
*fio --name=seqwrite --filename=/mnt/raid0/fiotest --size=4G --rw=write --bs=1M --direct=1 --ioengine=libaio --iodepth=16 --group_reporting
;lesen
*fio --name=seqread --filename=/mnt/raid0/fiotest --size=4G  --rw=read --bs=1M --direct=1 --ioengine=libaio --iodepth=16 --group_reporting


=Kontrolle=
=Kontrolle=
* cat /proc/mdstat  
*cat /proc/mdstat
<pre>
<pre>
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
md3 : active raid10 vda15[3] vda14[2] vda13[1] vda12[0]
md3 : active raid10 sde3[3] sdd3[2] sdc3[1] sdb3[0]
       20953088 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
       20953088 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
       [=============>.......]  resync = 68.4% (14344640/20953088) finish=0.5min speed=202328K/sec
       [=============>.......]  resync = 68.4% (14344640/20953088) finish=0.5min speed=202328K/sec
        
        
md2 : active raid5 vda11[3] vda10[1] vda9[0]
md2 : active raid5 sdd2[3] sdc2[1] sdb2[0]
       20953088 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
       20953088 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
        
        
md1 : active raid1 vda8[1] vda7[0]
md1 : active raid1 sde1[1] sdd1[0]
       10476544 blocks super 1.2 [2/2] [UU]
       10476544 blocks super 1.2 [2/2] [UU]
        
        
md0 : active raid0 vda6[1] vda5[0]
md0 : active raid0 sdc1[1] sdb1[0]
       20953088 blocks super 1.2 512k chunks
       20953088 blocks super 1.2 512k chunks
</pre>
</pre>
<code>[4/4]</code> bedeutet: vier von vier Mitgliedern vorhanden. Jedes <code>U</code> steht für ein gesundes Mitglied, ein <code>_</code> für ein fehlendes.
=Bootvorgang=
=Bootvorgang=
*Entweder wird die Konfiguration im Persistent Superlock ausgelesen
*Die Konfiguration jedes Mitglieds steht im persistenten Superblock auf der Partition selbst: Level, Array-UUID, Rolle im Verbund und der Name in der Form <code>rechnername:0</code>.
*oder in der Konfigurationsdatei /etc/mdadm/mdadm.conf
*Der Zusammenbau erfolgt beim Start durch udev und <code>mdadm</code>, in der Regel schon aus der Initramfs heraus.
*Raid Funktion ist in der Regel in der Ramdisk vorhanden
*Ergänzend wird <code>/etc/mdadm/mdadm.conf</code> (Debian) bzw. <code>/etc/mdadm.conf</code> (Rocky) ausgewertet. Die Datei ist nicht nötig, damit das Array überhaupt entsteht – sie legt den Gerätenamen fest.
*Es werden bei 0xFD Partitionstyp die Partitionen automatisch zu md-Devices assembliert und gestartet
*Ohne passenden Eintrag kann ein Array unter einem beliebigen Namen aus dem oberen Bereich erscheinen, typischerweise <code>/dev/md127</code>. Steht in <code>/etc/fstab</code> dann <code>/dev/md0</code>, schlägt das Mounten fehl. In der fstab arbeitet man deshalb besser mit <code>UUID=</code>.
*Der Partitionstyp <code>0xFD</code> spielt dabei keine Rolle mehr. Die automatische Erkennung über den Typ (''in-kernel autodetect'') gilt nur für die alten Metadaten der Version 0.90; <code>mdadm</code> legt seit Langem Version 1.2 an.
 
==Manuelles Zusammenbauen==
==Manuelles Zusammenbauen==
*mdadm -A /dev/md0 /dev/vda5 /dev/vda6
*mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
*mdadm -A /dev/md1 /dev/vda7 /dev/vda7
*mdadm -A /dev/md1 /dev/sdd1 /dev/sde1
*mdadm -A /dev/md2 /dev/vda9 /dev/vda10 /dev/vda11
*mdadm -A /dev/md2 /dev/sdb2 /dev/sdc2 /dev/sdd2
*mdadm -A /dev/md3 /dev/vda12 /dev/vda13 /dev/vda14 /dev/vda15
*mdadm -A /dev/md3 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3
 
==Erstellen der Datei /etc/mdadm/mdadm.conf==
==Erstellen der Datei /etc/mdadm/mdadm.conf==
;Normalerweise nicht notwendig
;Für den Betrieb nicht zwingend – legt aber den Gerätenamen fest
*cd /etc/mdadm
*cd /etc/mdadm
*echo 'DEVICE /dev/vd*[0-15] ' > mdadm.conf
*echo 'DEVICE partitions' > mdadm.conf
*mdadm --detail --scan >> mdadm.conf
*mdadm --detail --scan >> mdadm.conf
<code>DEVICE partitions</code> lässt <code>mdadm</code> alle Partitionen aus <code>/proc/partitions</code> durchsuchen. Das ist die übliche Angabe; eine Liste von Gerätemustern ist nur in Sonderfällen nötig.
Nach jeder Änderung muss die Initramfs neu gebaut werden, sonst kennt der Start die Datei nicht:
*update-initramfs -u
Auf Rocky:
*dracut -f
=Arbeiten am Raid=
=Arbeiten am Raid=
==Partition fehlerhaft setzen==
==Partition fehlerhaft setzen==
*mdadm /dev/md1 -f /dev/vda8
*mdadm /dev/md1 -f /dev/sde1
 
==Partition entfernen==
==Partition entfernen==
*mdadm /dev/md1 --remove /dev/vda8
*mdadm /dev/md1 -r /dev/sde1


==Partition hinzufügen==
==Partition hinzufügen==
*mdadm /dev/md1 -a /dev/vda16
*mdadm /dev/md1 -a /dev/sde4


==Raid stoppen==
==Raid stoppen==
*umount /mnt/raid0
*umount /mnt/raid0
*mdadm -S /dev/md0
*mdadm -S /dev/md0


==Raid wieder starten==
==Raid wieder starten==
*mdadm -A /dev/md0 /dev/vda5 /dev/vda6
*mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
*mount -t ext4 /dev/md0 /mnt/raid0
*mount /dev/md0 /mnt/raid0


==Raid Info==
==Raid Info==
Zeile 116: Zeile 181:


     Number  Major  Minor  RaidDevice State
     Number  Major  Minor  RaidDevice State
       0     254        5       0      active sync  /dev/vda5
       0       8      17       0      active sync  /dev/sdb1
       1     254        6       1      active sync  /dev/vda6
       1       8      33       1      active sync  /dev/sdc1
</pre>
</pre>


==Superblock untersuchen==
==Superblock untersuchen==
Dieser liegt redundant auf allen Partionen des Raid
Der Superblock liegt auf jeder Partition des Arrays.
*mdadm -E /dev/vda7
*mdadm -E /dev/sdd1
<pre>
<pre>
/dev/vda7:
/dev/sdd1:
           Magic : a92b4efc
           Magic : a92b4efc
         Version : 1.2
         Version : 1.2
Zeile 153: Zeile 218:
</pre>
</pre>


==Scanne alle Partitionen und Devices und baue sie zu md0 sofern im Superblock 0 aufgeführt==
Zu beachten: <code>mdadm -D</code> fragt das '''Array''' ab, <code>mdadm -E</code> die einzelne '''Partition'''. Ist ein Array nicht zusammengebaut, hilft nur <code>-E</code>.
*mdadm -Ac partitions -m 0 /dev/md0
 
==Scanne alle Partitionen und Devices und baue sie zu md1 sofern im Superblock 1 aufgeführt==
==Alle Geräte durchsuchen und ein bestimmtes Array zusammenbauen==
*mdadm -Ac partitions -m 1 /dev/md1
Gesucht wird nach der Array-UUID bzw. dem Namen aus dem Superblock – hier <code>rechnername:0</code>:
*mdadm -A --scan /dev/md0
 
Entsprechend für md1:
*mdadm -A --scan /dev/md1
 
Alle bekannten Arrays auf einmal:
*mdadm -A --scan


==Konfiguration updaten==
==Konfiguration updaten==
*mdadm -Ds > /etc/mdadm.conf
Die alten <code>ARRAY</code>-Zeilen zuerst entfernen, sonst stehen sie doppelt in der Datei. Mit <code>&gt;</code> statt <code>&gt;&gt;</code> würden auch <code>DEVICE</code>-, <code>HOMEHOST</code>- und <code>MAILADDR</code>-Zeilen verschwinden.
*sed -i '/^ARRAY/d' /etc/mdadm/mdadm.conf
*mdadm -Ds >> /etc/mdadm/mdadm.conf
*update-initramfs -u
 
==Superblock löschen==
==Superblock löschen==
*mdadm --zero-superblock /dev/vda8
Entfernt die RAID-Metadaten von der Partition, damit sie nicht wieder als Mitglied erkannt wird. Das Array muss vorher gestoppt sein.
*mdadm --zero-superblock /dev/sde1


==Partition anschalten==
==Ein unvollständiges Array starten==
*mdadm --run /dev/sd11
Startet ein Array, dem Mitglieder fehlen und das deshalb nicht von allein anläuft:
==Partition schreibbar setzen==
*mdadm -A --run /dev/md1
*mdadm --readwrite /dev/sd11
 
==Ein Array schreibbar setzen==
Holt ein Array aus dem Zustand ''read-only'' zurück:
*mdadm --readwrite /dev/md1


=Synchronisationsgeschwindigkeit anzeigen=
=Synchronisationsgeschwindigkeit anzeigen=
*cat /proc/sys/dev/raid/speed_limit_max
*cat /proc/sys/dev/raid/speed_limit_max
  200000
  200000
cat /proc/sys/dev/raid/speed_limit_min
*cat /proc/sys/dev/raid/speed_limit_min
  1000
  1000
erhöhen
 
echo 50000 > /proc/sys/dev/raid/speed_limit_min
Erhöhen:
*echo 50000 > /proc/sys/dev/raid/speed_limit_min
 
Die Werte stehen in KiB/s je Platte und gelten nur bis zum nächsten Start. Dauerhaft über <code>/etc/sysctl.d/</code>:
*dev.raid.speed_limit_min = 50000
 
=Raid 5 vergrössern=
=Raid 5 vergrössern=
;Eigenständige Übung – vorher vorhandene Arrays stoppen und Superblöcke löschen
==Erstellen des RAID 5 Arrays==
==Erstellen des RAID 5 Arrays==
*mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1
*mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb2 /dev/sdc2 /dev/sdd2
*mkdir /mnt/raid5
*mkdir /mnt/raid5
*mkfs.ext4 /dev/md2
*mkfs.ext4 /dev/md2
*mount /dev/md2 /mnt/raid5
*mount /dev/md2 /mnt/raid5
==Hinzufügen der zusätzlichen Festplatte==
==Hinzufügen der zusätzlichen Festplatte==
*mdadm --add /dev/md2 /dev/sde1
*mdadm --add /dev/md2 /dev/sde2
 
==Erweitern des RAID 5 Arrays==
==Erweitern des RAID 5 Arrays==
*mdadm --grow /dev/md2 --raid-devices=4
Beim Reshape werden die Daten über die Platten umverteilt. <code>--backup-file</code> sichert dabei den kritischen Bereich und muss '''außerhalb''' des Arrays liegen. Bricht der Vorgang ab, wird diese Datei zur Wiederaufnahme gebraucht.
*mdadm --grow /dev/md2 --raid-devices=4 --backup-file=/root/md2.backup
 
==Überprüfen des Fortschritts der Erweiterung==
==Überprüfen des Fortschritts der Erweiterung==
*watch cat /proc/mdstat
*watch cat /proc/mdstat
==Vergrößern des Dateisystems==
==Vergrößern des Dateisystems==
Erst wenn der Reshape abgeschlossen ist:
*resize2fs /dev/md2
*resize2fs /dev/md2
==Überprüfen des neuen Speicherplatzes==
==Überprüfen des neuen Speicherplatzes==
*df -h /mnt/raid5
*df -h /mnt/raid5
=Raid 10 vergrössern=
=Raid 10 vergrössern=
==Erstellen des RAID 10 Arrays==
Nehmt 2 freie Partitionen
*mdadm -C /dev/md3 -l 10 -n 4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3
 
*mkdir /mnt/raid10
*mkfs.ext4 /dev/md3
*mount /dev/md3 /mnt/raid10
==Hinzufügen der zusätzlichen Festplatten==
==Hinzufügen der zusätzlichen Festplatten==
RAID 10 wächst paarweise – es kommen zwei Platten auf einmal dazu.
*mdadm --add /dev/md3 /dev/sdb4
*mdadm --add /dev/md3 /dev/sdb4
*mdadm --add /dev/md3 /dev/sdc4
*mdadm --add /dev/md3 /dev/sdc4
==Erweitern des RAID 10 Arrays==
==Erweitern des RAID 10 Arrays==
*mdadm --grow /dev/md3 --raid-devices=6
*mdadm --grow /dev/md3 --raid-devices=6
==Überprüfen des Fortschritts der Erweiterung==
==Überprüfen des Fortschritts der Erweiterung==
*watch cat /proc/mdstat
*watch cat /proc/mdstat
==Vergrößern des Dateisystems==
==Vergrößern des Dateisystems==
*resize2fs /dev/md3
*resize2fs /dev/md3
==Überprüfen des neuen Speicherplatzes==
==Überprüfen des neuen Speicherplatzes==
*df -h /mnt/raid10
*df -h /mnt/raid10
=Migrieren eines RAID 1 Arrays in ein RAID 5 Array=
=Migrieren eines RAID 1 Arrays in ein RAID 5 Array=
;Eigenständige Übung – vorher vorhandene Arrays stoppen und Superblöcke löschen
==Erstellen des RAID 1 Arrays==
==Erstellen des RAID 1 Arrays==
*mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1
*mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1
Zeile 214: Zeile 314:
*mkfs.ext4 /dev/md1
*mkfs.ext4 /dev/md1
*mount /dev/md1 /mnt/raid1
*mount /dev/md1 /mnt/raid1
==Vorbereitung für die Migration==
* Stellen Sie sicher, dass Sie mindestens eine zusätzliche Festplatte für das RAID 5 Array haben (insgesamt mindestens 3 Festplatten).


==Migration des RAID 1 Arrays in ein RAID 5 Array==
==Migration des RAID 1 Arrays in ein RAID 5 Array==
* Fügen Sie die zusätzliche Festplatte zum RAID 1 Array hinzu:
*mdadm --add /dev/md1 /dev/sdd1
*mdadm --add /dev/md1 /dev/sdd1
* Migrieren Sie das RAID 1 Array in ein RAID 5 Array:
*mdadm --grow /dev/md1 --level=5 --raid-devices=3 --backup-file=/root/md1.backup
*mdadm --grow /dev/md1 --level=5 --raid-devices=3


==Überprüfen des Fortschritts der Migration==
==Überprüfen des Fortschritts der Migration==
*watch cat /proc/mdstat
*watch cat /proc/mdstat


==Dateisystem erweitern==
==Vergrößern des Dateisystems==
Erst nach abgeschlossener Migration:
*resize2fs /dev/md1
*resize2fs /dev/md1


==Überprüfen des neuen RAID 5 Arrays==
==Überprüfen des neuen Speicherplatzes==
*df -h /mnt/raid1
*df -h /mnt/raid1
* Überprüfen Sie die Datenintegrität, indem Sie den Inhalt des Dateisystems überprüfen:
*ls -l /mnt/raid1
==Umbenennen des Arrays (optional)==
* Wenn Sie das Array umbenennen möchten, können Sie dies tun:
*mdadm --detail --scan > /etc/mdadm/mdadm.conf
* Passen Sie die Konfigurationsdatei an und ändern Sie den Namen des Arrays entsprechend.


==Überprüfen der RAID-Details==
==Überprüfen der RAID-Details==
*mdadm --detail /dev/md1
*mdadm --detail /dev/md1


==Überprüfen der Datenintegrität==
Der Gerätename bleibt <code>/dev/md1</code>, obwohl darin jetzt ein RAID 5 liegt – die Nummer sagt nichts über das Level aus.
* Vergleichen Sie die Dateien auf dem Array mit den Originaldaten:
 
*diff -r /path/to/data/ /mnt/raid1/
=Aufräumen=
Nach einer Übung wird das Array vollständig abgebaut, damit die Partitionen für die nächste frei sind.
*umount /mnt/raid0
*mdadm -S /dev/md0
*mdadm --zero-superblock /dev/sdb1 /dev/sdc1
*wipefs -a /dev/sdb1 /dev/sdc1
 
=Wann wipefs nötig ist=
<code>wipefs</code> löscht die Signaturen am Anfang eines Blockgeräts – Dateisystem-Magic, LVM-Label, Partitionstabellen und RAID-Metadaten. Gebraucht wird es an drei Stellen:
 
*'''Vor dem Anlegen''' eines Arrays auf Partitionen, die vorher ein Dateisystem oder LVM getragen haben. <code>mdadm</code> erkennt die Reste und fragt nach; mit sauberen Partitionen läuft der Befehl ohne Rückfrage durch.
*'''Nach dem Abbau''' eines Arrays, wenn die Partitionen anderweitig verwendet werden sollen. <code>--zero-superblock</code> entfernt nur die RAID-Metadaten – ein Dateisystem, das vorher auf dem Array lag, hinterlässt seine Signatur auf dem Array-Gerät, nicht auf den Mitgliedern.
*'''Bei hartnäckigen Resten''', wenn <code>mkfs</code> oder <code>pvcreate</code> melden, das Gerät sei bereits in Verwendung.
 
Ohne Argumente zeigt <code>wipefs</code> nur an, was gefunden wurde, und ändert nichts – der sichere erste Schritt:
*wipefs /dev/sdb1
 
Löschen aller Signaturen:
*wipefs -a /dev/sdb1
 
'''Achtung:''' <code>wipefs -a</code> auf die ganze Platte (<code>/dev/sdb</code>) entfernt die Partitionstabelle mitsamt allen Partitionen. Immer die Partition angeben.


Diese Schritte gewährleisten, dass das RAID 1 Array erfolgreich in ein RAID 5 Array migriert wird, ohne Datenverlust, und dass die Datenintegrität überprüft wird.
Für RAID-Mitglieder ist die Reihenfolge: erst <code>mdadm -S</code>, dann <code>--zero-superblock</code>, dann bei Bedarf <code>wipefs -a</code>.


=SATA RAID=
=SATA RAID=
*https://wiki.debian.org/DebianInstaller/SataRaid
*https://wiki.debian.org/DebianInstaller/SataRaid

Aktuelle Version vom 20. Oktober 2026, 15:51 Uhr

Grundlagen

  • mdadm ist ein Werkzeug für Linux, das es ermöglicht, Software-RAID (Redundant Array of Independent Disks) zu erstellen und zu verwalten.
  • Mit mdadm können mehrere Festplatten zu einem einzigen logischen Laufwerk zusammengefasst werden, um die Leistung, die Zuverlässigkeit oder beides zu verbessern.
  • Die Hauptfunktionen von mdadm umfassen das Erstellen, Verwalten und Überwachen von RAID-Arrays.
  • Es unterstützt verschiedene RAID-Level wie RAID 0, RAID 1, RAID 5, RAID 6 und RAID 10.
  • Je nach gewähltem RAID-Level bietet mdadm unterschiedliche Arten von Datensicherheit, Leistung und Speicherkapazität.
  • Mit mdadm können neue RAID-Arrays erstellt oder bestehende Arrays erweitert, verkleinert oder gewartet werden.
  • Das Tool ermöglicht auch das Hinzufügen oder Entfernen von Festplatten aus einem laufenden RAID-Array, ohne dass der Betrieb unterbrochen wird.
  • Dies ist besonders nützlich, wenn es erforderlich ist, die Speicherkapazität zu erhöhen oder defekte Festplatten auszutauschen.
  • Darüber hinaus bietet mdadm Funktionen zur Überwachung und Fehlerbehebung von RAID-Arrays.
  • Es kann den Status der einzelnen Festplatten überwachen und Warnungen ausgeben, wenn Probleme auftreten.
  • Das Tool ermöglicht auch die Rekonstruktion beschädigter Arrays und den Austausch von defekten Festplatten durch neue.


Einrichten

Installation

Debian:

  • apt-get install mdadm

Rocky:

  • dnf install mdadm

Vorbereitung der Partitionen

Die Partitionen bekommen den Typ Linux RAID – fd00 bei GPT (gdisk), fd bei MBR (fdisk). Der Typ ist heute nur noch eine Kennzeichnung für den Betrachter; zusammengebaut wird das Array über die Metadaten, nicht über den Typ.

Lagen auf den Partitionen vorher Dateisysteme, LVM-Strukturen oder ein altes RAID, werden die Signaturen entfernt. Sonst warnt mdadm beim Anlegen und fragt nach:

  • wipefs -a /dev/sdb1 /dev/sdc1

Raid 0

  • mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdc1

Raid 1

  • mdadm -C /dev/md1 -l 1 -n 2 /dev/sdd1 /dev/sde1

Raid 5

  • mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb2 /dev/sdc2 /dev/sdd2

Raid 10

  • mdadm -C /dev/md3 -l 10 -n 4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3

Mit Sparedisks

-x gibt die Zahl der Reserveplatten an. Sie laufen im Normalbetrieb leer mit und springen bei einem Ausfall automatisch ein.

  • mdadm -C /dev/md3 -l 10 -n 4 -x 2 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3 /dev/sdb4 /dev/sdc4

Mountpoints erzeugen

  • mkdir /mnt/raid{0,1,5,10}

Dateisystem aufbringen

  • mkfs.ext4 /dev/md0
  • mkfs.ext4 /dev/md1
  • mkfs.ext4 /dev/md2
  • mkfs.ext4 /dev/md3

Mounten

  • mount /dev/md0 /mnt/raid0
  • mount /dev/md1 /mnt/raid1
  • mount /dev/md2 /mnt/raid5
  • mount /dev/md3 /mnt/raid10

Verfügbarer Speicher

  • df -h -t ext4
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda1        50G     25G   23G   53% /
/dev/md0         20G     24K   19G    1% /mnt/raid0
/dev/md1        9,8G     24K  9,3G    1% /mnt/raid1
/dev/md2         20G     24K   19G    1% /mnt/raid5
/dev/md3         20G     24K   19G    1% /mnt/raid10

Die Netto-Größen zeigen die Rechnung der Level: RAID 0 aus 2 × 10 GiB ergibt 20 GiB, RAID 1 aus 2 × 10 GiB nur 10 GiB, RAID 5 aus 3 × 10 GiB ergibt 20 GiB (eine Platte geht für die Parität), RAID 10 aus 4 × 10 GiB ebenfalls 20 GiB.

Geschwindigkeitsmessung

Die Zieldatei muss auf dem gemessenen Array liegen – sonst misst man die Systemplatte.

  • dd if=/dev/zero of=/mnt/raid0/tempfile bs=1M count=1024 conv=fdatasync,notrunc

Während ein Array noch synchronisiert, sind die Messwerte nicht aussagekräftig.

Mit fio
  • apt update ; apt install fio
schreiben
  • fio --name=seqwrite --filename=/mnt/raid0/fiotest --size=4G --rw=write --bs=1M --direct=1 --ioengine=libaio --iodepth=16 --group_reporting
lesen
  • fio --name=seqread --filename=/mnt/raid0/fiotest --size=4G --rw=read --bs=1M --direct=1 --ioengine=libaio --iodepth=16 --group_reporting

Kontrolle

  • cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md3 : active raid10 sde3[3] sdd3[2] sdc3[1] sdb3[0]
      20953088 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [=============>.......]  resync = 68.4% (14344640/20953088) finish=0.5min speed=202328K/sec
      
md2 : active raid5 sdd2[3] sdc2[1] sdb2[0]
      20953088 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
md1 : active raid1 sde1[1] sdd1[0]
      10476544 blocks super 1.2 [2/2] [UU]
      
md0 : active raid0 sdc1[1] sdb1[0]
      20953088 blocks super 1.2 512k chunks

[4/4] bedeutet: vier von vier Mitgliedern vorhanden. Jedes U steht für ein gesundes Mitglied, ein _ für ein fehlendes.

Bootvorgang

  • Die Konfiguration jedes Mitglieds steht im persistenten Superblock auf der Partition selbst: Level, Array-UUID, Rolle im Verbund und der Name in der Form rechnername:0.
  • Der Zusammenbau erfolgt beim Start durch udev und mdadm, in der Regel schon aus der Initramfs heraus.
  • Ergänzend wird /etc/mdadm/mdadm.conf (Debian) bzw. /etc/mdadm.conf (Rocky) ausgewertet. Die Datei ist nicht nötig, damit das Array überhaupt entsteht – sie legt den Gerätenamen fest.
  • Ohne passenden Eintrag kann ein Array unter einem beliebigen Namen aus dem oberen Bereich erscheinen, typischerweise /dev/md127. Steht in /etc/fstab dann /dev/md0, schlägt das Mounten fehl. In der fstab arbeitet man deshalb besser mit UUID=.
  • Der Partitionstyp 0xFD spielt dabei keine Rolle mehr. Die automatische Erkennung über den Typ (in-kernel autodetect) gilt nur für die alten Metadaten der Version 0.90; mdadm legt seit Langem Version 1.2 an.

Manuelles Zusammenbauen

  • mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
  • mdadm -A /dev/md1 /dev/sdd1 /dev/sde1
  • mdadm -A /dev/md2 /dev/sdb2 /dev/sdc2 /dev/sdd2
  • mdadm -A /dev/md3 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3

Erstellen der Datei /etc/mdadm/mdadm.conf

Für den Betrieb nicht zwingend – legt aber den Gerätenamen fest
  • cd /etc/mdadm
  • echo 'DEVICE partitions' > mdadm.conf
  • mdadm --detail --scan >> mdadm.conf

DEVICE partitions lässt mdadm alle Partitionen aus /proc/partitions durchsuchen. Das ist die übliche Angabe; eine Liste von Gerätemustern ist nur in Sonderfällen nötig.

Nach jeder Änderung muss die Initramfs neu gebaut werden, sonst kennt der Start die Datei nicht:

  • update-initramfs -u

Auf Rocky:

  • dracut -f

Arbeiten am Raid

Partition fehlerhaft setzen

  • mdadm /dev/md1 -f /dev/sde1

Partition entfernen

  • mdadm /dev/md1 -r /dev/sde1

Partition hinzufügen

  • mdadm /dev/md1 -a /dev/sde4

Raid stoppen

  • umount /mnt/raid0
  • mdadm -S /dev/md0

Raid wieder starten

  • mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
  • mount /dev/md0 /mnt/raid0

Raid Info

  • mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Mar  3 09:55:06 2022
        Raid Level : raid0
        Array Size : 20953088 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Thu Mar  3 09:55:06 2022
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : debian-template:0  (local to host debian-template)
              UUID : 3b7816b2:787704c6:db24d9de:55dbcfe8
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

Superblock untersuchen

Der Superblock liegt auf jeder Partition des Arrays.

  • mdadm -E /dev/sdd1
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 1568fb90:9dd8bc83:f06bc9fe:2dcba200
           Name : debian-template:1  (local to host debian-template)
  Creation Time : Thu Mar  3 09:58:15 2022
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 20953088 (9.99 GiB 10.73 GB)
     Array Size : 10476544 (9.99 GiB 10.73 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : 8e4801ba:56f5569e:8e03aa0e:e73190c6

    Update Time : Thu Mar  3 10:33:11 2022
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 360eb7a9 - correct
         Events : 45


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

Zu beachten: mdadm -D fragt das Array ab, mdadm -E die einzelne Partition. Ist ein Array nicht zusammengebaut, hilft nur -E.

Alle Geräte durchsuchen und ein bestimmtes Array zusammenbauen

Gesucht wird nach der Array-UUID bzw. dem Namen aus dem Superblock – hier rechnername:0:

  • mdadm -A --scan /dev/md0

Entsprechend für md1:

  • mdadm -A --scan /dev/md1

Alle bekannten Arrays auf einmal:

  • mdadm -A --scan

Konfiguration updaten

Die alten ARRAY-Zeilen zuerst entfernen, sonst stehen sie doppelt in der Datei. Mit > statt >> würden auch DEVICE-, HOMEHOST- und MAILADDR-Zeilen verschwinden.

  • sed -i '/^ARRAY/d' /etc/mdadm/mdadm.conf
  • mdadm -Ds >> /etc/mdadm/mdadm.conf
  • update-initramfs -u

Superblock löschen

Entfernt die RAID-Metadaten von der Partition, damit sie nicht wieder als Mitglied erkannt wird. Das Array muss vorher gestoppt sein.

  • mdadm --zero-superblock /dev/sde1

Ein unvollständiges Array starten

Startet ein Array, dem Mitglieder fehlen und das deshalb nicht von allein anläuft:

  • mdadm -A --run /dev/md1

Ein Array schreibbar setzen

Holt ein Array aus dem Zustand read-only zurück:

  • mdadm --readwrite /dev/md1

Synchronisationsgeschwindigkeit anzeigen

  • cat /proc/sys/dev/raid/speed_limit_max
200000
  • cat /proc/sys/dev/raid/speed_limit_min
1000

Erhöhen:

  • echo 50000 > /proc/sys/dev/raid/speed_limit_min

Die Werte stehen in KiB/s je Platte und gelten nur bis zum nächsten Start. Dauerhaft über /etc/sysctl.d/:

  • dev.raid.speed_limit_min = 50000

Raid 5 vergrössern

Eigenständige Übung – vorher vorhandene Arrays stoppen und Superblöcke löschen

Erstellen des RAID 5 Arrays

  • mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb2 /dev/sdc2 /dev/sdd2
  • mkdir /mnt/raid5
  • mkfs.ext4 /dev/md2
  • mount /dev/md2 /mnt/raid5

Hinzufügen der zusätzlichen Festplatte

  • mdadm --add /dev/md2 /dev/sde2

Erweitern des RAID 5 Arrays

Beim Reshape werden die Daten über die Platten umverteilt. --backup-file sichert dabei den kritischen Bereich und muss außerhalb des Arrays liegen. Bricht der Vorgang ab, wird diese Datei zur Wiederaufnahme gebraucht.

  • mdadm --grow /dev/md2 --raid-devices=4 --backup-file=/root/md2.backup

Überprüfen des Fortschritts der Erweiterung

  • watch cat /proc/mdstat

Vergrößern des Dateisystems

Erst wenn der Reshape abgeschlossen ist:

  • resize2fs /dev/md2

Überprüfen des neuen Speicherplatzes

  • df -h /mnt/raid5

Raid 10 vergrössern

Nehmt 2 freie Partitionen

Hinzufügen der zusätzlichen Festplatten

RAID 10 wächst paarweise – es kommen zwei Platten auf einmal dazu.

  • mdadm --add /dev/md3 /dev/sdb4
  • mdadm --add /dev/md3 /dev/sdc4

Erweitern des RAID 10 Arrays

  • mdadm --grow /dev/md3 --raid-devices=6

Überprüfen des Fortschritts der Erweiterung

  • watch cat /proc/mdstat

Vergrößern des Dateisystems

  • resize2fs /dev/md3

Überprüfen des neuen Speicherplatzes

  • df -h /mnt/raid10

Migrieren eines RAID 1 Arrays in ein RAID 5 Array

Eigenständige Übung – vorher vorhandene Arrays stoppen und Superblöcke löschen

Erstellen des RAID 1 Arrays

  • mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1
  • mkdir /mnt/raid1
  • mkfs.ext4 /dev/md1
  • mount /dev/md1 /mnt/raid1

Migration des RAID 1 Arrays in ein RAID 5 Array

  • mdadm --add /dev/md1 /dev/sdd1
  • mdadm --grow /dev/md1 --level=5 --raid-devices=3 --backup-file=/root/md1.backup

Überprüfen des Fortschritts der Migration

  • watch cat /proc/mdstat

Vergrößern des Dateisystems

Erst nach abgeschlossener Migration:

  • resize2fs /dev/md1

Überprüfen des neuen Speicherplatzes

  • df -h /mnt/raid1

Überprüfen der RAID-Details

  • mdadm --detail /dev/md1

Der Gerätename bleibt /dev/md1, obwohl darin jetzt ein RAID 5 liegt – die Nummer sagt nichts über das Level aus.

Aufräumen

Nach einer Übung wird das Array vollständig abgebaut, damit die Partitionen für die nächste frei sind.

  • umount /mnt/raid0
  • mdadm -S /dev/md0
  • mdadm --zero-superblock /dev/sdb1 /dev/sdc1
  • wipefs -a /dev/sdb1 /dev/sdc1

Wann wipefs nötig ist

wipefs löscht die Signaturen am Anfang eines Blockgeräts – Dateisystem-Magic, LVM-Label, Partitionstabellen und RAID-Metadaten. Gebraucht wird es an drei Stellen:

  • Vor dem Anlegen eines Arrays auf Partitionen, die vorher ein Dateisystem oder LVM getragen haben. mdadm erkennt die Reste und fragt nach; mit sauberen Partitionen läuft der Befehl ohne Rückfrage durch.
  • Nach dem Abbau eines Arrays, wenn die Partitionen anderweitig verwendet werden sollen. --zero-superblock entfernt nur die RAID-Metadaten – ein Dateisystem, das vorher auf dem Array lag, hinterlässt seine Signatur auf dem Array-Gerät, nicht auf den Mitgliedern.
  • Bei hartnäckigen Resten, wenn mkfs oder pvcreate melden, das Gerät sei bereits in Verwendung.

Ohne Argumente zeigt wipefs nur an, was gefunden wurde, und ändert nichts – der sichere erste Schritt:

  • wipefs /dev/sdb1

Löschen aller Signaturen:

  • wipefs -a /dev/sdb1

Achtung: wipefs -a auf die ganze Platte (/dev/sdb) entfernt die Partitionstabelle mitsamt allen Partitionen. Immer die Partition angeben.

Für RAID-Mitglieder ist die Reihenfolge: erst mdadm -S, dann --zero-superblock, dann bei Bedarf wipefs -a.

SATA RAID