[[Vorlage(Überarbeitung, 10.09.2013, Software-RAID, Nonymus)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo:Root-Rechte erlangen] [:Pakete_installieren: Installation von Programmen] [:Datenträger#Wie-heissen-die-Datentraeger:Wie heißen die Datenträger] [:Systeminformationen_ermitteln#Festplatten:] [:Partitionierung:] [:Dateisystem:] [:mount:] [:fstab:] }}} [[Inhaltsverzeichnis(1)]] 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 Verfügbarkeit des Systems''' im Falle eines Festplattendefektes zu erreichen. Native Hardware-RAID-Controller, die unter Linux unterstützt werden (z.B. 3Ware, Adaptec, etc.), sind aber für den Heimgebrauch oft zu teuer. Diese braucht man aber nicht zwingend, wenn man unter Linux ein Software-RAID verwendet. Als weitere Alternative könne die Festplatten können auch an sog. FakeRAID-Controllern verwendet werden, z.B. Onboard-RAID-Controllern. {{{#!vorlage Warnung Ein Raid ist kein Backup! Es stellt nur sicher, dass man trotz defekter Festplatte an einem System weiter arbeiten kann. Auch beim Betrieb eines RAIDs sollte man von daher regelmäßige Backups seiner Daten anlegen. }}} = Grundsätzliche Informationen = * Im Allgemeinen macht es nur Sinn, Partitionen gleicher Größe zu verwenden, die auf unterschiedlichen Festplatten angelegt sind. * Um das komplette System auf einem RAID-Verbund zu installieren bietet es sich an, das System über die [:Alternate_Installation:Alternate-CD] aufzusetzen. Die Alternate-CD unterstützt bereits bei der Installation das Erstellen üblicher RAID-Varianten. Dies findet man unter dem Punkt: "Partitionieren". Ab [:Quantal:Ubuntu 12.10] ist die Alternate-CD nur noch bei [:Lubuntu:] verfügbar. * Ubuntu unterstützt von Haus aus die RAID-Varianten 0,1,5,6,10 und JBOD. Details zu den einzelnen Typen finden sich im Abschnitt [#RAID-Level RAID-Level]. * Soll von einem neuen RAID-Verbund gebootet werden (Root-Dateisystem), muss der Bootloader installiert und die '''mdadm.conf''' mit ins '''initramfs''' übernommen werden. [:GRUB_2:] erlaubt im Gegensatz zum Vorgänger [:GRUB:] auch das direkte Booten ohne eigene Root-Partition. == IDE/SATA == Bei [wikipedia:ATA/ATAPI:IDE-ATA]-Festplatten[4] gilt: die verwendeten Festplatten sollten nicht am selben 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[4] 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. Man sollte auch darauf achten, dass man die richtige Festplatte[4] angibt, um Datenverlust zu vermeiden. }}} = Installation = Folgende Pakete muss installiert[3] werden, um ein Software-RAID erstellen zu können: {{{#!vorlage Paketinstallation mdadm parted }}} = Anlegen eines RAID = == Partitionierung == {{{#!vorlage Warnung Alle Veränderungen an den Festplatten löschen die vorherigen Inhalte. Es ist daher dringend angeraten eine Datensicherung durchzuführen. }}} Zunächst müssen die Bezeichnungen der zu verwenden Festplatten bekannt sein[5]. Auf jeder Festplatte wird eine Partition erstellt, die (fast) den gesamten Platz der Platte einnimmt. Im Beispiel wird das Laufwerk '''sde''' vorbereitet. Die Schritte müssen für jedes Laufwerk, dass am RAID teilnehmen soll, mit den entsprechenden Bezeichnungen vom eigenen System wiederholt werden: Eine neue, leere Partitionstabelle auf dem Laufwerk erstellen: {{{#!vorlage befehl sudo parted /dev/sde mklabel gpt }}} Eine einzelne Partition erstellen: {{{#!vorlage befehl sudo parted -a optimal -- /dev/sde mkpart 2048s -8192s #TODO: sudo mit -- testen }}} Die neue Partition als RAID-Partition markieren: {{{#!vorlage befehl sudo parted /dev/sde set 1 raid on }}} {{{#!vorlage Hinweis * Es werden bewusst 8192 Sektoren am Ende der Festplatte ungenutzt gelassen, um für Ausfälle gewappnet zu sein. Falls nach Jahren keine baugleiche Festplatte mehr beschafft werden kann, ermöglicht es der gelassene Puffer auch Laufwerke als Ersatz zu nehmen, die etwas weniger Sektoren haben. * Am Anfang des Laufwerks werden 2048 Sektoren ungenutzt gelassen um ein optimales [#Alignment] zu ermöglichen. Über den Parameter `-a optimal` kümmert sich '''parted''' um weitere Anpassungen, falls nötig. * Es ist auch möglich, die Laufwerke unpartitioniert zusammenzufassen. Dies birgt jedoch einige Nachteile. Zunächst verkompliziert es das [#Alignment Alignment] und kann damit zu Geschwindigkeitseinbußen führen. Außerdem kann im Falle eines Defekts nur ein Laufwerk mit genau gleicher oder höherer Sektoranzahl als Ersatz benutzt werden. }}} == RAID anlegen == Das Hauptwerkzeug für alle Arbeiten an Software-RAIDs unter Linux ist '''mdadm'''. Es bildet die Schnittstelle zu den RAID-Funktionen des Kernels. Mehr Informationen finden sich im Abschnitt [#mdadm MDADM]. Hiermit werden auch RAID-Verbunde erstellt: Beispiel 1: RAID 1 über zwei Partitionen, '''sde1''' und '''sdf1''': {{{#!vorlage Befehl sudo mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/sde1 /dev/sdf1 }}} Beispiel 2: Software-RAID 5 mit 4 Partitionen: {{{#!vorlage Befehl sudo mdadm --create /dev/md0 --auto md --level=5 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 }}} Die Parameter im Einzelnen: * `--create /dev/md0` - Erzeuge ein neues Verbundgerät unter der Bezeichnung '''md0'''. Falls bereits Verbundgeräte vorhanden sind muss ein anderer, freier Bezeichner gewählt werden (''md1'',''md2'', etc.). * `--auto md` - Erzeuge ein "klassisches" Verbundgerät ohne Vor-Partitionierung (diese können bei Bedarf ab Kernelversion 2.6.28 trotzdem partitioniert werden). * `--level=` - Die Art RAID-Verbundes. RAID 1 im ersten Beispiel, im zweiten RAID 5. Eine Übersicht über die möglichen RAID-Level gibt [#RAID-Level Tabelle RAID-Level] * `--raid-devices` - Die Anzahl der Einzelgeräte, aus denen das RAID bestehen soll. * `/dev/sde1 /dev/sde2 ...` - Die einzelnen Geräte, die zusammengefasst werden sollen. Die Reihenfolge der Bezeichner, bzw. idealerweise die der entsprechenden physischen Geräte sollte man sich aufschreiben, falls im Notfall das RAID von Hand neu zusammengesetzt werden muss. Die nötigen Initialisierungsmaßnahmen laufen nun selbstständig im Hintergrund ab. Das neu erstellte Blockgerät '''md0''' kann jedoch sofort benutzt werden und das System darf auch währenddessen normal heruntergefahren oder neu gestartet werden. === Dateisystem === Um den RAID-Verbund als normales Speicherlaufwerk zu nutzen muss noch ein Dateisystem[7] darauf erstellt und dieses ins System eingebunden werden, z.B. [:ext:ext4]. Im Falle eines RAID 1 ist dies recht einfach: {{{#!vorlage Befehl sudo mkfs.ext4 /dev/md0 }}} Bei komplexeren Verbunden wie RAID 0,5,6 oder 10 sollte das Dateisystem auf das RAID angepasst werden, um optimale Leistung zu ermöglichen. Dafür muss zunächst die sog. "Chunk Size", also die Datenmenge, die in einem einzelnen Schreibvorgang geschrieben wird, bekannt sein. Diese lässt sich wie folgt ermittlen: {{{#!vorlage Befehl sudo mdadm -D /dev/md0 | grep "Chunk Size" }}} Bei einem RAID 5 mit Standardeinstellungen liefert dies Beispielsweise: {{{ Chunk Size : 512K }}} Es werden also 512 KiB Chunks verwendet. Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden. Am einfachsten geht das mittels des [http://busybox.net/~aldot/mkfs_stride.html Raid Stride Calculators]. Alternativ können die Parameter auch von Hand ermittelt werden: * `block-size` Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fasst ausschließlich 4096 Byte (4 KiB) Blöcke verwendet. * `stride-size` Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich (512 / 4) = 128. * `stripe-width` Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus (`stride-size` * Anzahl der effektiv nutzbaren Partitionen). Bei einem RAID 5 über 4 Partitionen ergibt sich beispielsweise (128 * 3) = 384. Details zur Anzahl der effektiv nutzbaren Partitionen finden sich im Abschnitt [#RAID-Level RAID-Level]. Sind die Parameter ermittelt wird das Dateisystem erstellt: {{{#!vorlage Befehl sudo mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0 }}} === RAID mounten === Das RAID muss noch in die [:Verzeichnisstruktur:] eingebunden[8] werden. Dies geschieht einfach mittels `mount`, z.B. am Mountpunkt '''/media/daten'''. {{{#!Vorlage befehl mount /dev/md0 /media/daten }}} Damit das System beim Start das Dateisystem selber einhängt muss eine entsprechende Zeile in die '''/etc/fstab''' eingetragen werden: {{{/dev/md0 /media/daten ext4 defaults 0 2}}} === mdadm.conf aktualisieren === Alle Informationen zum RAID werden auf jeder verwendeten Partition in den sog. Superblock geschrieben. Der Kernel sucht beim Starten automatisch nach diesen Superblöcken und startet alle voll funktionsfähigen RAIDs, ohne das eine Konfigurationsdatei nötig ist. Trotzdem kann es sinnvoll sein, eine Konfigurationsdatei zu erstellen, z.B. wenn man über Ausfälle am RAID per E-Mail benachrichtigt werden möchte. Die Konfigurationsdatei kann bequem mit einem Skript von mdadm erstellt werden und enthält dann direkt alle Definitionen aller momentan aktiven RAIDs: {{{#!vorlage Befehl sudo su -c "/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf" }}} === RAID synchronisieren === Im Hintergrund werden jetzt die im RAID vorhandenen Festplatten/Partitionen synchronisiert. Dies kann eine erhöhte Systemauslastung ("load average") verursachen und je nach Größe der Partitionen eine Weile dauern. === RAID überwachen === Den Fortschritt der Synchronisation kann man mit {{{#!vorlage befehl cat /proc/mdstat }}} überwachen. Ausführliche Informationen zu einem RAID-Device liefert: {{{#!vorlage Befehl sudo mdadm --detail /dev/md0 }}} Soll von dem neuen RAID-Verbund gebootet werden (Root-Dateisystem), dann muss noch der [#Bootloader Bootloader installiert] und die [#mdadm-conf mdadm.conf] in das [#initramfs initramfs übernommen] werden. = mdadm = = Defektes RAID = Ein funktionierendes, intaktes Array liefert bei den [#RAID-ueberwachen Abfragen] als Status ein [UU] zurück. Sollte eine Festplatte/Partition nicht mehr syncron sein, dann erhällt man einen Status [U_] bzw. [_U]. '''Muster eines defekten RAID-Arrays:''' [[BR]] {{{Personalities : [raid1] md1 : active raid1 sde2[0] sdf2[1](F) 524276 blocks super 1.2 [2/1] [U_] md0 : active raid1 sdg1[0] sdh1[1](F) 33553336 blocks super 1.2 [2/1] [U_] unused devices: }}} == Controller-Fehler == 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 und kann mit der folgenden Vorgehensweise behoben werden: 1. RAID stoppen:{{{#!vorlage Befehl sudo mdadm --stop /dev/md0 }}} 1. Das RAID muss manuell wieder zusammengefügt werden, dabei ist es wichtig, die letzte funktionierende Konfiguration zu verwenden. Bei dem [#RAID-erzeugen o.g. Beispiel], ein RAID 5 mit 3 Partitionen, bei dem zwei Festplatten wegen Controller-Defekt ausgestiegen sind, müssen die ersten zwei Partitionen verwendet werden, da sie bis zum Ausfall noch zusammen aktiv waren. Nun reaktviert man das Arrays mit: {{{#!vorlage Befehl sudo mdadm --assemble /dev/md0 /dev/sde1 /dev/sdf1 --force }}}. 1. Die dritte Partition kann nun mit{{{#!vorlage befehl sudo mdadm --add /dev/md0 /dev/sdg1 }}} wieder in den Verbund aufgenommen werden. == Festplatten-Fehler == Wenn eine der Festplatten im Verbund ausfällt, wird das vom mdadm-Dämon entsprechend gelogt. Dies kann in der [#RAID-ueberwachen Übersicht] eingesehen werden bzw. wird, sofern eingestellt, mittels E-mail/Programm gemeldet. {{{#!vorlage Warnung Bei einem RAID 0 äußert sich der Ausfall einer Platte im Totalausfall des gesamten RAID-Verbunds. Das RAID 0 kann daher nicht mit den folgenden Anweisungen repariert werden, sondern muss neu aufgesetzt werden. }}} {{{#!vorlage Hinweis * Wurde eine Festplatte, entgegen der Empfehlung, mit mehreren Partitionen versehen, dann ist darauf zu achten, dass dies für jede Partition mit der entsprechenden ''md''-Kennung einzeln getan wird. * Wurden die Partitionen auch noch von verschiedenen RAIDs genutzt, dann kann es vorkommen, dass eine verwendete Festplatte teilweise defekt ist und sich z.B. die Partition zu '''md0''' im Status [U_] befindet, während alle anderen im Status [UU] sind. In diesem Fall schlägt der o.g. Befehl fehl, da die anderen '''md'''s in Ordnung sind. Diese müssen mit einem `mdadm --manage /dev/mdX --fail /dev/sdXY` alle einzeln in den Modus [U_] vesetzt werden. }}} Die Wiederherstellen des Software-RAID lässt sich im laufenden System durchführen. Um die Festplatte/Partition zu ersetzen, muss diese zunächst aus dem RAID-Verbund entfernt werden, z.B.: {{{#!vorlage Befehl sudo mdadm /dev/md0 --remove /dev/sde1 }}} === Neue Festplatte === Die neue Festplatte mit Partitionsnutzung muss zunächst genauso wie die anderen im RAID [#Vorbereitung manuell] partitioniert und formatiert werden. ==== Partitionstabelle erstellen ==== Sofern die Partitionstabelle der ausgefallenen Festplatte noch lesbar ist, kann man diese auf die neue Festplatte sehr einfach kopieren. Bei beiden Partitionstypen, MPT und GPT, lohnt es sich jedoch immer einen Backup der Partitionstabelle zur Verfügung zu haben. Falls Probleme bei den folgenden Befehlen auftreten, kann man dann dieses Backup auf die neue Festplatte mit [:fdisk#Partitionstabelle-zurueckladen: sfdisk] für MPT bzw. mit [:gdisk#Partitionstabelle-zurueckladen:sgdisk] für GPT einspielen. Ein Skript zum sichern aller Partitionstabellen (MPT+GPT) der angeschlossenden Festplatten befindet sich unter [:Skripte/Partitionstabellen_sichern:]. * MPT: Die Partitionstabelle des MBR der Platte '''sde''' auf die neue Festplatte '''sdk''' kopieren:{{{#!vorlage Befehl sudo sfdisk -d /dev/sde | sfdisk /dev/sdk}}} * GPT: Die GUID-Partitionstabelle der Platte '''sde''' auf die neue Festplatte '''sdk''' kopieren (das die alte Festplatte am Ende aufgeführt wird ist korrekt):{{{#!vorlage Befehl sgdisk -R /dev/sdk /dev/sde}}} Danach gibt man bei GPT der neuen Festplatte noch eine neue zufällige, neue [wikipedia:Globally_Unique_Identifier:GUID]{{{#!vorlage Befehl sgdisk -G /dev/sdk}}} ==== Partitionstabelle bekanntgeben ==== Wurde die Reparatur im laufenden System durchgeführt, dann muss man die Partitionstabelle noch dem Kernel bekannt geben. Bei ganz neuen Festplatten kann kann man dies mit {{{#!vorlage befehl sudo sfdisk -R /dev/sgi }}} oder {{{#!vorlage befehl sudo partprobe -s /dev/sdk }}} ohne einen System-Neustart durchzuführen, machen. Nun kann die neue Festplatte wieder in die Arrays eingebunden werden {{{#!vorlage Befehl sudo mdadm /dev/md0 --add /dev/sdk1 }}}und die Synchronisation läuft an. Dieser Vorgang kann je nach Größe einige Zeit dauern. Der Status der Synchronisation kann wieder jederzeit [#RAID-ueberwachen eingesehen] werden. '''Musterausabe:''' {{{Personalities : [raid1] md0 : active raid1 sdk1[1] sde1[0] 1028096 blocks [2/2] [UU] [==========>..........] resync = 50.0% (514048/1028096) finish=97.3min speed=65787K/sec unused devices: }}} Soll von dem neuen Raid-Verbund gebootet werden (Root-Dateisystem), dann muss noch der [#Bootloader Bootloader installiert] und das [#initramfs initramfs] aktualisiert werden. = 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, müssen mit dem gleichen Dateisystem[7] wie das RAID selbst [#RAID-formatieren formatiert] sein. {{{#!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" [#RAID-ueberwachen beendet] ist, bevor man den Computer ausschaltet oder neu startet, da sonst alle Daten des RAID verlorengehen können. }}} {{{#!vorlage Hinweis Um die Auswirkungen auf das System zu minimieren, kann die Geschwindigkeit beim Vergrößern des RAID auf das Minimum (rund 100 MB/s) gedrosselt werden. 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. Selbst wenn diese Geschwindigkeit nicht erreicht wird, ist es kein Schaden, sie auf diesen Wert zu setzen. Das RAID darf während des Vorgangs [#RAID-mounten eingebunden] sein. Dies verlangsamt den Vorgang allerdings wesentlich. Im ungemounteten Zustand kann das "reshaping" über 50% schneller sein als im gemounteten Zustand. }}} Um das RAID neu aufzubauen und somit den neuen Speicherplatz nutzen zu können, muss man wie folgt vorgehen: 1. Sicherungsdatei anlegen: {{{#!vorlage Befehl sudo cp /proc/sys/dev/raid/speed_limit_min /proc/sys/dev/raid/speed_limit_min.old}}} 1. Minimieren der Geschwindigkeit:{{{#!vorlage Befehl sudo -i echo 100000 >/proc/sys/dev/raid/speed_limit_min exit }}} 1. Neue Festplatte/Partition dem vorhandenen Array hinzufügen:{{{#!vorlage Befehl sudo mdadm --add /dev/md0 /dev/sdk1 }}}Die Partition wird zunächst nur als [#RAID-Typen Spare-Laufwerk] zum RAID hinzugefügt. Der Befehl kann auch mehrmals mit verschiedenen neuen Partitionen ausgeführt werden, um gleich mehrere Geräte hinzuzufügen. 1. Das RAID neu aufbauen, um somit den neuen Speicherplatz nutzen zu können: {{{#!vorlage Befehl sudo mdadm --grow --raid-devices=4 /dev/md0 }}} Die Option "`raid-devices`" gibt dabei 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=`" einen Backup in eine externe Datei erstellen. 1. Das Dateisystem muss noch [:Dateisystemgröße_ändern:erweitert] werden, damit der neu entstandene Speicherplatz genutzt werden kann. z.B. mit: {{{#!vorlage Befehl sudo resize2fs /dev/md0 # für ext-Dateisysteme}}} 1. Der überprüfung des Dateisystems ([:Dateisystemcheck:fsck]) sollte man stattgeben, auch wenn es ein wenig Zeit in Anspruch nimmt. 1. Die [#mdadm-conf mdadm.conf] sollte noch auf den [#mdadm-conf-aktualisieren aktuellen Stand] gebracht werden (evtl. alte Einträge löschen). 1. Der Status lässt sich wieder jederzeit [#RAID-ueberwachen einsehen]. 1. Das Limit sollte nach erfolgreichem "reshaping" wieder zurückgesetzt werden:{{{#!vorlage befehl sudo cp /proc/sys/dev/raid/speed_limit_min.old /proc/sys/dev/raid/speed_limit_min}}} Soll von dem neuen Raid-Verbund gebootet werden (Root-Dateisystem), dann muss noch der [#Bootloader Bootloader] installiert und das [#initramfs initramfs] aktualisiert 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). Dazu muss auf dem neuen System das Paket {{{#!vorlage Paketinstallation mdadm }}}installiert[2] werden. {{{#!vorlage Warnung Auf keinen Fall darf man hier die Optionen "`--create`" verwenden, da sonst die Lesbarkeit auf den beteiligten Partitionen zerstört wird. }}} Das RAID muss danach nun nutzbar gemacht werden: 1. RAID aus der [#mdadm-conf mdadm.conf] neu assemblieren{{{#!vorlage Befehl sudo mdadm --assemble --scan}}} 1. 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 einzelnen Partitionen{{{#!vorlage Befehl sudo mdadm --assemble /dev/md0 /dev/sde1 /dev/sdf1 /dev/sdg1}}} Soll von dem neuen Raid-Verbund gebootet werden (Root-Dateisystem), dann muss noch der [#Bootloader Bootloader installiert] und das [#initramfs initramfs] aktualisiert werden. = Live System = Um auf einen RAID-Verbund mittels einer [:Live-CD:] bzw. eines [:Live-USB:] zuzugreifen muss das Programmpaket '''mdadm''' mit {{{#!vorlage befehl sudo apt-get install --no-install-recommends mdadm }}} installiert werden (''--no-install-recommends'' verhindert dabei das mitinstallieren des Mail-Server [:Postfix:]). Anschließend werden mit {{{#!vorlage befehl sudo mdadm --assemble --scan }}} alle gefundenen RAID-Verbunde aktiviert. Mit einem {{{#!vorlage befehl cat /proc/mdstat }}} kann man dann wieder die gefundenen RAID-Verbunde anzeigen. Nun wird das RAID noch mit {{{#!vorlage befehl mkdir /media/raid mount /dev/md0 /media/raid }}} in den Verzeichnisbaum integriert. Jetzt kann man die Daten im Verzeichnis '''/media/raid''' lesen (bei Bedarf auch verändern), sowie auf eine externe Festplatte oder in ein Netzwerkverzeichnis kopieren. Wenn man auf defekte/fehlende Festplatten zugreifen muss, dann schlägt ein ''--assemble --scan'' fehl und die Partitionen müssen einzeln assemblieren werden. Dazu wird z.B. die '''sda1''' als Quelle angegeben (setzt RAID-1, -5 oder -6 voraus): {{{#!vorlage befehl sudo mdadm --assemble --run /dev/md0 /dev/sda1 }}} Dabei bewirkt das ''--run'', dass der Verbund aktiviert wird. Nach dem einhängen in den Verzeichnisbaum sollte man auf die Daten zugreifen können. = 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. Bei einem RAID 1 (Spiegel) mit mehreren Partitionen auf verschiedenen USB Festplatten sollte es keine Probleme geben. RAID 1 funktioniert, weil immer auf alle Platten geschrieben wird und das System zwischenzeitlich entfernte Platten wieder synchronisieren kann. Bei USB-Festplatten muss man nur unterbinden, dass ein Benutzer versucht, diese einzuhängen bzw. dass das System dies am Anfang nicht selbst probiert. Da alle am RAID beteiligten Partitionen die gleiche UUID haben sollten, kann man die '''/etc/fstab'''[9] auf diese abstellen und um die Parameter "`nouser`" und "`noauto`" erweitern. = 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: 1. Aus '''sde1, sdf1''' & '''sdg1''' wird ein RAID 5 erstellt 1. Aus '''sdh1''', '''sdj1''' & '''sdk1''' wird ebenfalls ein RAID 5 erstellt 1. Aus den beiden RAID 5 wird dann ein RAID 1 erstellt. {{{#!vorlage befehl sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sde1 /dev/sdf1 /def/sdg1 sudo mdadm --create --verbose /dev/md1 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdj1 /dev/sdk1 sudo mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/md0 /dev/md1 }}} 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. = RAID auflösen = Um den Striping-Verbund eines RAID aufzulösen, d.h. die Resourcen wieder freizugeben, geht man wie folgt vor: 1. Stoppen des RAID-Verbundes: {{{#!vorlage befehl sudo umount /dev/md0 mdadm --stop /dev/md0}}} 1. Mit einem Editor in der [#mdadm-conf mdadm.conf] alle Array-Angaben löschen. 1. Evtl. noch den [#Superblock-loeschen RAID-Superblock] der entfernten Partitionen löschen. 1. Die Partitions-ID wieder auf normale Linux-ID ändern, z.B. bei MPT auf ''83'' oder bei GPT auf ''8300''. 1. In der '''/etc/fstab'''[9] die aufgelösten RAIDs entnehmen. 1. Evtl. noch verbliebene Arrays an die [#mdadm-conf mdadm.conf] neu [#mdadm-conf-aktualisieren anfügen] Die Daten sind damit nicht mehr zugreifbar. Die Partitionen auf den Festplatten sind damit aber immernoch vorhanden, solange diese nicht überschrieben werden. = Bootloader = 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_2:GRUB_2] 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. == MBR == * MPT: [:GRUB_2/Installation:Installation:] des Bootloaders in alle MBR aller beteiligten Festplatten (`grub-install /dev/sdX`), wobei die neu eingerichteten Festplatten anzugegeben sind. == GPT == * GPT: Der Bootloader muss in die entsprechenden [:GRUB_2/Grundlagen#MBR-mit-GUID-Partitionstabelle-GPT:Boot-Partitionen] installiert werden. Bei z.B. einer Installation mit GPT & BIOS bricht die Installation von [:GRUB_2/Problembehebung#Probleme-bei-der-Installation:GRUB 2] sonst ab und weist mit einer Fehlermeldung auf die fehlende Partition hin;{{{grub-installer: /usr/sbin/grub-setup: warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!}}} Weitere Möglichkeiten, z.B. bei der Reparatur des RAID, bieten die [:GRUB_2/Reparatur#Root-Directory-Methode:Root-Directory-], die [:GRUB_2/Reparatur#chroot-Methode:Chroot-] oder die [:GRUB_2/Terminalbefehle#grub-setup:Setup-]Methode. == initramfs == Damit die Boot-Partitionen durch die `initrd` auch einwandfrei gemountet werden, sollte nach Änderung der Datei [#mdadm-conf mdadm.conf] noch die initrd neu angelegt werden, z.B. durch Ausführen von {{{#!vorlage Befehl dpkg-reconfigure mdadm}}} Sofern die entsprechenden Module, ''md '' bzw. ''raid0, raid1'', noch nicht in der '''/etc/initramfs-tools/modules''' aktiviert wurden, muss dies noch erfolgen: {{{#!vorlage Befehl sudo -i echo "raid0" >>/etc/initramfs-tools/modules echo "raid1" >>/etc/initramfs-tools/modules echo "md" >>/etc/initramfs-tools/modules exit }}} und anschließend das '''initramfs''' mit {{{#!vorlage Befehl sudo update-initramfs -u -k all}}} aktualisiert werden. = Fehlermeldungen = == Bootprobleme == GRUB 2: unknown Filesystem: [[BR]] Falls das System nicht bootet, nachdem man es auf ein RAID 1 kopiert hat, obwohl die '''/etc/fstab'''[9] angepasst, die [:GRUB_2/Konfiguration#Standardeintraege-in-die-grub-cfg:grub.cfg] und die [#mdadm-conf mdadm.conf] korrekt erscheinen, sowie das [#initramfs initramfs] aktualisiert wurde, kann es helfen, GRUB 2 wie unter [:GRUB_2/Reparatur#Root-Directory-Methode:] beschrieben erneut zu installieren. Amerkung: Auf die Art der Partitionstabelle MPT & GPT achten! == RAID startet nicht == Device or resource busy[[BR]] Falls beim Erstellen eines RAIDs die Meldung {{{ mdadm: Cannot open /dev/sdXY: Device or resource busy}}} erscheint 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. Sollte wider Erwarten ein RAID beim Booten nicht erkannt werden, so kann man mit der Datei [#mdadm-conf mdadm.conf] der automatischen Erkennung auf die Sprünge helfen. 1. Zuerst aktiviert und startet man alle RAIDs manuell, damit sie vom Kernel erkannt werden. 1. Dann erstellt man eine neue [#Anlegen-einer-eigenen-mdadm-conf Konfigurations-Datei]. Hier muss man unterscheiden, ob man Partitionen oder ganze Platten für das RAID verwendet hat. 1. Nun aktualisiert man die [#mdadm-conf mdadm.conf] um die neuen Arrays, z.B.: * Partitionen:{{{#!vorlage Befehl sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf}}} * ganze Platten:{{{#!vorlage Befehl sudo mdadm --examine --scan --config=/etc/mdadm/mdadm.conf >> /etc/mdadm/mdadm.conf}}} = Begriffe = == RAID-Level == [#Anker #raidtab] Die Angabe des Speicherplatzes im RAID: ''k'' = Kapazität je Partition; ''n'' = Anzahl der verwendeten Partitionen. ||<-5 rowclass="titel"> Auswahl von RAID-Typen im Überblick || ||Typ ||<: cellstyle="width: 10%"> mind. Partitionen ||<:> Speicher-[[BR]]platz || Vorteil || Bemerkung || ||<)> 0 ||<:> 2 ||<:cellstyle="width: 5%">k*n || Geschwindigkeit (Lesen & Schreiben), Plattenplatz || Keine Partition darf ausfallen, deshalb ein Zweck des RAID '''nicht erreicht''' - Reisverschlussverfahren || ||<)> 1 ||<:> 2 ||<:>k || Ausfallsicherheit, Geschwindigkeit (Lesen) || Alle bis auf eine Partition dürfen ausfallen - Spiegelung || ||<)> 5 ||<:> 3 ||<:>k*(n-1) || Plattenplatz, Ausfallsicherheit, Geschwindigkeit (Lesen) || Eine Partition darf ausfallen - Striping & Parität|| ||<)> 6 ||<:> 4 ||<:>k*(n-2) || Plattenplatz, bessere Ausfallsicherheit als RAID 5, Geschwindigkeit (Lesen) || Zwei Partitionen dürfen ausfallen - Striping & doppelte Parität || ||<)> 10 ||<:> 4 ||<:> || Sicherheit und gesteigerte Schreib-/Lesegeschwindigkeit. || Kombination aus RAID 0 über mehrere RAID 1 || || <-5 RAID unterstützt auch unbenutzte Reservelaufwerke, sog. [wikipedia:RAID#Hot-Spare-Laufwerk:Hot-Spares]. Dabei werden vorab Partitionen bekannt gegeben, die beim Ausfall eines Laufwerks innerhalb des RAID-Verbundes durch das Reservelaufwerk redundant ersetzt werden.|| == Alignment == = Links = * [http://linux.die.net/man/8/mdadm Manpage]{en} zu '''mdadm''' * [http://linux.die.net/man/5/mdadm.conf Manpage]{en} zu '''mdadm.conf''' * [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 * [http://busybox.net/~aldot/mkfs_stride.html RAID Stride Calculator] Webseite zur Berechnung der Stride-Parameter # tag: Hardware, Server, RAID