home..

Software RAID unter Linux

Installation und Konfiguration eines Software RAIDs (mdadm) auf Linuxsystemen.

Hier geht es um die Installation, Einrichtung und anschließenden Administration eines mdadm Software RAIDs auf Linuxsystemen.

Voraussetzungen

Step 1 - Vorbereitungen

Als erstes sollte man sich Gedanken darüber machen, welches RAID System man betreiben möchte. Dies ist zum einen davon abhängig, welches Ziel man verfolgt und zum anderen wie viele Festplatten im Server selbst verbaut sind.

Hinweis: Ein RAID sollte nicht als Datensicherung gesehen werden, da es keinen Schutz vor Datenverlust bietet, sondern nur die Verfügbarkeit der Daten erhöht.

Step 1.1 - Auswahl des RAID Levels

Die Auswahl des richtigen RAID Levels ist nicht ganz einfach und hängt von mehreren Faktoren ab:

Hier eine Auflistung der meist verwendeten RAID Levels:

RAID0:

Ist ein Verbund aus zwei oder mehr Partitionen. Dabei werden die Partitionen logisch zu einer Partition vereint. Hier findet eine Erniedrigung der Verfügbarkeit statt. Ist eine der Festplatten defekt sind automatisch alle Daten verloren.

RAID1:

Ist ein Verbund aus zwei oder mehr Partitionen. Dabei befinden sich die Daten jeweils gespiegelt auf den beiden Partitionen.

RAID5:

Ist ein Verbund aus drei oder mehr Partitionen. Dabei befinden sich die Daten jeweils gespiegelt auf zwei der drei Partitionen. Auf der dritten Partition, werden so genannte “Paritäten” gespeichert, mit dessen Hilfe es möglich ist, Daten auf defekten Festplatten im RAID wiederherzustellen.

Weitere Infos zu RAID5

Eine Liste weiterer RAID Levels, die weniger häufig verwendet werden:

Step 1.2 - Auflistung der Festplatten im System

Für eine kurze und übersichtliche Liste aller verfügbaren Block devices kann der Befehl lsblk verwendet werden. Hier eine Beispielhafte Ausgabe:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232.9G  0 disk
├─sda1   8:1    0    10G  0 part /
├─sda2   8:2    0 208.1G  0 part /home/han/daten
└─sda3   8:3    0  14.8G  0 part
sr0     11:0    1  1024M  0 rom

Für eine Liste mit genaueren Informationen der Partitionen kann fdisk -l verwendet werden. Hier eine beispielhafte Ausgabe:

$ sudo fdisk -l
Platte /dev/sda: 80.0 GByte, 80026361856 Byte
255 Köpfe, 63 Sektoren/Spur, 9729 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x92669266

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1   *           1        1305    10482381   83  Linux
/dev/sda2            1306        3977    21462840   83  Linux
/dev/sda3            4508        9729    41945715   83  Linux
/dev/sda4            3978        4507     4257225   82  Linux Swap / Solaris

Hinweis: Für ein Software RAID, muss nicht die gesammte Festplatte dem RAID hinzugefügt werden. Es reichen einzelne Partitionen.

Step 2 - Erstellen eines Software RAIDs

Step 2.1 - Vorbereiten der Festplatten

Zunächst müssen die Festplatten entsprechend formatiert werden.

Eine neue, leere Partitionstabelle auf dem Laufwerk erstellen:

Partition auf der Festplatte anlegen:

sudo parted -a optimal -- /dev/sda mkpart primary 2048s -8192s

Möchte man die gesamte Platte nutzen, gibt man statt “2048s -8192s” einfach “0% 100%” an.

Hinweis: Es werden bewusst 8192 Sektoren am Ende der Festplatte ungenutzt gelassen, um für Ausfälle gewappnet zu sein. Es ermöglicht durch den frei gelassene Platz auch Laufwerke als Ersatz zu nehmen, die einige Sektoren weniger haben. Die neu angelegte Partition als RAID Partition markieren:

sudo parted /dev/sda set 1 raid on

Step 2.2 - Anlegen des Software RAIDs

Unter Linux ist mdadm das Hauptwerkzeug. Es bildet die Schnittstelle zu den RAID-Funktionen des Kernels.

