1875589

Raid-Verbund unter Linux reparieren

10.01.2014 | 12:31 Uhr |

Ein Software-Raid funktioniert nur unter dem Linux-System, für das es eingerichtet wurde. Lässt es sich nicht booten, kann man sich aber mit einem Live-System Abhilfe schaffen.

Ein Raid (Redundant Array Of Independent Disks) verbindet mehrere unabhängige Festplatten zu einem logischen Laufwerk. Die verschiedenen Raid-Levels bringen entweder Vorteile bei den Zugriffszeiten (Raid 0) oder bei der Datensicherheit (Raid 1) – oder bieten in einer sinnvollen Kombination auch beides (Raid 5, Raid 1+0, Raid 0+1). Wie auch immer Raid angelegt wird: Für das Betriebssystem erscheint der Verbund mehrerer Festplatten als einziger zusammenhängender Massenspeicher.

Eine verbreitete, weil einfache Methode, einen Raid-Verbund aufzubauen, ist das Software-Raid unter Linux. Dabei braucht das System keinen zusätzlichen speziellen Controller. Alle Aufgaben übernimmt der Device Mapper des Linux-Kernels, der auch mit virtuellen, blockorientierten Geräten umgehen kann. Zur Einrichtung bringt jede Linux-Distribution die mdadm-Tools mit. Mit wenig Aufwand können Sie so identische Festplatten zu einem flotten oder spiegelnden Raid kombinieren, was besonders in Zeiten niedriger Festplattenpreise eine verlockende Lösung ist, aus erschwinglichen Datenträgern mehr Leistung oder mehr Datensicherheit herauszukitzeln. Zudem ist bei vielen Miet-Servern von Hosting-Unternehmen ein Software-Raid vorkonfiguriert, meist in einem Raid-1-Verbund.

Ein gesundes Raid 1 im laufenden System: Ein Blick in die Status-Datei „/proc/mdstat“ verrät den Zustand des Raids und schlüsselt die beteiligten Geräte auf.
Vergrößern Ein gesundes Raid 1 im laufenden System: Ein Blick in die Status-Datei „/proc/mdstat“ verrät den Zustand des Raids und schlüsselt die beteiligten Geräte auf.

Raid und seine Tücken

So nützlich und reibungslos ein Software-Raid mit Linux im Normalbetrieb ist: Im Falle einer Havarie des Systems verhält sich der Festplattenverbund nicht so unproblematisch. Das Linux-System, unter dem das Raid eingerichtet ist, erkennt den Verbund der Festplatten anhand der hinterlegten Konfigurationsdatei „/etc/mdadm/mdadm.conf“. Startet Linux einmal nicht mehr, auch wenn der Fehler eine winzige Nichtigkeit ist und schnell behoben wäre, dann läuft auch das Raid nicht. Es gibt dann keinen Zugriff auf die Daten, da diese ja auf mehrere Festplatten verteilt sind, die einzeln nicht einfach als Datenträger angesprochen werden können.

Die Lösung, mal eben ein Live-System zu booten, um die Datenträger direkt einzuhängen und dann Dateien zu lesen oder zu schreiben, funktioniert hier nicht. Noch problematischer: Wenn das Linux-Betriebssystem selbst auf einem Raid-Verbund installiert ist, dann können Sie mit einem Live-System auch nicht mal eben die Konfiguration des havarierten Systems wieder flottmachen, da Sie die Systempartition nicht auf gewohnte Weise im Notfallsystem einhängen können. Einen noch höheren Schwierigkeitsgrad setzt eine Partitionierung, bei der mit dem Logical Volume Manager einzelne Volumes auf einem Raid-Verbund angelegt wurden. Denn auch die Volumes wollen aus einem Live-System erst mal erkannt und aktiviert werden, bevor der Inhalt zur Verfügung steht.

Raid richtig unter Linux nutzen

Raid-Superblock: Die Festplatten eines Raid erhalten die Infos zum Verbund in einem reservierten Speicherbereich auf der Partition. Dieser kann von mdadm gelesen werden.
Vergrößern Raid-Superblock: Die Festplatten eines Raid erhalten die Infos zum Verbund in einem reservierten Speicherbereich auf der Partition. Dieser kann von mdadm gelesen werden.

Im Notfall: Mit Live-Systemen ans Raid

