ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Software-RAID

Artikel wird überarbeitet

Dieser Artikel wird momentan überarbeitet.

Solltest du dir nicht sicher sein, ob an dieser Anleitung noch gearbeitet wird, kontrolliere das Datum der letzten Änderung und entscheide, wie du weiter vorgehst.


Achtung: Insbesondere heißt das, dass dieser Artikel noch nicht fertig ist und dass wichtige Teile fehlen oder sogar falsch sein können. Bitte diesen Artikel nicht als Anleitung für Problemlösungen benutzen!

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Ausbaufähige Anleitung

Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.


Anmerkung: Die Konfiguration der /etc/mdadm/mdadm.conf für neue RAID-Arrays kann noch erklärt werden.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Ein RAID (Redundant Array of Independent Disks) dient dazu, ein logisches Laufwerk redundant auf mehrere physikalische Festplatten zu verteilen und dadurch einen schnelleren Datenzugriff und/oder eine erhöhte Sicherheit vor Datenverlust durch den Ausfall einer oder mehrerer Festplatten zu erreichen. Native Hardware-RAID-Controller, die unter Linux unterstützt werden (z.B. 3Ware), sind aber für den Heimgebrauch teuer. Diesen braucht man aber nicht zwingend, wenn man unter Linux ein Software-RAID verwendet. Die Festplatten dafür können auch an sog. FakeRAID-Controllern verwendet werden, die oftmals unter Windows als RAID-Controller eingesetzt werden, bzw. an Onboard-RAID-Controllern (auf neueren Hauptplatinen).

Voraussetzungen

Für ein RAID werden mehrere Partitionen benötigt. Es ist dringend angeraten, diese auf verschiedenen Festplatten anzulegen. Zudem sollten die Partitionen alle die gleiche Größe haben. Angabe des Speicherplatzes im RAID in Kapazität je Partition (k); "n" ist die Anzahl der verwendeten Partitionen.

RAID-Typen im Überblick
Typ min. Anzahl an Partitionen Vorteil Speicherplatz Bemerkung
RAID 0 2 Geschwindigkeit (Lesen & Schreiben), Plattenplatz k*n Keine Partition darf ausfallen
RAID 1 2 Ausfallsicherheit, Geschwindigkeit (Lesen) k Alle bis auf eine Partition dürfen ausfallen
RAID 5 3 Plattenplatz, Ausfallsicherheit, Geschwindigkeit (Lesen) k*(n-1) Eine Partition darf ausfallen
RAID 6 4 Plattenplatz, bessere Ausfallsicherheit als RAID 5, Geschwindigkeit (Lesen) k*(n-2) Zwei Partitionen dürfen ausfallen

Zusätzlich werden sog. "Spare"-Laufwerke unterstützt, d.h. Festplatten, die aktiv nicht am RAID teilnehmen, aber im Fehlerfall sofort mit ins RAID aufgenommen werden.

Zwar ist es möglich, für ein RAID mehrere Partitionen auf einer Festplatte zu verwenden, jedoch ist dies unsinnig, da beim Ausfall der Festplatte das RAID nicht mehr lesbar ist.

Bei IDE-ATA-Festplatten gilt: die verwendeten Festplatten sollten nicht an einem IDE-Kanal hängen, da im Fehlerfall einer Festplatte unter Umständen der komplette IDE-Kanal gestört wird und dadurch u.U. das RAID nicht mehr nutzbar ist. Bei einem RAID 0 erhöht sich die Gesamtleistung, da paralleles Lesen/Schreiben auf verschiedenen IDE-Kanälen schneller geht als auf nur einem.

Generell sollte man bei RAIDs moderne SATA-Festplatten verwenden, da der Datendurchsatz bei diesen zum Teil erheblich höher ist als bei älteren IDE-Platten. Zudem sind SATA-Platten "hotplugable"; das heißt, sie sind im laufenden Betrieb eines RAIDs an- und abschaltbar und damit auch austauschbar. Allerdings sollte man genau wissen, was man tut, bevor man sich an solcherlei Aktionen heranwagt.

Achtung!

Nicht jeder SATA-Controller ist in der Lage, mit Hotplug auch richtig umzugehen. Auch sollte man darauf achten, dass man die richtige Festplatte zieht, um Datenverlust zu vermeiden.

Die folgende Anleitung beschreibt die Konfiguration eines Software-RAID als Datenfestplatte, nicht als Bootfestplatte (dafür sind noch andere Schritte nötig).

Vorbereitung

Folgendes Paket muss installiert [2] werden, um ein Software-RAID erstellen zu können:

  • mdadm

Befehl zum Installieren der Pakete:

sudo apt-get install mdadm 

Oder mit apturl installieren, Link: apt://mdadm

Bis einschließlich Ubuntu 8.10 sollte sichergestellt sein, dass das Kernelmodul "md" geladen ist. Ab Ubuntu 9.04 ist die RAID-Funktionalität fest im Kernel integriert und das Modul wird nicht benötigt.

