[[Vorlage(Überarbeitung, 1.7.2012, Software-RAID, RapaNui)]] [[Vorlage(Getestet oneiric, natty, lucid, hardy)]] [[Vorlage(Ausbaufähig, "Die Konfiguration der '''/etc/mdadm/mdadm.conf''' für neue RAID-Arrays kann noch erklärt werden.")]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Pakete_installieren: Installation von Programmen] [:Kernelmodule: Kernelmodule überprüfen/laden] }}} [[Inhaltsverzeichnis(2)]] Ein [wikipedia:RAID:] ('''R'''edundant '''A'''rray of '''I'''ndependent '''D'''isks) 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. ||<-5 rowclass="titel"> 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 [wikipedia:ATA/ATAPI: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 [wikipedia:SATA: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. {{{#!vorlage Warnung 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: {{{#!vorlage Paketinstallation mdadm }}} Bis einschließlich Ubuntu 8.10 sollte sichergestellt sein, dass das [:Kernelmodule: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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo modprobe md_mod }}} Anschließend sollte noch wie unter [:Kernelmodule#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_Installation: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. {{{#!vorlage Warnung 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: {{{#!vorlage Befehl 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 [:Partitionierung/Grundlagen#GUID-Partition-Table: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. {{{#!vorlage 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. {{{#!vorlage 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. {{{#!vorlage Befehl sudo mdadm --zero-superblock /dev/hde1 sudo mdadm --zero-superblock /dev/hdg1 }}} Folgender Befehl erstellt ein Software-RAID 0: {{{#!vorlage Befehl sudo mdadm --create --verbose /dev/md0 --auto=yes --level=0 --raid-devices=2 /dev/hde1 /dev/hdg1 }}} Folgender Befehl erstellt ein Software-RAID 1: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. {{{#!vorlage Warnung 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#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: {{{#!vorlage 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 {{{#!vorlage 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo mdadm --detail /dev/Raiddevice }}} Ebenso lässt sich mit diesem Befehl eine kurze Übersicht des RAIDs ausgeben: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 [:man: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: {{{#!vorlage Befehl 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!): {{{#!vorlage Befehl sudo sfdisk -d /dev/hdf | sfdisk /dev/hde }}} Anschließend kann die Platte mit folgendem Befehl zum Verbund hinzugefügt werden: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo dd if=/dev/sdX of=/root/sdX.mbr bs=512 count=1 }}} * Partitionstabelle: {{{#!vorlage Befehl sudo sfdisk /dev/sdX > /root/sdX.pt }}} Das Zurückspielen erfolgt dann mit: * MBR: {{{#!vorlage Befehl sudo dd if=/root/sdX.mbr of=/dev/sdX bs=512 count=1 }}} * Partitionstabelle: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{#!vorlage Paketinstallation mdadm }}} installieren[2], danach kann man dann das Software-RAID wieder benutzen: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo mdadm --assemble --scan --uuid=6c926c35:380d7ab2:3603cf0e:ecfa67b9 }}} oder durch die Angabe der RAID-Partitionen: {{{#!vorlage Befehl sudo mdadm --assemble /dev/mdX /dev/sdaX /dev/sdbX /dev/sdcX }}} {{{#!vorlage 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 {{{#!vorlage Befehl 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. {{{#!vorlage Warnung 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 {{{#!vorlage 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 {{{#!vorlage Befehl cat /proc/mdstat }}} auslesen oder eleganter mit {{{#!vorlage Befehl watch cat /proc/mdstat }}} beobachten (beenden mit [[Vorlage(Tasten, strg+c)]]). {{{#!vorlage 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 {{{#!vorlage Befehl sudo -i }}} Als root angemeldet kann man nun mit dem Befehl {{{#!vorlage 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 {{{#!vorlage Befehl exit }}} eingibt und mit [[Vorlage(Tasten, Enter)]] bestätigt. {{{#!vorlage 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 {{{#!vorlage Befehl sudo resize2fs /dev/mdX }}} verwendet werden. Für ein Reiser-Dateisystem sollte der folgende Befehl verwendet werden: {{{#!vorlage Befehl 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. {{{#!vorlage 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 ([:GRUB_2/Terminal-Befehle#grub-setup: mehr zu grub-setup]): {{{#!vorlage Befehl sudo grub-setup /dev/sdX }}} `sdX` ist dabei an das [:GRUB_Umgebung_analysieren#Festplatten-Aufteilung-und-UUID: 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 ([bug:594202:]). Danach muss mit {{{#!vorlage Befehl sudo update-grub }}} GRUB 2 neu initialisiert werden. ==GRUB== Mit {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{ #!vorlage Befehl 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 {{{#!vorlage Befehl 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 1. 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'''...) 1. Updaten der '''mdadm.conf''' mit "`mdadm --detail --scan >> mdadm.conf`" 1. Auskommentieren der alten ARRAY-Definitionen in der '''mdadm.conf''' 1. Ein obligatorischer Testneustart 1. Einfügen der '''/dev/md0,1,...''' in die '''fstab''' 1. 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): {{{#!vorlage Befehl sudo mdadm --stop /dev/md* }}} 1. 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): {{{#!vorlage Befehl sudo mdadm --assemble /dev/md_d0 /dev/sda1 /dev/sdb1 }}} 1. Wiedereinfügen der neu vereinigten RAIDs in die '''/etc/mdadm/mdadm.conf''': {{{#!vorlage Befehl sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf }}} oder {{{#!vorlage Befehl sudo mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm/mdadm.conf }}} 1. 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 {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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#Methode-3-Chroot-ueber-ein-Live-System:]. {{{#!vorlage Befehl 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#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 {{{#!vorlage 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 {{{#!vorlage 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. = Links = * [https://raid.wiki.kernel.org Linux Raid] {en} - Dokumentation im Wiki von Kernel.org * [http://man-wiki.net/index.php/8:mdadm mdadm Dokumentation] {en} * [http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch26_:_Linux_Software_RAID Quick HOWTO - Linux Software RAID] {en} - ein weiteres RAID-Howto # tag: Hardware, Server, RAID