Mdadm Howto: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 224: Zeile 224:
 
==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/md0
+
*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 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