Dazu folgendes in einer Konsole eingeben:

sudo lsmod | grep md_mod 

Das Ergebniss sollte in etwa so aussehen:

md_mod                 79508  2 raid1

Gibt der Befehl keine Rückgabe, so muss das Modul zunächst manuell geladen werden, sofern die Ubuntu Version nicht jünger ist als Ubuntu 9.04:

sudo modprobe md_mod 

Anschließend sollte noch wie unter Kernelmodule (Abschnitt „Module-automatisch-laden“) beschrieben ein Eintrag in /etc/modules vorgenommen werden um das Modul beim Systemstart automatisch zu laden[3].

Anlegen eines RAID

Alternate Installation

Benutzt man bei der Installation die Alternate-CD, so bietet Ubuntu an, bereits bei der Installation ein RAID einzurichten. Dies findet man unter dem Punkt "Partitionieren". Trotzdem ist es sinnvoll, wenn man diese Seite hier gelesen hat, um beim Einrichten des RAIDs zu wissen, was man tut. Nach aktuellem Stand (Ubuntu 10.04 Lucid Lynx) unterstützt die Alternate-CD die RAID-Level 0, 1, 5, 6 und 10. Es gibt diverse HowTos im Web zu Konfigurationen, die mit der textbasierten Installation angeblich nicht automatisch erstellt werden können, z.B. RAID 10. Es lohnt sich auf jeden Fall, es zuerst mit der Alternate-CD zu versuchen, bevor man mit manuellen Setups experimentiert.

Manuell

Die beiden für RAID 0 oder RAID 1 vorgesehenen Platten werden in diesem Beispiel als /dev/hde und /dev/hdg erkannt. Die dritte Festplatte für das RAID 5-Beispiel wird als /dev/hdf erkannt.

Achtung!

Das Partitionieren der Festplatten löscht alle vorherigen Inhalte.

Zuerst sollte man sicher gehen, dass die neuen Festplatten korrekt vom System erkannt werden. Ist dies der Fall, so können beide Platten mit "fdisk" partitioniert werden. Dazu öffnet man ein Terminal[1] und gibt folgenden Befehl ein:

fdisk /dev/hde 

Falls man anstatt eines MBR ein GPT auf der Festplatte benutzt, kann man anstatt "fdisk" problemlos "gdisk" benutzen. Alle Befehle sind analog zu handhaben.

Im Fdisk-Menü wählt man "n" für neue Partition, dann legt man die Partition über das komplette Laufwerk an. Sind die Festplatten unterschiedlich groß, so muss man für beide neuen Partitionen die gleiche Größe (gleiche Anzahl der Zylinder) auswählen. Nun wählt man "t" um den Typ der Partition als "fd" (Linux RAID) festzulegen (beziehungsweise "fd00" bei GUID-Partitionierung). Diese Änderungen lässt man von Fdisk mit dem Befehl "w" ausführen. Diese Prozedur führt man für jede am RAID-Verbund beteiligte Festplatte aus.

Hinweis:

Um potentiellen Problemen beim automatischen Zusammenbau des RAID (z.B. beim Booten) zu entgehen, sollte die letzte Partition auf der Festplatte nicht bis zu deren Ende reichen, sondern mindestens 128 KByte vorher enden (sonst kann der Superblock, welcher später die Zugehörigkeit der Partition zum RAID beschreibt, auch als gültiger Superblock der gesamten Platte interpretiert werden und dann wird ggf. das falsche Block-Device zum RAID gefügt).

Nun muss das "virtuelle" Laufwerk erzeugt werden, das dann das eigentliche Dateisystem enthält. Dazu führt man abermals am Terminal [1] einen der folgende Befehle aus. Wie man sieht, bestimmt die Option "level" den Typ des zu erzeugenden RAID.

Hinweis:

Hier darauf achten, dass die Partition und nicht die Festplatte selbst gewählt wird, also /dev/hde1 und nicht /dev/hde! Mit dem Befehl "cat /proc/partitions" kann man sich die Festplatten und Partitionen anzeigen lassen.

Falls die Partitionen zuvor schon mal als RAID verwendet wurden, muss man die Metadaten zunächst wie folgt löschen.

sudo mdadm --zero-superblock /dev/hde1
sudo mdadm --zero-superblock /dev/hdg1 

Folgender Befehl erstellt ein Software-RAID 0:

sudo mdadm --create --verbose /dev/md0 --auto=yes --level=0 --raid-devices=2 /dev/hde1 /dev/hdg1 

Folgender Befehl erstellt ein Software-RAID 1:

sudo mdadm --create --verbose /dev/md0 --auto=yes --level=1 --raid-devices=2 /dev/hde1 /dev/hdg1 

Folgender Befehl erstellt ein Software-RAID 5 mit drei Festplatten:

sudo mdadm --create --verbose /dev/md0 --auto=yes --level=5 --raid-devices=3 /dev/hde1 /dev/hdf1 /dev/hdg1 

