3    Festplatten und andere Devices

In diesem Kapitel geht es um Devices im weitesten Sinne. Dabei wird RAID genauso erklärt wie LVM. Außerdem wird ein zusätzliches Augenmerk auf »vdev« (das /procDateisystem) sowie »udev« und die Erzeugung eigener udev-Regeln gelegt.

Für dieses Kapitel haben wir einige typische Anwendungsbeispiele von fortgeschrittenen Techniken rund um Festplatten und andere Devices herausgesucht. Wir erklären Ihnen, wie Sie Software-RAID verwenden können, und zeigen Ihnen, wie Sie den Logical Volume Manager (LVM) nutzen und wie Sie eigene udev-Regeln anlegen können. Abgeschlossen wird dieses Kapitel durch Erläuterungen zum /proc-Dateisystem.

3.1    RAID

Wenn im Folgenden von Geräten (englisch »Devices«) gesprochen wird, dann sind Block Devices gemeint – also Geräte, auf die blockweise zugegriffen werden kann. Zur Gattung der Block Devices gehören insbesondere Festplatten, USB-Sticks, aber auch LUNs, die von einem SAN (Storage Area Network) kommen.

Mit dem Begriff RAID (Redundant Array of Independent Disks) beschreibt man das Zusammenfassen von mehreren Geräten zu einem übergeordneten logischen Gerät. In der Regel fasst man Geräte zusammen, um größeren Speicherplatz zu bekommen, höhere Zugriffsgeschwindigkeiten zu erreichen oder um Ausfallsicherheit herzustellen.

RAIDs können sowohl durch die Hardware (spezielle RAID-Controller, die mehrere Festplatten zusammenfassen und dem Betriebssystem nur eine einzige logische Einheit melden) als auch durch Software (aus mehreren Devices wird ein Special-Device erstellt) erzeugt werden. Verschiedene RAID-Level, die wir im Folgenden erklären werden, bieten spezifische Vor- und Nachteile.

Unerheblich ist, ob ein RAID-Controller eingesetzt oder das RAID durch Software verwaltet wird: Das Betriebssystem sieht in jedem Fall ein logisches Block Device, mit dem es wie mit jeder anderen Festplatte verfahren kann. Die physikalischen Gerätschaften hinter dem logischen Laufwerk sind für das Betriebssystem nicht wichtig. Hardware-RAIDs sind schneller und robuster als Software-RAIDs.

3.1.1    RAID-0

RAID-0 wird auch Striping genannt. Bei diesem Verfahren werden zwei (oder mehr) Geräte zu einem einzigen zusammengefasst. Dadurch bekommt man den doppelten (oder mehrfachen) Speicherplatz. Das ist aber noch nicht alles: Die Soft- oder Hardware sorgt dafür, dass abwechselnd auf das eine und dann auf das andere Gerät geschrieben wird. So finden sich beispielsweise alle Blöcke mit ungerader Nummer auf Gerät eins und alle Blöcke mit gerader Nummer auf Gerät zwei. Bei drei oder mehr Geräten funktioniert das analog.

Mit der Anzahl der beteiligten Geräte steigt die Geschwindigkeit sowohl im Schreiben wie auch im Lesen. Nehmen wir an, Sie wollen 1 GB an Daten schreiben, bei zwei Geräten würden 500 GB auf dem ersten Gerät landen und 500 GB auf dem zweiten. Wenn beide Geräte gleich schnell sind, würde damit die Transfergeschwindigkeit verdoppelt oder vermehrfacht werden. Allerdings führt der Ausfall eines Geräts dazu, dass die Daten nicht mehr lesbar sind. Der Einsatz von RAID-0 ist somit auf Bereiche beschränkt, bei denen die Performance besonders wichtig ist und die Daten im Fehlerfall schnell wiederherstellbar sind.

3.1.2    RAID-1

