Software RAID unter Linux
Markus Brunsch / June 2019
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
- Ein installiertes Linux OS
- Einen Dedicated Server mit mehreren Festplatten
- Root Zugriff
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:
- Wie viele Festplatten bietet der Server?
- Welche Ziele verfolgt man?
- Mehr Speicherplatz / Geringere Verfügbarkeit
- Höhere Verfügbarkeit / Weniger Speicherplatz
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.
- Pro
- Erhöht den Verfügbaren Speicherplatz
- Erhöht die Festplatten Performance
- Contra
- Bei einem Festplatten Ausfall sind die Daten aller Festplatten verloren
RAID1:
Ist ein Verbund aus zwei oder mehr Partitionen. Dabei befinden sich die Daten jeweils gespiegelt auf den beiden Partitionen.
- Pro
- Erhöht die Ausfallsicherheit / Verfügbarkeit der Daten
- Erhöht die Lesegeschwindigkeit der Daten
- Contra
- Der verfügbare Speicherplatz halbiert sich
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.
- Pro
- Erhöhte Ausfallsicherheit / Verfügbarkeit der Daten.
- Optimale Speichernutzung
- Erhöht die Lesegeschwindigkeit der Daten
- Contra
- Weniger Performance bei Schreibzugriffen
Eine Liste weiterer RAID Levels, die weniger häufig verwendet werden:
- Linear: Aneinanderhängen von mehreren Partitionen
- Multipath: Kein RAID, sondern ein Mapping einer Datei auf zwei verschiedene Pfade auf der gleichen Partition (Spiegelung)
- Faulty: Emuliert ein fehlerhaftes RAID-System für Testfälle
- Level 4: Wie Level 0, aber mit einem zusätzlichen Device für Paritätsbits (erhöhte Ausfallsicherheit).
- Level 6: Wie Level 5 aber mit zwei unabhängigen Paritätsbits pro Segment (erhöhte Ausfallsicherheit).
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:
- Für Festplatten größer als 2 TB oder PCs mit UEFI:
sudo parted /dev/sda mklabel gpt
- Für Festplatten kleiner als 2 TB und BIOS:
sudo parted /dev/sda mklabel msdos
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:
--create /dev/md0
- Erzeugt ein neuen Endpoint mit dem Name md0. Falls bereits Endpoints mit dem selben Name vorhanden sind, muss ein anderer freier Name gewählt werden (md1,md2, etc.)--auto md
- Erzeugt ein “klassischen” Endpoint ohne Vor-Partitionierung--level=
- Die Art des RAID Levels--raid-devices
- Die Anzahl der Einzelgeräte, aus denen das RAID bestehen soll/dev/sde1 /dev/sde2 ...
- Die einzelnen Geräte, die zusammengefasst werden sollen. Die Reihenfolge der Bezeichner, bzw. idealerweise die der entsprechenden physischen Geräte sollte man sich aufschreiben, falls im Notfall das RAID von Hand neu zusammengesetzt werden muss
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:
- Stoppen des RAIDs:
sudo umount /dev/md0 sudo mdadm --stop /dev/md0
- Automatische Mount Einträge entfernen (z.B.
/etc/fstab
) - RAID Einträge in der
mdadm.conf
löschen. - Den Superblock der verwendeten Partitionen löschen:
sudo mdadm --zero-superblock /dev/sda1 /dev/sdb1
- 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.