Folgender Befehl erstellt ein Software-RAID 6 mit vier Festplatten:

sudo mdadm --create --verbose /dev/md0 --auto=yes --level=6 --raid-devices=4 /dev/hde1 /dev/hdf1 /dev/hdg1 /dev/hdh1 

Um das komplette System zu einem RAID zusammenzufassen, muss es mit der Alternate-Disk aufgesetzt werden.

Achtung!

Grub-Legacy :

  • GRUB (bis Ubuntu 9.04) kann nur von RAID 1 booten. Wer also das System mit einem anderen RAID versehen will, muss eine getrennte (Nicht-RAID) /boot-Partition anlegen.

  • GRUB 2 (ab Ubuntu 9.10) erlaubt das direkte Booten auch von anderen RAID-Konstellationen. Die Installation des MBR ist unter GRUB 2 sehr variabel - siehe auch GRUB 2/Terminal-Befehle (Abschnitt „grub-install“).

Damit ist das virtuelle Laufwerk angelegt. Nun formatiert man /dev/md0 mit dem gewünschten Dateisystem und hängt dieses an der gewünschten Stelle im Dateisystem ein. Formatiert wird /dev/md0 durch folgenden Befehl:

sudo mkfs.ext4 /dev/md0 

Weitere Informationen zu diesem Vorgehen unter Datenträger. Im Hintergrund werden zwischenzeitlich die im RAID vorhandenen Partitionen synchronisiert. Die Synchronisation kann eine erhöhte Systemauslastung ("load average") verursachen und je nach Größe der Partitionen eine Weile dauern.

Benutzung/Konfiguration

Um HotSpares hinzufügen, wird der Befehl

sudo mdadm --add /dev/mdxx /dev/sdaxx 

ausgeführt.

Für E-Mail-Benachrichtigung muss die Datei /etc/mdadm/mdadm.conf mit Root-Rechten editiert und folgende Zeile eingefügt werden:

MAILADDR example@example.com

Optional kann hier auch die Absenderadresse konfiguriert werden:

MAILFROM mdadm@example.com

Zusätzlich zu einer E-Mail-Benachrichtigung kann ein Programm ausgeführt werden. Hierzu fügt man folgende Zeile ein:

PROGRAM /usr/bin/raid-problem.sh

Um die E-Mail-Benachrichtigung und die Ausführung des Programms zu testen, führt man folgenden Befehl aus:

sudo mdadm --monitor --test /dev/md0 

Wichtig ist, dass in der Datei /etc/default/mdadm die Optionen "AUTOCHECK" und "START_DAEMON" auf "true" eingestellt sind.

Das RAID muss nun natürlich in den Dateibaum eingebunden werden. Der korrelierende Eintrag dazu in der /etc/fstab folgt der selben Syntax wie der einer normalen Partition und könnte beispielsweise so aussehen:

/dev/md0     /media/daten      ext4      defaults 0 0

Ausführliche Informationen zu einem RAID-Device erhält man mittels folgendem Befehl:

sudo mdadm --detail /dev/Raiddevice 

Ebenso lässt sich mit diesem Befehl eine kurze Übersicht des RAIDs ausgeben:

cat /proc/mdstat 

Solange das RAID Hotplugging in Ubuntu noch fehlerhaft ist, müssen die RAID-ARRAYS noch in der mdadm.conf eintragen werden. Dazu werden zunächst im Terminal die Metadaten und UUID des RAIDs abgefragt:

mdadm --detail --scan 

Dann werden die ARRAY Daten in einem Editor mit Root-Rechten in die Datei /etc/mdadm/mdadm.conf eingetragen:

DEVICE partitions

ARRAY /dev/md0 level=raid0 num-devices=2 UUID=c4677279:2d8a904a:01f9e43d:ac30fbff

Nach Abspeichern wird das ganze Array nun bei jedem Systemstart automatisch erkannt werden.

Wer das erstellen der mdadm.conf einfacher haben will, kann mit folgendem Befehl die Definitionen aller laufenden Arrays an eine bestehende mdadm.conf anhängen:

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf  

Oder man lässt von mdadm's mkconf eine aktuelle mdadm.conf generieren, passt diese anschließend an, und benennt sie um:

sudo /usr/share/mdadm/mkconf >> /etc/mdadm/mdadm.conf.neu 

Soll von dem neuen Raid-Verbund gebootet werden (Root-Dateisystem), muss die mdadm.conf auch noch das initramfs übernommen werden:

sudo update-initramfs -u -k all 

Ausfall einer Festplatte

Wenn eine der Festplatten im Verbund ausfällt, wird dies vom mdadm-Dämon entsprechend geloggt. Auf Wunsch kann man sich auch per E-Mail informieren lassen (siehe manpages). Bei einem RAID 0 äußert sich der Ausfall einer Platte im Ausfall des gesamten RAID-Verbunds.