Dennoch besteht kein Grund zur Panik: Mit ein paar Handgriffen bekommen Sie auch aus einem Live-System heraus wieder Zugriff auf den Raid-Verbund und die dort gespeicherten Daten. Dies ist nicht nur zur Datenrettung nützlich, um Dateien aus dem Raid auf USB-Medien oder über das Netzwerk zu kopieren. Es ist auch notwendig, um Reparaturen an einem Linux-System auszuführen, das selbst auf einem Raid liegt und wegen eines Konfigurationsfehlers nicht mehr starten will. Alle Werkzeuge, die Sie dazu brauchen, liefert jedes gut sortierte Live- und Notfallsystem: etwa das bewährte Knoppix oder das kommandozeilenorientierte GRML . Bei Miet-Servern bietet der Hoster über die Management-Konsole meist eine Möglichkeit, ein vorbereitetes Live-System zu starten, das dann über SSH erreichbar ist.

Weniger geeignet sind Installations-Medien aller Art, wie die DVDs von Ubuntu, Mint, Debian oder Fedora. Denn hier sind die benötigen Programmpakete „mdadm“ und „lvm2“ für Raid-Notfälle nicht immer vorhanden. Zur Not tun diese es zwar auch, aber Sie müssen dann die Pakete erst noch über eine stehende Internetverbindung im Live-System über die Paketverwaltung nachinstallieren.

Festplatten untersuchen: Das Tool mdadm sucht in den Metadaten im Raid-Superblock auf den physikalischen Datenträgern nach der ursprünglichen Raid-Konfiguration.
Vergrößern Festplatten untersuchen: Das Tool mdadm sucht in den Metadaten im Raid-Superblock auf den physikalischen Datenträgern nach der ursprünglichen Raid-Konfiguration.

Grundlagen zum Software-Raid

Linux behandelt einen Raid-Verbund als „Multiple Device“ (MD), der aus mehreren physikalischen Datenträgern besteht. Diese Fähigkeiten bringt der Kernel selbst mit, wobei zum Aufbau und zur Verwaltung eines Raid nur die mdadm-Tools nötig sind, die als Universalwerkzeug auch das Kommandozeilenprogramm mdadm mitbringen.

Bei der ersten Einrichtung erstellt mdadm auf den einzelnen Festplatten im geplanten Raid-Verbund jeweils einen Raid-Superblock. Dieser ist nicht zu verwechseln mit den Superblöcken von Dateisystemen wie EXT2/3/4, die unabhängig von der Raid-Konfiguration Informationen zur Dateisystemstruktur enthalten. Der Raid-Superblock enthält dagegen die Angaben zur Identität, Aufgabe, Position eines Datenträgers in einem Raid sowie den Raid-Level. Bei der Inbetriebnahme des Raids untersucht mdadm anhand der Angaben im Superblock die Partitionen der physikalischen Festplatten und fügt diese Partitionen gemäß den dort abgelegten Informationen zu einem Verbund zusammen, der dann als lesbares und beschreibbares Blockgerät im Linux-System auftaucht – typischer Weise mit einer Kennung wie „/dev/md0“. In der Datei „/etc/mdadm/mdadm.conf“ werden ergänzende Informationen wie Name und Geräte-ID untergebracht, um die Raid-Konfiguration beim Systemstart automatisch ins System einzubinden. Die grundlegenden Informationen zu einem Software-Raid sind aber direkt auf den physikalischen Datenträgern untergebracht. Dieser Umstand erlaubt es, einen Raid-Verbund auch von einem Live-System aus in Betrieb zu nehmen.

Gestartetes Raid als Blockgerät einhängen: Ein Software-Raid wird von den mdadm-Tools als „/dev/md[n]“ bereitgestellt. Das virtuelle Gerät können Sie wie gewohnt mounten.
Vergrößern Gestartetes Raid als Blockgerät einhängen: Ein Software-Raid wird von den mdadm-Tools als „/dev/md[n]“ bereitgestellt. Das virtuelle Gerät können Sie wie gewohnt mounten.

Raid 0: Zugriff mit Live-System

Wenn ein Linux-System einmal nicht bootet, ist der Inhalt auf dem Raid nicht verfügbar. Die einzelnen Festplatten geben dann die Daten nicht so ohne weiteres preis, wenn ein anderes System darauf zugreifen will. Sie müssen daher zunächst die teilnehmenden Datenträger ermitteln und zusammenfügen, bevor Sie das Raid als Blockgerät einhängen können.