Um ein RAID 1 anzulegen genügt der folgende Befehl:

sudo mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

Um ein RAID 5 anzulegen genügt der folgende Befehl:

sudo mdadm --create /dev/md0 --auto md --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Die Parameter im Einzelnen:

Das neu erstellte Blockgerät mdX kann sofort benutzt werden und das System darf auch währenddessen heruntergefahren oder neu gestartet werden.

Der aktuelle Status der RAID Erstellung kann mit folgendem Befehl abgefragt werden:

watch cat /proc/mdstat

Eine Beispielhafte Ausgabe:

Personalities : [raid0] [raid1]
mdX : active raid1 sda1[1] sdb1[0]
      8384448 blocks super 1.2 [2/2] [UU]
      [==============>......]  check = 74.7% (6267520/8384448) finish=0.1min speed=202178K/sec

Formatieren des neuerstellten RAIDs:

sudo mkfs.ext4 /dev/md0

Einbinden des RAIDs:

sudo mount /dev/md0 /mnt/md0

Automatisches einbinden des RAIDs:

Hier muss die entsprechende Zeile in die Datei /etc/fstab eingetragen werden:

/dev/md0     /mnt/md0      ext4      defaults 0 2

(Optional) Hotspare Festplatten: Bei Hotspare Festplatten/Partitionen handelt es sich um Festplatten/Partitionen welche im Normalfall nicht verwendet werden. Diese kommen zum Einsatz wenn eine der aktiven Festplatten/Partitionen des RAID-Verbundes einen Fehler aufweist oder defekt ist. Wenn in einem Software-Raid keine Hotspare Platte definiert ist muss der Rebuild eines defekten RAIDs manuell gestartet werden. Ist eine Hotspare vorhanden wird mit dem Rebuild automatisch begonnen. Eine Hotspare Festplatte kann mit dem folgendem Befehl hinzugefügt werden.

mdadm --add /dev/md/0 /dev/sda1

Step 3 - Auflösen eines Software RAIDs

Um ein Software RAID auszulösen, müssen folgende Schritte ausgeführt werden:

  1. Stoppen des RAIDs:
    sudo umount /dev/md0
    sudo mdadm --stop /dev/md0
    
  2. Automatische Mount Einträge entfernen (z.B. /etc/fstab)
  3. RAID Einträge in der mdadm.conf löschen.
  4. Den Superblock der verwendeten Partitionen löschen:
    sudo mdadm --zero-superblock /dev/sda1 /dev/sdb1
    
  5. RAID flag deaktivieren:
    sudo parted /dev/sda set 1 raid off
    

Step 4 - Verwaltung eines Software RAIDs

Step 4.1 - RAID Status ermitteln