Die ausgefallene Platte lässt sich mit den oben unter Benutzung/Konfiguration genannten Befehlen erkennen. Um die Festplatte zu ersetzen, muss diese zunächst aus dem RAID-Verbund entfernt werden:

sudo mdadm /dev/md0 --remove /dev/hde1 

Anschließend kann sie durch eine neue Ersatzplatte ersetzt werden.

Die neue Platte muss zunächst genauso wie die anderen mit "fdisk" partitioniert werden. Alternativ kann die Partitionstabelle einer anderen Platte im Verbund 1:1 kopiert werden (hier von hdf nach hde; nicht bei RAID 0!):

sudo sfdisk -d /dev/hdf | sfdisk /dev/hde 

Anschließend kann die Platte mit folgendem Befehl zum Verbund hinzugefügt werden:

sudo mdadm /dev/md0 --add /dev/hde1 

Allerdings ist die Bezeichnung der neuen Platte meist anders als die der defekten alten Platte (also z.B. hdi statt hde), das muss man dann entsprechend anpassen.

Soll die neue Festplatte startfähig sein, muss noch der Bootloader in den MBR der neuen Festplatte geschrieben werden. Es ist empfehlenswert, wenn man sich Sicherungskopien des MBR und der Partitionstabelle anlegt (extern z.B. auf einem USB-Stick oder einem anderen Sicherungsmedium).

  • MBR:

    sudo dd if=/dev/sdX of=/root/sdX.mbr bs=512 count=1  
  • Partitionstabelle:

    sudo sfdisk /dev/sdX > /root/sdX.pt 

Das Zurückspielen erfolgt dann mit:

  • MBR:

    sudo dd if=/root/sdX.mbr of=/dev/sdX bs=512 count=1  
  • Partitionstabelle:

    sudo sfdisk /dev/sdX < /root/sdX.pt 

Defektes RAID

In Einzelfällen kann es vorkommen, dass aufgrund eines defekten Controllers oder Netzteils ein RAID nicht mehr funktionsfähig ist. In so einem Fall liegt kein Schaden an den Festplatten vor - das RAID ist also wiederherstellbar. Hier hilft die folgende Vorgehensweise.

Zuerst muss das RAID gestoppt werden:

sudo mdadm --stop /dev/mdX 

Danach wird das RAID manuell wieder zusammengefügt. Dabei ist es wichtig, die letzte funktionierende Konfiguration zu verwenden.

Beispiel

Bei einem RAID 5 mit 3 Platten, bei dem zwei Platten wegen Controller-Defekt ausgestiegen sind, müssen diese zwei Platten verwendet werden, da sie bis zum Ausfall des Controllers noch zusammen aktiv waren. Diese werden dann wie folgt reaktiviert:

sudo mdadm --assemble /dev/mdX /dev/sdaX /dev/sdbX --force 

Nun sollte das RAID wieder funktionieren. Die dritte Platte (aus o.g. Beispiel) kann mit dem Parameter "--add" wieder in den Verbund aufgenommen werden.

Wechsel des Betriebssystems

Für den Fall, dass man das Betriebssystem neu aufsetzen muss oder ein zweites Betriebssystem auf dem Rechner installieren will, kann man das Software-RAID weiter verwenden (sofern das Betriebssystem nicht direkt auf dem Software-RAID angelegt ist). Danach muss man auf dem neuen System das Paket

  • mdadm

Befehl zum Installieren der Pakete:

sudo apt-get install mdadm 

Oder mit apturl installieren, Link: apt://mdadm

installieren[2], danach kann man dann das Software-RAID wieder benutzen:

sudo mdadm --assemble --scan 

Hat man mehrere Software-RAIDs und möchte ein bestimmtes RAID zusammenführen, kann man dies durch die Angabe der UUID des entsprechenden RAIDs tun:

sudo mdadm --assemble --scan --uuid=6c926c35:380d7ab2:3603cf0e:ecfa67b9 

oder durch die Angabe der RAID-Partitionen:

sudo mdadm --assemble /dev/mdX /dev/sdaX /dev/sdbX /dev/sdcX 

Hinweis:

Auf keinen Fall darf man hierbei die Optionen --create verwenden, damit wird die Lesbarkeit auf den beteiligten Partitionen zerstört.

RAID erweitern

Falls zum Beispiel der Speicherplatz eines RAIDs nicht mehr ausreicht, kann man es durch weitere Festplatten bzw. Partitionen erweitern. Dies gilt allerdings nur für ein RAID 1, 4, 5 oder 6. Die Partition, die hinzugefügt werden soll, muss genauso formatiert sein, wie die Partitionen, die bereits im RAID vorhanden sind. Zunächst fügt man die Partition mit

sudo mdadm --add /dev/mdX /dev/sddX 

zum vorhandenen Array hinzu. Die Partition wird zunächst nur als Spare-Laufwerk zum RAID hinzugefügt. Der Befehl kann auch öfter ausgeführt werden, wenn man gleich mehrere Geräte hinzufügen will.

