Mdadm Howto: Unterschied zwischen den Versionen
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 220: | Zeile 220: | ||
==Ein unvollständiges Array starten== | ==Ein unvollständiges Array starten== | ||
Startet ein Array, dem Mitglieder fehlen und das deshalb nicht von allein anläuft: | Startet ein Array, dem Mitglieder fehlen und das deshalb nicht von allein anläuft: | ||
| − | *mdadm --run /dev/ | + | *mdadm -A --run /dev/md1 |
==Ein Array schreibbar setzen== | ==Ein Array schreibbar setzen== | ||
Holt ein Array aus dem Zustand ''read-only'' zurück: | Holt ein Array aus dem Zustand ''read-only'' zurück: | ||
| − | *mdadm --readwrite /dev/ | + | *mdadm --readwrite /dev/md1 |
=Synchronisationsgeschwindigkeit anzeigen= | =Synchronisationsgeschwindigkeit anzeigen= | ||
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/fstabdann/dev/md0, schlägt das Mounten fehl. In der fstab arbeitet man deshalb besser mitUUID=. - Der Partitionstyp
0xFDspielt dabei keine Rolle mehr. Die automatische Erkennung über den Typ (in-kernel autodetect) gilt nur für die alten Metadaten der Version 0.90;mdadmlegt 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.
mdadmerkennt 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-superblockentfernt 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
mkfsoderpvcreatemelden, 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.