RAID-1 oder Mirroring (»Spiegelung«) wird auf fast allen Serversystemen zur Absicherung der Systemdaten benutzt. Die Spiegelung wird mit zwei oder mehr Geräten durchgeführt, die zu jeder Zeit alle einen identischen Inhalt haben. Alle Daten werden mehrfach geschrieben und sind somit auch beim Ausfall eines Geräts weiter verfügbar. Sollte ein Gerät ausfallen, so kann es im laufenden Betrieb ersetzt werden. Nachdem sich die Spiegelung synchronisiert hat, kann so weitergearbeitet werden, als wäre nichts ausgefallen. Beim Schreiben gibt es somit keine Performance-Steigerung. Ganz im Gegenteil: Die Geschwindigkeit des Schreibens ist abhängig vom langsamsten Gerät im RAID-1-Verbund. Einzig beim Lesen kann es mit guten Controllern oder guter Software zu einer Geschwindigkeitssteigerung kommen, wenn wie bei RAID-0 wechselseitig gelesen wird. Man spricht in dem Fall auch von RAID 0+1.

Der große Nachteil dieses Verfahrens ist, dass der Speicherplatz der Geräte nicht komplett genutzt wird. Zwei Geräte mit 1 TB erzeugen ein logisches Laufwerk mit 1 TB nutzbarem Platz, nicht mehr. Ein RAID-1 schützt nicht vor logischen Fehlern und ist daher nicht mit einem Backup zu verwechseln. Löschen Sie eine Datei, ist sie unwiederbringlich verschwunden.

3.1.3    RAID-5

Für ein RAID-5 werden wenigstens drei Geräte benötigt. Ähnlich wie bei RAID-0 werden die Daten auf zwei Geräte verteilt, das dritte Gerät enthält eine Prüfsumme (auch Parität genannt) – in der Regel werden die Daten des ersten und zweiten Geräts mit XOR verknüpft – und kann so beim Ausfall eines Geräts den Inhalt wieder zurückrechnen. Tabelle 3.1 gibt Ihnen einen Eindruck, wie das funktioniert:

Gerät 1 Gerät 2 Gerät 3
Datenblock 1 Datenblock 2 Prüfsumme 1/2
Prüfsumme 3/4 Datenblock 3 Datenblock 4
Datenblock 5 Prüfsumme 5/6 Datenblock 6
Datenblock 1 Datenblock 2 Prüfsumme 1/2
... ... ...

Tabelle 3.1    RAID-5

RAID-5 kombiniert zum Teil die Vorteile eines RAID-0 mit einer Ausfallsicherheit. Wenn ein einzelnes Gerät ausfällt, sind alle Daten noch vorhanden, und durch Austausch des defekten Geräts kann die Redundanz wiederhergestellt werden. Da immer eine Festplatte mit Prüfsummen belegt ist, ist die Kapazität eines RAID-5-Verbunds bestimmt durch die Anzahl der Geräte minus eins.

Üblich sind RAID-5-Konfigurationen mit vier Geräten. Auf drei Geräten finden sich Daten und auf dem vierten Gerät die Prüfsummen analog zu Tabelle 3.1. Der Geschwindigkeitsvorteil beim Schreiben der Daten ist leider gering, da die Paritätsinformationen bei jedem Schreibzugriff neu berechnet werden müssen. Dafür steigt die Lesegeschwindigkeit mit der Anzahl der verwendeten Geräte.

3.1.4    RAID-6

Bei RAID-6-Systemen werden zwei Geräte für Prüfsummen verwendet und nicht nur ein Gerät wie bei RAID-5. Hier dürfen zwei Geräte ausfallen, bevor Daten verloren gehen. Da die Schreibgeschwindigkeit gegenüber RAID-5 noch schlechter ist, wird dieses Verfahren nur sehr selten angewendet. Üblicher ist es, ein nicht benutztes Gerät zusätzlich zu verwenden (Hot Spare genannt), um im Fehlerfall das defekte Gerät zu ersetzen.