Eine kurze Auflistung aller RAIDs im System erhält man mit der Ausgabe der Datei /proc/mdstat

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0]
      8380416 blocks super 1.2 [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
      536739840 blocks super 1.2 [2/2] [UU]
      bitmap: 3/4 pages [12KB], 65536KB chunk

md1 : active raid1 sdb2[1] sda2[0]
      1047552 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Eine genauere Ausgabe erfolgt mit dem Befehl:

sudo mdadm --detail /dev/md/2

Hier eine Beispiel Ausgabe:

/dev/md/2:
           Version : 1.2
     Creation Time : Fri Feb 22 17:19:37 2019
        Raid Level : raid1
        Array Size : 536739840 (511.88 GiB 549.62 GB)
     Used Dev Size : 536739840 (511.88 GiB 549.62 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun May 26 13:49:02 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : rescue:2
              UUID : c76e5446:f3c41fbc:0b62ca86:803a7e88
            Events : 2170

    Number   Major   Minor   RaidDevice State
       0       8        3        0      active sync   /dev/sda3
       1       8       19        1      active sync   /dev/sdb3

Step 4.2 - Defekte Festplatte tauschen

Dazu muss zunächst die defekte Festplatte aus dem RAID entfernt werden:

sudo mdadm --manage /dev/md/0 -r /dev/sda1

Wenn keine Hotspare Festplatte zur Verfügung steht muss eine neue Festplatte partitioniert werden. Wichtig dabei ist das die neue Festplatte die selbe Partitionierung wie die defekte Festplatte aufweist!

Um die neue Festplatte zu partitionieren, genügt es von einer bestehenden Festplatte die Partitionstabelle zu kopieren. Für MBR Partitionierte Festplatten:

sfdisk --dump /dev/sda > sda_parttable_mbr.bak # Erstellt ein Backup der Partitionstabelle
sfdisk -d /dev/sda | sfdisk /dev/sdb # Kopiert die Partitionstabelle von sda zu sdb

Für GPT Partitionierte Festplatten:

sgdisk --backup=sda_parttable_gpt.bak /dev/sda # Erstellt ein Backup der Partitionstabelle
sgdisk --load-backup=sda_parttable_gpt.bak /dev/sdb # Kopiert das erstellte Backup der Partitionstabelle auf sdb

Ist die neue Festplatte korrekt partitioniert kann sie dem RAID-Verbund wieder hinzugefügt werden:

sudo mdadm --manage /dev/md/0 -a /dev/sda1

Um nun den Wiederherstellungsprozess zu starten, muss die neu hinzugefügte Festplatte mit dem Status faulty versehen werden:

sudo mdadm --manage --set-faulty /dev/md/0 /dev/sda1

Der Fortschritt kann wieder über den Befehl watch cat /proc/mdstat überwacht werden.

Sobald der Rebuild des RAIDs abgeschlossen ist muss die Partition aus dem RAID entfernt und wieder hinzugefügt werden um den Status “faulty” wieder zu entfernen. Dies geschieht mit den Befehlen:

sudo mdadm --manage /dev/md/0 -r /dev/sda1 # Zum entfernen
sudo mdadm --manage /dev/md/0 -a /dev/sda1 # Zum hinzufügen

Hinweis: Sollte das System auf dem RAID selbst liegen, ist es notwendig. Den Bootloader auf der entsprechenden Festplatte zu installieren. Dies geschieht mit dem folgenden Befehl:

update-grub
grub-install /dev/sda

Step 4.3 - RAID Erweitern

Es können nur RAIDs mit Level 1, 5 und 6 erweitert werden. Die neue Partition muss zunächst als Hotspare hinzugefügt werden:

sudo mdadm /dev/md0 --add /dev/sda1

Jetzt kann das RAID um das neue Laufwerk erweitert werden:

sudo mdadm --grow --raid-devices=5 /dev/md0 --backup-file=/root/md0.bak

Hinweis: In der mittels --backup-file angegebenen Datei werden kritische Bereiche gesichert (typischerweise einige wenige MiB). Falls das System während der Erweiterung abstürzt, kann die Erweiterung später mittels folgendem Befehl fortgesetzt werden:

sudo mdadm /dev/md0 --continue --backup-file=/tmp/md0.bak

Die Sicherungsdatei darf nicht auf dem zu erweiternden RAID liegen! Die Verwendung von backup-file ist nicht zwingend notwendig, wird aber dringend empfohlen.

Das Dateisystem muss noch erweitert werden, damit der neu entstandene Speicherplatz genutzt werden kann. Die Erweiterung findet mit Folgenen Befehlen statt:

sudo umount /dev/md0 /mnt           # Das Dateisystem aushängen
sudo fsck.ext4 -f /dev/md0          # Die Prüfung erzwingen, selbst wenn vor Kurzem geprüft wurde
sudo resize2fs /dev/md0             # Das Dateisystem auf Maximalgröße erweitern
sudo mount /dev/md0 /mnt            # Das Dateisystem wieder einhängen

Step 4.4 - RAID Monitoren

Um das RAID zu überwachen, kann es dieser Eintrag als Crontab (sudo crontab -e) hinterlegt werden:

0 0 * * * /usr/share/mdadm/checkarray --cron --all --quiet >/dev/null 2>&1 # Läuft jeden Tag um 00:00 Uhr

Fazit

In diesem Beitrag wurde berichtet, wie man ein passendes RAID Level für sein vorhaben auswählt und dieses dann entsprechend auf Linux Systemen mithilfe von mdadm konfiguriert. Des weiteren wird auf Administrative tätigkeiten eingegangen, wie zum Beispiel Erweitern eines RAIDs oder das Tauschen defekter Festplatten.

© 2023 Markus Brunsch