Mdadm Howto: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(24 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
  
−
==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=
 +
;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=
 
=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 298:
 
*mkfs.ext4 /dev/md1
 
*mkfs.ext4 /dev/md1
 
*mount /dev/md1 /mnt/raid1
 
*mount /dev/md1 /mnt/raid1
−
 
−
==Daten auf das RAID 1 Array kopieren==
 
−
*rsync -a /path/to/data/ /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 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 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.

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