Um das RAID neu aufzubauen und somit den neuen Speicherplatz nutzen zu können, muss man wie folgt vorgehen.

Achtung!

Das Vergrößern ("reshaping") eines RAID-Systems kann, je nach Größe, einige Stunden oder sogar Tage dauern. Die Aktion wird im Hintergrund ausgeführt. Es sollte also sichergestellt sein, dass das "reshaping" beendet ist, bevor man den Computer ausschaltet oder neu startet. Es können sonst alle Daten des RAID verlorengehen.

Der Vorgang wird mit dem Befehl

sudo mdadm --grow --raid-devices=X /dev/mdX 

gestartet. Die Option "raid-devices" gibt die Anzahl der Geräte an, aus denen das RAID nach der Erweiterung bestehen soll. Falls man den Platz hat, um ein Backup zu erstellen, kann man mit dem Zusatz "--backup-file=" den Ort einer entsprechenden Backup-Datei angeben. Den Status des Vorgangs kann man mit

cat /proc/mdstat 

auslesen oder eleganter mit

watch cat /proc/mdstat 

beobachten (beenden mit Strg + C ).

Hinweis:

Um die Auswirkungen auf das System zu minimieren, wird die Geschwindigkeit beim Vergrößern des RAID auf das Minimum gedrosselt. Es ist also sinnvoll, den Wert in /proc/sys/dev/raid/speed_limit_min temporär zu erhöhen, falls die Geschwindigkeit zu gering und das System nicht ausgelastet ist.

Hierzu muss man sich erst als root am System anmelden. Dies macht man mit dem Befehl

sudo -i 

Als root angemeldet kann man nun mit dem Befehl

echo 100000 >/proc/sys/dev/raid/speed_limit_min 

die minimale Geschwindigkeit auf rund 100 MB/s setzen. Selbst wenn diese Geschwindigkeit nicht erreicht wird, ist es kein Schaden, sie auf diesen Wert zu setzen. Danach kann man sich wieder als normaler Benutzer anmelden, indem man den Befehl

exit 

eingibt und mit bestätigt.

Hinweis:

Das RAID (/dev/mdX) darf während des Vorgangs eingebunden sein. Dies verlangsamt den Vorgang allerdings wesentlich. Im ungemounteten Zustand kann das "reshaping" über 50% schneller sein als im gemounteten Zustand.

Nun muss noch das Dateisystem erweitert werden, damit der neu entstandene Speicherplatz auch genutzt werden kann.

Für ext2-, ext3 oder ext4-Dateisystem kann hierfür

sudo resize2fs /dev/mdX 

verwendet werden.

Für ein Reiser-Dateisystem sollte der folgende Befehl verwendet werden:

sudo resize_reiserfs /dev/mdX 

Dem Wunsch, das Dateisystem zunächst zu überprüfen, sollte man in jedem Fall folgen, auch wenn es ein wenig Zeit in Anspruch nimmt.

Hinweis:

Grundsätzlich sollte die Datei mdadm.conf noch auf den aktuellen Stand gebracht werden! Dies geht z.B. mit "mdadm --detail --scan > /etc/mdadm/mdadm.conf". Und damit die Boot-Partitionen durch die initrd auch einwandfrei gemountet werden, sollte nach Änderung der Datei mdadm.conf noch die initrd neu angelegt werden, z.B. durch Ausführen von " dpkg-reconfigure mdadm".

Systemstart nach Ausfall eines Laufwerks

Betreibt man einen RAID-Verbund als Systemlaufwerk, ist es praktisch, wenn das System auch noch nach Ausfall einer Festplatte hochfahren kann. Das wird z.B. bei ferngewarteten Rechnern benötigt, auf die man keinen direkten Zugriff hat. Da sich der Bootloader GRUB bzw. GRUB 2 (ab Ubuntu 9.10) in der Standardkonfiguration nur auf einem der Laufwerke installiert, muss man etwas nachhelfen. Dazu installiert man den Bootloader auf allen dem RAID-Verbund angehörenden Laufwerken in den MBR.

GRUB 2

Die Kernkomponenten von GRUB 2 - boot.img und core.img - in den MBR schreiben (mehr zu grub-setup):

sudo grub-setup /dev/sdX 

sdX ist dabei an das eigene System anzupassen. Dieser Befehl muss für alle Platten durchgeführt werden, die am RAID teilnehmen, sonst kann von ihnen im Fehlerfall nicht gebootet werden.

Die Datei /etc/default/grub muss noch geändert werden: am Beginn der Zeile #GRUB_TERMINAL=console muss das Zeichen # entfernt werden (594202). Danach muss mit

sudo update-grub 

GRUB 2 neu initialisiert werden.

GRUB

Mit

sudo grub 

landet man in der GRUB-Konsole. Die sieht dann wie folgt aus:

Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub>

Jetzt muss man GRUB von Hand auf die entsprechenden Festplatten installieren:

grub>device (hd0) /dev/sdb 
grub>root (hd0,0)
grub>setup (hd0)
grub>device (hd0) /dev/sdc
grub>root (hd0,0)
grub>setup (hd0)
... 

Hat man das gemacht, beendet man die Grub-Konsole mit "quit".

Jetzt ist in jedem Fall schonmal ein Bootloader vorhanden. Nun muss man die /boot/grub/menu.lst noch anpassen:

...
title           Ubuntu 9.04, kernel 2.6.28-11-server
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.28-11-server root=/dev/md0 ro quiet splash
initrd          /boot/initrd.img-2.6.28-11-server
...

Es muss darauf geachtet werden, dass die richtige Gerätedatei angegeben ist (hier /dev/md0).

GRUB und GRUB 2

Da das Tool "mdadm" bei einem fehlerhaften RAID-Verbund (eine Platte defekt) standardmäßig nicht automatisch hochfährt und stattdessen in eine Shell wechselt, muss man dies noch ausschalten. In der Datei /etc/initramfs-tools/conf.d/mdadm muss der Wert "BOOT_DEGRADED" auf "true" gesetzt werden, oder man benutzt

sudo dpkg-reconfigure mdadm 

Jetzt fährt das System bei Ausfall eines Laufwerks in jedem Fall hoch.

Probleme mit Ubuntu 9.04

Mit Ubuntu Version 9.04 wurde RAID direkt im Kernel integriert. Dies kann allerdings häufig zu Problemen führen, so ist es möglich, dass RAID in einen "degraded"-Zustand verfällt. Meistens treten diese "Fehler" allerdings erst nach einem Neustart auf. Hat man das RAID also gerade erst neu aufgesetzt, wartet man am besten, bis das "resync" durchgelaufen ist.

Der folgende Befehl zeigt den Fortschritt an

cat /proc/mdstat 

Ist dies abgeschlossen, startet man das System zum Test neu, da das RAID nun in einem "degraded"-Zustand sein könnte. Prüfen kann man dies mit dem gleichen Befehl.

Man hat nun einen Zustand erreicht, den viele durch Aktualisieren auf Ubuntu 9.04 mit existierendem RAID besitzen. Sie können also hier einsteigen, wenn sie gerade diese Prozedur hinter sich haben.

Da die Festplatten im Folgenden nur neu "eingesammelt" werden, sollten keine Daten verlorengehen. Es sei hier nahe gelegt, den "degraded" RAID zu benutzen, um eine Sicherheitskopie anzulegen (falls dies noch möglich ist!). Wenn nicht, sollte man berücksichtigen, dass ein RAID Sicherheitskopien nicht ersetzt. Gründe dafür können Viren, Benutzerfehler, Totalausfall oder eben auch ein Systemupdate sein.

Einmal kurz und knapp für RAID-Profis

  1. Alle RAIDs stoppen

  2. RAIDs explizit (durch Angabe der devices) neu "Einsammeln". Verwenden werden die Namen "/dev/md_dX X=0,1,2,..." (Die RAIDs erscheinen später als /dev/md0,1,2...)

  3. Updaten der mdadm.conf mit "mdadm --detail --scan >> mdadm.conf"

  4. Auskommentieren der alten ARRAY-Definitionen in der mdadm.conf

  5. Ein obligatorischer Testneustart

  6. Einfügen der /dev/md0,1,... in die fstab

  7. Neuladen der fstab

Damit ist das RAIDs gerettet bzw. an Ubuntu 9.04 angepasst.

... und einmal für die RAID-Neulinge ausführlich

Im Folgenden werden die Schritte noch einmal langsam und mit genauen Befehlen beschrieben:

  1. Stoppen aller RAIDs (Den Stern * so stehen lassen, es werden dann alle RAIDs gestoppt):

    sudo mdadm --stop /dev/md*  
  2. Wiedervereinigen der RAIDs (am Beispiel eines RAID1. Verwendet werden muss "md_d0", nicht "md0"! Statt 0 natürlich 1 2 3 falls mehrere RAIDs verwendet werden):

    sudo mdadm --assemble /dev/md_d0 /dev/sda1 /dev/sdb1 
  3. Wiedereinfügen der neu vereinigten RAIDs in die /etc/mdadm/mdadm.conf:

    sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf 

    oder

    sudo mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm/mdadm.conf 
  4. Wichtig ist dabei das Löschen oder Auskommentieren der alten ARRAY-Definitionen. Dazu in einem Editor mit Rootrechten die Datei /etc/mdadm/mdadm.conf berarbeiten. Dies sollte in etwa so aussehen:

    # definitions of existing MD arrays
    #Diese Zeile müssen Sie auskommentieren 
    #ARRAY /dev/md0 level=raid1 num-devices=2 UUID=c4677279:2d8a904a:01f9e43d:ac30fbff
    #Diese Zeile wurde eingefügt:
    
    ARRAY /dev/md/d0 level=raid1 num-devices=2 metadata=00.90 UUID=ea1f247d:e21f1ae1:01f9e43d:ac30fbff