Starten Sie dazu ein geeignetes Live-System wie etwa Knoppix, und öffnen Sie ein Terminal-Fenster. Starten Sie dort eine root-Shell, was unter Knoppix mit dem Kommando su gelingt. Sie können die Kommandos aber auch allesamt mit vorangestellten sudo ausführen. Der erste Schritt ist, das Tool mdadm einen Blick auf die vorhandenen Festplatten werfen zu lassen, wobei es die Informationen im Raid-Superblock zusammensucht, falls dieser vorhanden ist. Dies erledigt das Kommando

mdadm --examine --scan

und zeigt den erkannten Verbund (Array) an. Die Ausgabe enthält in einer Zeile den Gerätenamen, die interne Version des Superblocks, die Kennung der teilnehmenden Festplatten als UUID und den Hostnamen des ursprünglichen Linux-Systems. Um das Raid anhand dieser Infos zusammen zu bauen, geben Sie den Befehl

mdadm --assemble --scan

ein. Ist dies gelungen, gibt mdadm als Statusmeldung die Bezeichnung des Raid-Blockgeräts aus und einen Starthinweis mit der Anzahl der teilnehmenden Festplatten, beispielsweise „/dev/md0 has been started with 2 drives“. Die genauen Daten zum Raid können Sie jetzt auch jederzeit mit dem Kommando

cat /proc/mdstat

abrufen. Fertig ist die Rekonfiguration des Raid und Sie können jetzt im Live-System mit

mkdir /mnt/md0

einen Mount-Punkt anlegen und dort mit

mount -v /dev/md0 /mnt/md0

das Raid anhand der Gerätekennung einhängen, die in diesem Fall beispielsweise „/dev/md0“ lautet. Das Blockgerät ist jetzt wie eine Festplatte lesbar und beschreibbar.

Ein halbes Raid 1: Knoppix hat hier zwar das Raid 1 zusammenbauen können, der Blick auf den Raid-Status zeigt aber mit der Zeichenkette „[U_]“, dass ein Teilnehmer fehlt.
Vergrößern Ein halbes Raid 1: Knoppix hat hier zwar das Raid 1 zusammenbauen können, der Blick auf den Raid-Status zeigt aber mit der Zeichenkette „[U_]“, dass ein Teilnehmer fehlt.

Raid 1: Verbund rekonstruieren

Wenn das Raid und die beteiligten Festplatten gesund und munter sind, zeigen diese Befehle im Live-System schon einen funktionierenden Verbund. Anders sieht es aus, wenn in einem Raid 1 eine der Festplatten schlapp gemacht hat oder noch nicht gefunden wurde.

Raid 1 ist ein spiegelnder, redundanter Verbund und läuft notfalls auch mit einer Festplatte weiter – dies ist schließlich genau Sinn und Aufgabe dieses Raid-Levels. In Knoppix kann mdadm den erkannten, unvollständigen Verbund mit dem Befehl mdadm --assemble --scan automatisch zusammenfügen.

Sollte dies bei einem anderen System nicht klappen, dann müssen Sie noch manuell nachhelfen: Zuerst finden Sie heraus, welche Festplatte im Raid-1-Verbund nicht vorhanden ist. Sollte in einem Verbund von „/dev/sdb1“ und „/dev/sdc1“ die Platte „/dev/sdc“ nicht verfügbar sein, bauen Sie das Raid 1 manuell mit dem verbliebenen Teilnehmer „/dev/sdb1“:

mdadm --assemble --run /dev/md0 /dev/sdb1
Nur Geduld: Die Festplatte wurde ausgewechselt, die Partitionstabelle kopiert und die neue Partition zum Raid 1 hinzugefügt. Nun erfolgt im Hintergrund die Resynchronisierung.
Vergrößern Nur Geduld: Die Festplatte wurde ausgewechselt, die Partitionstabelle kopiert und die neue Partition zum Raid 1 hinzugefügt. Nun erfolgt im Hintergrund die Resynchronisierung.

Dieser Befehl erzwingt den Start eines Raid 1 als „/dev/md0“ mit nur einer Festplatte. Den Daten macht das nicht aus, da sich diese gespiegelt auf beiden Datenträgern befinden. Das erzeugte Blockgerät „/dev/md0“ können Sie dann wie gewohnt mit mount in ein Verzeichnis einhängen, um Daten vom beschädigten Raid 1 zu retten.

Raid 1: Eine Festplatte wechseln

Ein halbes Raid 1 reicht für Notfälle, allerdings läuft es im Modus „Degraded“, bis die fehlende oder defekte Festplatte ausgetauscht und der Spiegelsatz wieder synchronisiert ist. Als Ersatzfestplatte kommt idealerweise ein identischer Datenträger in Frage oder ein Modell, das mindestens über die gleiche Kapazität verfügt.