3.1.5    RAID-10

RAID-10 – gesprochen »eins-null«, nicht »zehn« – ist eine Kombination aus RAID-0 und RAID-1. Zwei Geräte werden mittels RAID-1 gespiegelt und eine oder mehrere dieser Spiegelungen wird bzw. werden mit einem RAID-0 zusammengefasst (»gestripet«). Damit bietet RAID-10 eine sehr gute Performance, aber leider auch den Nachteil, dass nur die Hälfte der Gesamtkapazität verwendet werden kann. Dafür darf in jedem Fall ein Gerät ausfallen, und im gleichen Stripeset darf sogar ein zweites Gerät ausfallen.

3.1.6    Zusammenfassung

In Tabelle 3.2 sehen Sie eine Übersicht über die RAID-Systeme und deren Performance.

RAID-Level Benötigte Geräte (n) Nettokapazität Leseperformance Schreibperformance
0 mindestens 2 n × Größe n n
1 mindestens 2 (n/2) × Größe 2/n oder n n/2
5 mindestens 3 (n–1) × Größe n n/4
6 mindestens 4 (n–2) × Größe n n/6
10 mindestens 4 (n/2) × Größe n/2 oder n n/2

Tabelle 3.2    Übersicht der RAID-Level

Im Regelfall werden bei produktiven Servern die Geräte, auf denen das System läuft, mit RAID-1 gespiegelt. So führt der Ausfall eines Geräts nicht zum Ausfall des Servers, und es gehen keine Daten verloren. Bei großen Datenmengen – wie beispielsweise bei Backupservern oder Bilddatenbanken – wird ein RAID-5 verwendet, weil der »Verschnitt« nicht so groß und eine Ausfallsicherung gegeben ist. Das wird aber mit einer Reduktion der Schreibgeschwindigkeit erkauft. Hardware-RAID-Controller, die die Paritätsberechnung per Hardware implementiert haben, können diesen Nachteil aufwiegen.

Wenn Sie hingegen mit einem Software-RAID arbeiten, kann die verminderte Schreibgeschwindigkeit zu Problemen führen. So können beispielsweise Backups abbrechen, weil zu viele Server gleichzeitig gesichert werden. Ein Spezialfall bilden RAID-5-Systeme mit sehr vielen Geräten: Dann nimmt die Performance wieder zu.

Sollten Sie viel Speicherplatz und hohe Performance sowie Ausfallsicherheit benötigen, führt kaum etwas an einem RAID-10 oder an einem Storage Area Network (SAN) vorbei.

[+]  RAID-Systeme je nach Zweck auswählen!

Wie Sie gesehen haben, haben sowohl die Anzahl der Festplatten wie auch der gewählte RAID-Level einen Einfluss auf die Lese- und Schreibperformance. So kann es sinnvoller sein, ein RAID-System mit vielen kleineren Festplatten zu betreiben, als den Speicherplatz durch wenige große Festplatten zur Verfügung stellen zu lassen (wenn Sie sich für ein RAID-5 entscheiden).

RAID-5 mit drei identischen Festplatten erreicht gemäß Tabelle 3.2 nur drei Viertel der Geschwindigkeit einer einzelnen Festplatte. Mit sechs identischen Festplatten sind Sie bereits bei der 1,5-fachen Geschwindigkeit, und selbst das könnte – je nach Anwendungszweck – zu langsam sein.

Sollten Sie beispielsweise die vierfache Schreibgeschwindigkeit einer einfachen Festplatte benötigen, so können Sie diese mit 16 Festplatten im RAID-5-Verbund oder mit acht Festplatten in einem RAID-10 oder mit vier Festplatten (ohne Ausfallsicherung) in einem RAID-0 aufbauen.

