Mdadm Howto: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=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 38:
 
*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 44:
 
*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 55:
 
/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.
  
 
=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 --remove /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 -t ext4 /dev/md0 /mnt/raid0
  
Zeile 116: Zeile 159:
  
 
     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 196:
 
</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
 +
 
 +
==Ein unvollständiges Array starten==
 +
Startet ein Array, dem Mitglieder fehlen und das deshalb nicht von allein anläuft:
 +
*mdadm -A --run /dev/md1
  
==Partition anschalten==
+
==Ein Array schreibbar setzen==
*mdadm --run /dev/sd11
+
Holt ein Array aus dem Zustand ''read-only'' zurück:
==Partition schreibbar setzen==
+
*mdadm --readwrite /dev/md1
*mdadm --readwrite /dev/sd11
 
  
 
=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=
 +
;Eigenständige Übung – vorher vorhandene Arrays stoppen und Superblöcke löschen
 +
 
==Erstellen des RAID 10 Arrays==
 
==Erstellen des RAID 10 Arrays==
 
*mdadm -C /dev/md3 -l 10 -n 4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3
 
*mdadm -C /dev/md3 -l 10 -n 4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3
Zeile 197: Zeile 272:
 
*mkfs.ext4 /dev/md3
 
*mkfs.ext4 /dev/md3
 
*mount /dev/md3 /mnt/raid10
 
*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=
 +
;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 <code>/dev/md1</code>, 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=
 +
<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.
 +
 +
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 26. August 2026, 08:20 Uhr

Einrichten

Installation

Debian:

  • apt-get install mdadm

Rocky:

  • dnf install mdadm

Vorbereitung der Partitionen

Die Partitionen bekommen den Typ Linux RAIDfd00 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.

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 --remove /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 -t ext4 /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

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

Erstellen des RAID 10 Arrays

  • 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

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