Die Angabe "metadata=00.90" zeigt beim Starten einen Fehler. Die Änderung auf "metadata=0.90" behebt das Problem. Die RAIDs erscheinen nach einem Neustart mit den gewohnten Gerätenamen (z.B. /dev/md0 und (nicht etwa /dev/md_d0 oder /dev/md/d0).

Die Angaben können nun auch in die fstab eintragen werden. Dazu zunächst im Terminal mit

sudo mkdir /media/raiddisk  

das Verzeichnis /media/raiddisk anlegen, und dann die Datei /etc/fstab in einem Editor mit Root-Rechten bearbeiten und folgende Zeile einfügen:

/dev/md0 /media/raiddisk ext4 defaults 0 0

Anschließend die fstab neuladen:

sudo mount -a 

Überprüfung der Aktion mit dem Befehl "df -h". Das Ergebnis sollte u.A. in etwa folgendes liefern:

Dateisystem            Größe Benut  Verf Ben% Eingehängt auf

/dev/md0              917G   11G  861G   2% /media/raiddisk <---- RAID

USB und RAID

Wichtig ist vor allem, dass RAID-0 (stripping) denkbar ungeeignet für ein USB-RAID ist, da bei diesem das Entfernen einer Platte direkt zum Defekt des RAID-Verbunds führt. Mit RAID 5 und 6 kann es kritisch werden, es sollte aber funktionieren, auch wenn stark davon abzuraten ist. Daher ist das Folgende an einem RAID 1 (Spiegel) mit 2 Partitionen auf 2 verschiedenen USB Festplatten (sdb1 sdc1) erklärt.

RAID 1 funktioniert, weil immer auf alle Platten geschrieben wird und das System zwischenzeitlich entfernte Platten wieder synchronisieren kann.

Bei USB-Festplatten muss man unterbinden, dass Benutzer versuchen, diese einzuhängen und dass das System dies am Anfang nicht selbst probiert. Dazu sollte man wissen, dass alle am RAID beteiligten Partitionen die gleiche UUID haben. Diese kopiert man in die fstab und fügt die Parameter "nouser" und "noauto" hinzu.

Zum Herausfinden der UUID folgenden Befehl ausführen:

sudo blkid /dev/sdb1
sudo blkid /dev/sdc1 

Beide sollten die gleiche UUID haben, wenn sie am gleichen RAID beteiligt sind. Daher muss man auch nur einen UUID-Eintrag in die fstab aufnehmen.

Dies geschieht in dem Beispiel, indem man die Datei /etc/fstab in einem Editor mit Root-Rechten bearbeitet:

... hier stehen noch autogenerierte Einträge....
##################RAID 1 sdb1 and sdc1 settings###########################
#deny automout and useraccess to sdb1 sdc1
#verbiete den Automount und den Benutzerzugriff zu sdb1 sdc1
UUID=ea1f247d:e21f1ae1:01f9e43d:ac30fbff none auto nouser,noauto 0 0

#Mount RAID in /media/usbraiddisk with default parameters
#Mounte das RAID in /media/usbraiddisk mit standard parametern.
/dev/md0 /media/usbraiddisk ext4 defaults 0 0

Bedeutung:

  • "UUID=ea1....bff" lokalisiert die Partitionen sdb1 und sdc1 eindeutig, auch wenn diese mal ausgesteckt wurden und der alte Name sdb1 oder sdc1 schon belegt ist.

  • "none" bedeutet, dass diese Festplatten nicht eingehängt werden, sie sollen ja auch nur über das RAID erreichbar sein.

  • "auto" ermittelt das Dateisystem automatisch, "fd" würde hier also auch gehen.

  • "nouser" verbietet, dass Benutzer diese Partition mounten können, bzw dass sie in "Orte" verfügbar ist.

  • "noauto" verbietet dem System, diese Festplatte beim Hochfahren zu mounten. Dies ist nicht zwingend notwendig, da es nicht versuchen wird. (Kleine Kritik an Ubuntu: Ubuntu ist ein Betriebssystem für einfache Benutzer oder Linux-Einsteiger, daher ist man sich nie ganz sicher, was hier alles automatisch und vor allem wann gemacht wird, oder ob dies durch Hilfsprogramme getätigt wird. Dies macht Ubuntu zwar sehr einfach in der Bedienung, führt aber bei komplexen Situationen wie USB-RAIDs zu erheblichen Problemen. Daher besser "noauto" einfügen, um die gewünschte Eigenschaft zu garantieren.)

  • "0 0" am Ende sind die "dump"- und "pass"-Werte. Mehr dazu unter fstab

Komplexe Szenarien

Wem die oben genannten Möglichkeiten nicht ausreichen, der kann auch auf komplexere Konfigurationen zurückgreifen. So ist es möglich, zwei RAID 5 zu spiegeln, also als RAID 1 zu betreiben (zum Beispiel: md0 = sda1 + sdb1 + sdc1 ; md1 = sdd1 + sde1 + sdg1 ; md2 = md0 + md1 ; wobei md0 und md1 jeweils ein RAID 5 sind, und md2 ein RAID 1 ist). Dies erhöht die Datensicherheit, da ein komplettes RAID 5 ausfallen kann, und die Daten trotzdem noch verfügbar sind.

Alternativ verwendet man auch gerne mehrere RAIDs in Zusammenarbeit mit LVM, da dieses einen sehr flexiblen Umgang mit den RAIDs ermöglicht. Zudem sind dadurch auch sehr große Dateisysteme mit etlichen Terabytes und sogar Petabytes realisierbar.

Booten von RAID 1

Hat man ein Software-RAID manuell eingerichtet und möchte ohne extra /boot-Partition direkt vom RAID 1 starten, so muss man nach der Installation von "mdadm" das Initramfs aktualisieren:

sudo update-initramfs -u -k all 

GRUB Fehlermeldungen

ALERT! /dev/md0...

Falls von dem RAID noch nicht gebootet werden kann, weil man das System darauf umgezogen hat, kann man dazu in einer Live-Umgebung mit chroot in das neue System wechseln. Eine Beschreibung hierzu findet sich im Artkel GRUB (Abschnitt „Methode-3-Chroot-ueber-ein-Live-System“).

sudo mount /dev/md0 /mnt
sudo mount -o bind /dev /mnt/dev
sudo mount -t proc /proc /mnt/proc
sudo chroot /mnt /bin/bash
sudo update-initramfs -u -k all 

unknown Filesystem (GRUB 2)

Falls das System nicht bootet, nachdem man es auf ein RAID 1 kopiert hat, obwohl

  • /etc/fstab angepasst wurde

  • die Datei /boot/grub/grub.cfg (nach Ausführung von update-grub) sowie /etc/mdadm/mdadm.conf korrekt erscheinen

  • und die initram wie oben beschrieben aktualisiert wurde

kann es helfen, GRUB 2 wie unter GRUB 2/Reparatur (Abschnitt „Root-Directory-Methode“) beschrieben erneut zu installieren.

"Device or resource busy"

Falls beim Erstellen eines RAIDs folgende Fehlermeldung erscheint:

mdadm: Cannot open /dev/sdXX: Device or resource busy

und mit den Partitionen bereits einmal ein RAID erstellt wurde, muss dieses mit dem Befehl

sudo mdadm --manage --stop /dev/mdX 

gestoppt werden.

mdadm.conf

Sollte wider Erwarten ein RAID beim Booten nicht erkannt werden, so kann man mit der Datei /etc/mdadm/mdadm.conf der automatischen Erkennung auf die Sprünge helfen. Zuerst aktiviert und startet man alle RAIDs manuell (s.o.), damit sie vom Kernel erkannt werden. Der Befehl

cat /proc/mdstat 

zeigt anschliessend an, ob alles seine Richtigkeit hat. Dann erstellt man eine neue Konfigurations-Datei. Hier muss man unterscheiden, ob man Partitionen oder ganze Platten für das RAID verwendet hat:

Befehle zur Wiederherstellung der Konfigurationsdatei bei aus Partitionen aufgebauten RAIDs:

echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > /etc/mdadm/mdadm.conf
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf 

Befehle zur Wiederherstellung der Konfigurationsdatei bei aus ganzen Platten aufgebauten RAIDs:

echo 'DEVICE /dev/hd[a-z] /dev/sd*[a-z]' > /etc/mdadm/mdadm.conf
sudo mdadm --examine --scan --config=/etc/mdadm/mdadm.conf >> /etc/mdadm/mdadm.conf 

RAID auflösen

Manchmal soll ein RAID wieder aufgelöst werden, um mehr Platz zu haben, den Rechner schneller zu machen oder weil es nicht mehr bootet. Ein Software-RAID verbraucht einiges an CPU-Leistung. Der Kernel erkennt ein RAID am Partitionstyp und dem Superblock. Um also ein RAID1 aufzulösen, reicht es eigentlich, den Typ der Partition von RAID (0xfd) auf Linux (0x83) zu ändern. Sicherheitshalber kann man zusätzlich noch den Superblock mit mdadm (mdadm --zero-superblock /dev/sdax) entfernen. Die Partitionen lassen sich danach ganz normal einbinden.

Ein Beispiel, um ein RAID1 auf /dev/sda1 und /dev/sdb1 komplett zu löschen:

sudo umount /dev/md0
sudo mdadm --stop /dev/md0
sudo mdadm --zero-superblock /dev/sda1 /dev/sdb1 

Dann den Partitionstyp von Linux RAID autodetect auf Linux mit cfdisk oder fdisk ändern.

Nicht vergessen, falls es nötig ist, den Bootmanager GRUB bzw. GRUB 2 neu zu installieren und die fstab zu ändern.

Diese Revision wurde am 24. Mai 2012 07:33 von frustschieber erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, Server, RAID