Nicht nur der RAID-Level, auch und vor allem die Anzahl der beteiligten Festplatten haben einen Einfluss auf die Lese- und Schreibperformance. Es gibt leider kein System, das allen Anforderungen gleichermaßen gerecht wird.

3.1.7    Weich, aber gut: Software-RAID

[+] Eine Anmerkung vorab: Wenn sich Ihnen die Möglichkeit der Entscheidung bietet, ziehen Sie einen Hardware-RAID-Controller immer einem Software-RAID vor. Die Hardware bietet spezialisierte Prozessoren und Chips, die die RAID-Operationen – Paritätsberechnung und Verteilung der Lese- und Schreibzugriffe – schneller durchführen als ein Allzweckprozessor in Ihrem Server.

In einem Software-RAID wird diese Aufgabe vom Hauptprozessor übernommen. Da heutige CPUs leistungsfähig genug sind, ist das im normalen Betrieb kein großes Problem. Wenn allerdings ein Gerät ausfällt, kommt es zu einer erheblichen Mehrlast, insbesondere dann, wenn die Geräte mit RAID-5 verbunden sind. Schließlich muss für jeden Block auf den beteiligten Geräten eine neue Prüfsumme berechnet und die Verteilung der Daten neu angestoßen werden. Die CPU-Last kommt zusätzlich zur I/O-Last auf die Geräte, was dazu führen kann, dass der Computer nicht mehr benutzbar ist und enorm träge reagiert. Wenn es also außer auf die Verfügbarkeit auch auf die Möglichkeit einer ressourcenschonenderen Wiederherstellung nach einem Fehlerfall ankommt, dann sind Sie mit einem Software-RAID nicht so gut bedient wie mit einem Hardware-RAID. Klar ist leider, dass auch mit einem Hardware-RAID die Performance sinkt, wenn ein Neuaufbau des RAIDs läuft, aber der Einbruch ist nicht ganz so drastisch wie bei der Software.

Ein weiterer Punkt, der für ein Hardware-RAID spricht, ist die eingebaute Batterie. Durch sie kann bei einem Stromausfall der komplette Inhalt des Caches noch auf die Festplatten geschrieben werden, und die ausstehenden Transaktionen können abgeschlossen werden. Aus Performance-Sicht bringt das auch einen Vorteil: Der Controller ist in der Lage, eine I/O-Operation als abgeschlossen zu melden, wenn sie sich im Cache des Controllers befindet, und nicht erst, wenn sie bereits auf der Festplatte ist. Software-RAIDs sind enorm anfällig für Stromausfälle und reagieren bestenfalls mit einem Neuaufbau des RAID-Arrays nach dem Ausf all. Im schlimmsten Fall sind die Daten zwischen den einzelnen Geräten eines RAIDs nicht mehr konsistent und es droht Datenverlust.

Aus den genannten Gründen sind RAID-Controller und damit Hardware-RAIDs bei Festplatten vorzuziehen, wenn es das Budget erlaubt. Für kleinere Systeme und auch für Geräte, die aus dem SAN angebunden sind, sind Software-RAIDs eine gute Option, im Fall von SAN sogar der beste Weg.

[ ! ] Nicht alles, was sich RAID-Controller nennt, ist auch einer. Als Faustregel gilt: Wenn Sie unter Linux noch einzelne Festplatten und keine logischen Laufwerke sehen, stehen die Chancen gut, dass der RAID-Controller keiner ist. Diese falschen Controller werden auch FakeRAID-Controller genannt. In diesem Fall greift keiner der oben genannten Vorteile eines Hardware-RAID-Controllers. Aber auch, wenn Sie logische Laufwerke sehen, kann es sein, dass der Hauptprozessor Ihres Systems die Hauptarbeit leistet, da Linux eventuell einen Fake-RAID-Treiber einsetzt, der die Arbeit übernimmt. Bitte informieren Sie sich gut vor dem Kauf, um eventuelle Enttäuschungen zu vermeiden.