Um die fehlende Festplatte zu identifizieren, zeigen Sie im Live-System mit dem Befehl

cat /proc/mdstat

den Status des Raid 1 an, das jetzt mit der Zeichenkette „[U_]“ gekennzeichnet ist. Die Ausgabe liefert nur noch die Gerätekennung der aktiven Partitionen, in unserem Beispiel „/dev/sdb1“, während „/dev/sdc1“ fehlt. Vor dem Austausch der Platte „/dev/sdc“ lassen Sie sich mit dem Befehl

hdparm -i /dev/sdb1

die Typenbezeichung des fehlerfreien Datenträgers anzeigen, damit Sie nicht versehentlich die falsche Festplatte ausbauen. Nach dem Abschalten des Rechners und dem Einbau der frischen Ersatzfestplatte starten Sie wieder das Live-System. Damit die frische, noch leere Platte „/dev/sdc“ fit für das Raid wird, kopieren Sie darauf kurzerhand die Partitionstabelle des intakten Raid-1-Teilnehmers /dev/sdb:

sfdisk -d /dev/sdb | sfdisk /dev/sdc

Beachten Sie, dass hier keine Partitionen mit der angehängten Nummer angegeben werden.

Mit dem Kommando

mdadm --assemble --run /dev/md0 /dev/sdb1

starten Sie zuerst manuell das halbe Raid 1 mit der intakten Partitionen und fügen anschließend mit

mdadm /dev/md0 --manage --add /dev/sdb1

die neue Partition „/dev/sdb1“ auf der gerade ausgetauschten Platte hinzu. Jetzt beginnt mdadm automatisch im Hintergrund mit der Neusynchronisation des Raid. Der Vorgang kann je nach Plattengrößen mehrere Stunden dauern. Den Fortschritt sehen Sie in der Ausgabe von cat /proc/mdstat . Ist die Synchronisation abgeschlossen, brauchen Sie das Live-System nicht mehr, und Sie können wieder das installierte Linux-System starten. Das Raid 1 wird dabei wieder automatisch zusammengebaut.

Tipp: Die richtige Backup-Strategie für Linux

Erfolgreiche Notfalloperation: Nach dem Austausch eines ausgefallenen Datenträgers im Raid-1-Verbund und der Resynchronisierung in einem Live-System startet das installierte Hauptsystem (hier Debian 7) wieder ohne zu meckern.
Vergrößern Erfolgreiche Notfalloperation: Nach dem Austausch eines ausgefallenen Datenträgers im Raid-1-Verbund und der Resynchronisierung in einem Live-System startet das installierte Hauptsystem (hier Debian 7) wieder ohne zu meckern.

Sonderfall: LVM2 und Raid

Der Logical Volume Manager (LVM2) von Linux erlaubt einige fortgeschrittene Partitionsschemata, wie die Verteilung einer einzigen Partition auf mehrere Blockgeräte. Weitere Vorteile des Logical Volume Managers sind die Möglichkeiten des Austauschs eines Datenträgers während des Betriebs und die nachträgliche Größenänderung einer Partition.

Der Installer von Fedora bietet standardmäßig an, Volumes auf den Datenträgern einzurichten. Die Administration wird damit aber auch wieder ein Stück anspruchsvoller, denn Partitionen mit Volumes können Sie nicht wie gewohnt mit dem Mount-Befehl einhängen. Der Befehl gibt bei einem Versuch die Meldung „unknown filesystem type LVM2_member“ aus. Wenn ein Raid als Volume dient, müssen Sie erst noch einen weiteren Zwischenschritt einlegen:

Wenn Sie anhand der vorangehenden Anleitung ein Raid zu „/dev/md0“ zusammengebaut haben, weisen Sie den logischen Gerätemanager an, nach Volumes zu suchen:

vgscan --mknodes

Der Befehl gibt den Namen der Volume-Gruppe aus, den Sie im nächsten Befehl brauchen. Angenommen, die Volume-Gruppe heißt „ubuntu-desktop“ und enthält eine Wurzelpartition, so können Sie jetzt die erkannte Partition „root“ mit diesen drei Befehlen mounten:

sudo vgchange -ay sudo mkdir /mnt/ubuntu-desktop sudo mount /dev/ubuntu-desktop/root /mnt/ubuntu-desktop

Die so unter „/mnt/ubuntu-desktop„ eingehängte Partition dürfen Sie dann wieder wie eine gewöhnliche Festplatte lesen und beschreiben.

0 Kommentare zu diesem Artikel
1875589