3.1.8    Software-RAID unter Linux

Nach den Vorbetrachtungen sind wir nun endlich so weit, um Software-RAIDs unter Linux aufzubauen und zu verwalten. In diesem Abschnitt geht es um das Tool mdadm; beachten Sie bitte, dass Sie auch mit dem Logical Volume Manager (LVM) (siehe Abschnitt 3.2.9, »Mirroring ausführlich«) Software-RAIDs verwalten können.

Bitte nutzen Sie die Möglichkeiten der Installationsroutinen Ihrer Distribution, wenn Sie Ihr System auf gespiegelten Systemplatten betreiben wollen. Auf den folgenden Seiten geht es um den Aufbau von RAIDs in einem laufenden System, um ihre Verwaltung und um die Wiederherstellung nach einem Fehlerfall.

Im virtuellen /proc-Dateisystem (siehe Abschnitt 3.4, »Alles virtuell? ›/proc‹«) sehen Sie den Status aller Gerätschaften unter der Kontrolle von mdadm unter /proc/mdstat. Wenn Sie noch kein RAID definiert haben, können Sie aber zumindest die unterstützten Features (»Personalities«) Ihrer mdadm-Version sehen. Listing 3.1 zeigt Ihnen die Ausgabe eines minimalen openSUSE-Systems:

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
unused devices: <none>

Listing 3.1    »mdstat« ohne konfigurierte RAIDs

Für den Fall, dass das Kommando aus Listing 3.1 keine sinnvolle Ausgabe bietet, müssen Sie via modprobe eines oder mehrere der Kernelmodule raid0, raid1, raid456, raid6 oder raid10 quasi »von Hand« laden.

Mit dem folgenden Kommando legen wir ein RAID-5-System mit drei Geräten an:

opensuse:~ # mdadm --create --verbose /dev/md0 --level=raid5 \
--raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 1047552K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Listing 3.2    RAID-5 mit drei Festplatten

Glücklicherweise sind die Optionen sprechend. Ein neues RAID wird mit --create erstellt, und die Art des neuen RAIDs wird mit --level angegeben. Da sich die RAIDs je nach Anzahl der aktiv verwendeten Geräte unterscheiden und unterschiedlich erzeugt werden, muss diese Anzahl auch noch dem Programm mit --raid-devices mitgeteilt werden. Wir werden in Listing 3.15 noch sehen, dass dieser Parameter wichtig ist.

Für eine ausführliche Ausgabe sorgt der Parameter --verbose. Der Name des neuen Geräts (oder »logischen Laufwerks«) ist /dev/md0, wobei sich die Abkürzung md auf »Multiple Devices« bezieht. Verschiedene Faktoren beeinflussen die Dauer des Aufbaus; mit cat /proc/mdstat können Sie jederzeit – auch während des Aufbaus – den aktuellen Status überprüfen.

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdd[3] sdc[1] sdb[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 3.8% (40320/1047552) \
finish=2.9min speed=5760K/sec
[…]
opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdd[3] sdc[1] sdb[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[…]

Listing 3.3    Der RAID-Status aus »/proc/mdstat«

Wie Sie an der Ausgabe in Listing 3.3 feststellen können, ist der Aufbau von md0 erfolgreich gewesen. [UUU] zeigt den Status der beteiligten Geräte an. U steht dabei für »Up«, im Fehlerfall oder beim Neuaufbau des RAIDs würden Sie einen Unterstrich _ für »Down« sehen. Die Ziffern [3/3] bedeuten, dass das Gerät im Idealfall aus 3 Einzelteilen besteht (die Ziffer vor dem Schrägstrich) und dass alle drei Geräte gerade aktiv sind (die Ziffer nach dem Schrägstrich). Kein Grund zur Sorge besteht, wenn die zweite Ziffer größer oder gleich der ersten Ziffer ist.

Nun können wir das Gerät formatieren und einbinden:

opensuse:~ # mkfs -t ext4 /dev/md0
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
131072 inodes, 523776 blocks
26188 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

opensuse:~ # mount /dev/md0 /mnt
opensuse:~ # df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/md0 2.0G 3.0M 1.9G 1% /mnt

Listing 3.4    Formatieren und Mounten des neuen RAID-Systems

Die bisher getroffenen Einstellungen überstehen den nächsten Neustart des Systems nicht. Um die Konfiguration sicher zu machen und das RAID nach einem Reboot zur Verfügung zu haben, muss sie noch mit mdadm in die Datei /etc/mdadm.conf geschrieben werden (siehe Listing 3.5).

[+] Bitte beachten Sie, dass sich der Speicherort je nach Distribution unterscheidet: Bei CentOS und OpenSUSE befindet er sich in der Datei /etc/mdadm.conf und bei Ubuntu/Debian in /etc/mdadm/mdadm.conf.

opensuse:~# mdadm --examine --scan >> /etc/mdadm.conf
opensuse:~# cat /etc/mdadm.conf
ARRAY /dev/md/0 metadata=1.2 \
UUID=c23aefab:abd8738f:b031f231:60131eba name=opensuse:0

Listing 3.5    Konfiguration des neuen RAID-Systems

Bei jedem Neustart überprüft mdadm alle Partitionen und versucht Konfigurationsdaten zu finden. Wenn es die Daten findet, ist das Tool in der Lage, die RAIDs auch eigenständig wieder aufzubauen. Sollten die Konfigurationen allerdings korrupt sein, kommen Sie ohne /etc/mdadm.conf nicht weiter. Der schlimmstmögliche Fall wäre, dass die Konfigurationsdateien nicht wiederherstellbar sind. Um dies auszuschließen, sollten Sie die Konfiguration auf jeden Fall schreiben.

Mit einer zusätzlichen nicht benutzten Festplatte können Sie die Datensicherheit erhöhen, wenn Sie diese zum RAID hinzufügen. Nicht benutzte Festplatten, die nicht aktiv verwendet werden, werden Spare Disks oder Hot Spares genannt. Falls in einem RAID eine Festplatte ausfällt, übernimmt die Hot-Spare-Disk, und das RAID baut sich mit dieser neu auf. In Listing 3.6 sehen Sie, wie Sie vorgehen müssen:

opensuse:~ # mdadm --add /dev/md0 /dev/sde
mdadm: added /dev/sde

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sde[4](S) sdb[0] sdc[1] sdd[3]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[…]

Listing 3.6    »Spare Disk« hinzufügen

Das »(S)« hinter dem Festplattennamen – hier /dev/sde – steht für »Spare Disk.« In Listing 3.7 sehen Sie, dass, wenn eine Festplatte ausfällt, die Spare Disk übernimmt:

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdd[3](F) sdc[1] sde[4] sdb[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[===>.................] recovery = 17.3% (182280/1047552) finish=2.7min \
speed=5312K/sec
[…]

Listing 3.7    Ausfall von »/dev/sdd«

Die defekte Festplatte muss ausgetauscht werden. Wenn Ihr System das hardwaretechnisch unterstützt, funktioniert das auch online. In Listing 3.8 sehen Sie, wie die defekte Festplatte entfernt wird:

opensuse:~ # mdadm --manage --replace /dev/md0 /dev/sdd
mdadm: Marked /dev/sdd (device 2 in /dev/md0) for replacement

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdb[0] sde[4] sdd[3](F) sdc[1]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[…]

Listing 3.8    Entfernen der defekten Festplatte

Wenn Sie nun so, wie in Listing 3.6 beschrieben, die Festplatte neu hinzufügen, wird sie als neue Spare Disk verwendet. Falls das RAID einen größeren Fehler hat, schafft es die RAIDSoftware mdadm nicht mehr, selbstständig das RAID wieder aufzubauen (siehe Listing 3.9). In solchen Fällen können und müssen Sie selbst Hand anlegen, wenn Sie das RAID wieder benutzen wollen.

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active (auto-read-only) raid5 sdd[3](S) sdc[1] sde[4]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[…]

Listing 3.9    Defektes RAID

[ ! ] Bitte bewahren Sie Ruhe, und überlegen Sie genau Ihre nächsten Schritte. Es besteht die Möglichkeit, dass Sie Fehler machen, die Ihre Daten unwiederbringlich löschen. Wenn Sie kein Backup Ihrer Daten haben, wäre jetzt eine gute Gelegenheit, mittels Disk Images die Rohdaten Ihrer Festplatten zu sichern. Wie das genau funktioniert, können Sie in Abschnitt 7.5.3, »Erstellen eines Images mit ›dd‹«, nachlesen.

Für die nächsten Schritte ist es wichtig, zuerst das RAID-System zu deaktivieren:

opensuse:~ # mdadm --manage --stop /dev/md0
mdadm: stopped /dev/md0

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
unused devices: <none>

Listing 3.10    Deaktivierung des RAIDs

Jetzt können Sie mit der Analyse beginnen. Wie Sie in Listing 3.11 sehen können, scheint die erste Festplatte des RAIDs keinen Block mit Konfigurationsdaten mehr zu haben:

opensuse:~ # mdadm --misc --examine /dev/sdb
mdadm: No md superblock detected on /dev/sdb.

opensuse:~ # mdadm --misc --examine /dev/sdc
/dev/sdc:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : c23aefab:abd8738f:b031f231:60131eba
Name : opensuse:0 (local to host opensuse)
Creation Time : Sat Aug 16 15:00:56 2014
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 2095104 (1023.17 MiB 1072.69 MB)
Array Size : 2095104 (2046.34 MiB 2145.39 MB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
Unused Space : before=1960 sectors, after=0 sectors
State : clean
Device UUID : ddb975d5:3fe1883e:bd214593:623a5fe5

Update Time : Sat Aug 16 16:05:19 2014
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : d9036ccf - correct
Events : 49

Layout : left-symmetric
Chunk Size : 512K

Device Role : Active device 1
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)

Listing 3.11    Detailuntersuchung von »/dev/sdb«

Auf der zweiten Festplatte scheinen aber noch alle Daten vorhanden zu sein. Der Block der dritten Festplatte ähnelt dem der zweiten und ist aus diesem Grund hier nicht aufgeführt.

In Listing 3.11 finden Sie alle Daten, die das RAID betreffen, und im unteren Teil bei Array State sehen Sie den letzten bekannten Zustand des RAIDs. In unserem Fall – das RAID war read-only vorhanden – konnte der Zustand nicht mehr gespeichert werden. Wichtig ist, dass die Array UUID bei allen am RAID beteiligten Festplatten identisch ist.

Wir hatten ein RAID-5 gebaut und dieses mit drei Festplatten versehen. Zwei von den beteiligten Festplatten scheinen noch intakt zu sein, und wir haben in diesem Fall sogar eine Spare Disk. Das bedeutet in Summe, dass wir in der Lage sind, das RAID so wie in Listing 3.12 wieder aufzubauen, ohne dass wir Datenverlust befürchten müssen:

opensuse:~ # mdadm --assemble --run /dev/md0 /dev/sdc /dev/sdd /dev/sde
mdadm: /dev/md0 has been started with 2 drives (out of 3) and 1 spare.

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdc[1] sdd[3] sde[4]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[===>.................] recovery = 15.4% (162664/1047552) \
finish=0.7min speed=20333K/sec
[…]

Listing 3.12    Zusammenbauen des RAID-Verbunds

Zur Sicherheit sollten Sie noch das Dateisystem prüfen. Prinzipiell sollte es keine Probleme gegeben haben. Allerdings wurde das Filesystem in unserem Fall unsauber geschlossen.

opensuse:~ # fsck /dev/md0
fsck from util-linux 2.23.2
e2fsck 1.42.8 (20-Jun-2013)
/dev/md0 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/md0: 11/131072 files (0.0% non-contiguous), 17196/523776 blocks

Listing 3.13    Dateisystemprüfung

Wenn der Superblock mit den RAID-Konfigurationsdaten noch in Ordnung gewesen wäre, hätten Sie die defekte Festplatte wieder dem RAID hinzufügen können. So bleibt Ihnen nur das Hinzufügen einer neuen Festplatte als Spare Disk:

opensuse:~ # mdadm --manage /dev/md0 --re-add /dev/sdb
mdadm: --re-add for /dev/sdb to /dev/md0 is not possible
opensuse:~ # mdadm --manage /dev/md0 --add /dev/sdb
mdadm: added /dev/sdb
opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdb[5](S) sdc[1] sdd[3] sde[4]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[…]

Listing 3.14    Hinzufügen einer neuen Festplatte

RAIDs können natürlich auch vergrößert werden. Sie müssen nur dafür sorgen, dass eine als Spare Disk hinzugefügte Festplatte vom RAID aktiv benutzt wird.

Dazu sind zwei Optionen notwendig: --grow sorgt für eine Vergrößerung des RAIDs, und zusammen mit --raid-devices bestimmen Sie, aus wie vielen Geräten das RAID zusammengesetzt werden soll:

opensuse:~ # mdadm --grow /dev/md0 --raid-devices=4
mdadm: Need to backup 3072K of critical section..

opensuse:~ # cat /proc/mdstat
Personalities : [linear] [raid6] [raid5] [raid4]
md0 : active raid5 sdb[5] sdc[1] sdd[3] sde[4]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 0.8% (9220/1047552) \
finish=4.4min speed=3842K/sec

unused devices: <none>

Listing 3.15    Vergrößern eines RAID-Verbunds

Sobald das Umarrangieren der Daten – in /proc/mdstat reshape genannt – abgeschlossen ist, sollten Sie noch das Dateisystem vergrößern:

opensuse:~ # df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/md0 2.0G 3.0M 1.9G 1% /mnt

opensuse:~ # resize2fs /dev/md0
resize2fs 1.42.8 (20-Jun-2013)
Filesystem at /dev/md0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/md0 is now 785664 blocks long.

opensuse:~ # df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/md0 3.0G 3.0M 2.8G 1% /mnt

Listing 3.16    Anpassen des Dateisystems

[+] Das Umarrangieren oder der Rebuild der Daten ist sehr zeitintensiv und darf nicht unterbrochen werden. In dieser Zeit ist die Performance sehr eingeschränkt.

Die in diesem Abschnitt gezeigten Beispiele wurden mit einer virtuellen Maschine unter KVM erstellt. Die RAID-Devices waren nur jeweils 1 GB groß und lagen auf einer SSD. Das Filesystem war bis auf einige Bytes komplett leer.

Die Erweiterung des RAIDs von drei auf vier aktive Festplatten hat dennoch etwa zehn Minuten gedauert. Dass die Laufzeiten bei »echten« und großen Festplatten im Bereich mehrerer Tage liegen, ist keine Seltenheit.

3.1.9    Abschlussbemerkung zu RAIDs

Die Verwendung von RAID-Systemen gehört zu einem verlässlichen Serverbetrieb dazu. Allerdings müssen diese RAIDs auch überwacht werden, um nicht eines Tages vor einem Datenverlust zu stehen. Idealerweise nehmen Sie den Status des RAIDs in Ihre Monitoring-Lösung mit auf.

Wie Sie Ihr eigenes Monitoring einrichten können, haben wir für Sie in Kapitel 28, »Monitoring – wissen, was läuft«, ausführlich beschrieben.