[[Vorlage(Überarbeitung, 17.09.2013, Software-RAID, Nonymus)]] [[Vorlage(Getestet raring, precise)]] [[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-Controller. = 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 und 10. Details zu den einzelnen Typen finden sich im Abschnitt [#RAID-Level RAID-Level]. * Soll von einem neuen RAID-Verbund gebootet werden (Root-Dateisystem) sollte zunächst der Abschnitt [#Bootloader Bootloader] gelesen werden. == RAID und Backup === Ein RAID ersetzt kein Backup! Auch wenn es verlockend scheint, ein RAID 1 mit externer USB-Festplatte aufzusetzen um eine automatische Sicherung zu erhalten, ist dies __kein Backup__: * Das Entfernen der externen Festplatte führt immer dazu, dass sich das RAID im Fehlerzustand (degraded) befindet. Beim Neuanschluss muss die interne Festplatte jedesmal komplett gelesen werden, um die externe Platte neu zu synchronisieren. * Ein RAID schützt '''ausschließlich''' vor Datenverlust durch Plattenausfall. Datenverlust, der durch Fehler des Betriebssystem, des Dateisystems oder durch die benutzen Programmen entsteht, wird automatisch auf alle Laufwerke synchronisiert, so dass das vermeintliche Backup automatisch mit fehlerhaften Daten überschrieben wird. == 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, das 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 }}} 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" }}} Um bei Ausfällen per E-Mail benachrichtigt zu werden muss in der Zeile {{{ MAILADDR root }}} `root` durch die gewünschte E-Mail-Adresse ersetzt werden. Dafür muss der E-Mail-Versand durch das System eingerichtet sein, z.B. via [:Postfix:] als Sattelitensystem. Über die Konfigurationsdatei können sehr viele Details der RAIDs angepasst werden, näheres liefert die [Manpage] von '''mdadm.conf'''. Generell gilt bei neu aufgesetzten RAIDs allerdings: Je weniger, desto besser. In den neueren Superblock-Formaten (neuer als 0.90) werden alle wichtigen Informationen direkt auf den beteiligten Partitionen gespeichert, auch wenn nachträglich Änderungen vorgenommen werden. Andererseits haben die Parameter aus der '''mdadm.conf''' Vorrang. So ist es z.B. möglich, alle am RAID beteiligten Partitionen in der Datei anzugeben. Ändert sich jedoch die Reihenfolge der Festplatten (z.B. bei Austausch des Controllers, Umstecken der Kabel, Anschließen einer USB-Festplatte etc.) ließe sich das RAID nicht mehr Starten, obwohl in den Superblöcken die richtigen Positionen der Laufwerk (unabhängig von den Buchstabenbezeichnungen) gespeichert sind, bevor nicht die gegenläufige Angabe in der '''mdadm.conf''' geändert oder explizit übergangen wird. Damit die Konfiguration beim Booten verfügbar ist muss schließlich noch die Initrd aktualisiert werden: {{{#!vorlage Befehl sudo update-initramfs -u -k all }}} = Wartung = == RAID überwachen == Eine Kurzzusammenfassung für alle RAIDs erhält man mittels {{{#!vorlage befehl cat /proc/mdstat }}} Eine Beispielausgabe eines Systems mit mehreren RAID-Verbunden ohne Ausfälle: {{{ Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [multipath] [raid0] [raid10] md1 : active raid1 sde5[0] sdf5[1] 195114936 blocks super 1.2 [2/2] [UU] md0 : active raid1 sdf1[1] sde1[0] 242676 blocks super 1.2 [2/2] [UU] md2 : active raid6 sdg1[4] sdh1[5] sdi1[6] sdj1[7] sda1[0] sdd1[3] sdb1[1] sdc1[2] 2930304000 blocks super 1.2 level 6, 512k chunk, algorithm 2 [8/8] [UUUUUUUU] }}} Das Beispiel zeigt zwei RAID 1 (md0 und md1) mit je zwei Partitionen und ein RAID 6 (md2) mit 8 Partitionen. In der jeweils zweiten Zeile wird am Ende in eckigen Klammern der Zustand der einzelnen Paritionen angezeigt, wobei ein `U` bedeutet, dass das jeweilige Gerät in Ordnung ist. Ausführliche Informationen zu einem RAID-Device liefert: {{{#!vorlage Befehl sudo mdadm --detail /dev/md0 }}} == Hotspare hinzufügen == Ein RAID kann Ersatzplatten vorhalten und diese beim Ausfall einer anderen Festplatte automatisch als Ersatz nutzen. Solche Platten werden als Hotspares, oft auch einfach nur Spare, bezeichnet. Um eine Platte als Spare zu nutzen muss diese zunächst entsprechend [#Raid-anlegen partitioniert] werden. Danach kann diese zum Verbund hinzugefügt werden, hier am Beispiel des eingänglichen RAID 5: {{{#!vorlage befehl mdadm /dev/md0 --add /dev/sdi1 }}} == Festplattenausfall == === Details ermitteln === Dieses Beispiel zeigt eine ausgefallene Platte in einem RAID 6. '''Muster eines defekten RAID-Arrays:''' [[BR]] {{{ Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [multipath] [raid0] [raid10] md2 : active raid6 sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdd1[3] sda1[0] sdb1[1] sdc1[2] 3418688000 blocks super 1.2 level 6, 512k chunk, algorithm 2 [9/8] [UUUUUUUU_] unused devices: }}} In diesem Fall wurde das fehlerhafte Gerät bereits automatisch enfternt. Genauere Details, u.a. den Namen des defekten Geräts kann mit '''mdadm''' ermittelt werden. {{{#!vorlage befehl sudo mdadm --detail /dev/md2 }}} === Festplatte wechseln === {{{#!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. }}} Ist das defekte Gerät (hier im Beispiel '''/dev/sdk1''') ermittelt kann die entsprechende Festplatte ausgetauscht werden: 1. Falls der Kernel das Gerät noch nicht aus dem Verbund entfernt hat (d.h. es wird in '''mdadm --detail''' noch aufgeführt), muss es zunächst aus dem Verbund entfernt werden:{{{#!vorlage befehl sudo mdadm /dev/md2 --remove /dev/sdk1}}} 1. Nun kann die entsprechende Platte gewechselt werden. Ist eine entsprechende Austauschplatte eingebaut muss diese zunächst partitioniert werden. Die neue Partition muss mindestens die gleiche Anzahl an Sektoren aufweisen, wie die bereits genutzten Partitionen. Von einer bestehenden Platte erhält man die Sektorenzahl der Partitionen (hier am Beispiel von '''/dev/sda''') mittels: {{{#!vorlage befehl sudo parted /dev/sda u s print }}} 1. Ist die neue Platte entsprechend partitioniert, wird die neue Partition zum RAID-Gerät hinzugefügt (hier am Beispielaustausch von '''/dev/sdk1''' in '''/dev/md2'''):{{{#!vorlage befehl sudo mdadm /dev/md2 --add /dev/sdk1}}} Im Hintergrund beginnt nun ein Rebuild, aus den noch vorhandenen Partitionen wird also der Inhalt für die neue Partition berechnet und geschrieben. Je nach RAID-Level und Größe dauert ein Rebuild mehrere Stunden bis Tage dauern. Das System darf währenddessen neu gestartet oder heruntergefahren werden. Teilweise lässt sich der Vorgang beschleunigen, siehe dazu Abschnitt [#TODO: Passender Anker] {{{#!vorlage Hinweis Wurden Partitionen einer Platte 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 müssen diese mit einem `mdadm /dev/mdX --fail /dev/sdXY` alle einzeln in den Modus [U_] vesetzt werden. }}} == 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 oft __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-anlegen o.g. Beispiel], ein RAID 5 mit 4 Partitionen, bei dem zwei Festplatte 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 weiteren Partitionen können nun mit{{{#!vorlage befehl sudo mdadm --re-add /dev/md0 /dev/sdg1 /dev/sdh1 }}} wieder in den Verbund aufgenommen 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. Das RAID darf während des Vorgangs [#RAID-mounten eingebunden] sein. Die Platte muss zunächst wie oben beschrieben als [#Hotspare-hinzufuegen Hostspare] hinzugefügt werden. Danach kann das RAID auf dieses Laufwerk erweitert werden: 1. Das RAID neu aufbauen, um somit den neuen Speicherplatz nutzen zu können: {{{#!vorlage Befehl sudo mdadm --grow --raid-devices=5 /dev/md0 --backup-file=/tmp/md0.bak}}} Die Option `raid-devices` gibt dabei die Anzahl der Geräte an, aus denen das RAID nach der Erweiterung bestehen soll. In der mittels `backup-file` angegebenen Datei werden kritische Bereiche (Typischerweise einige wenige MiB) gesichert. Falls das System während der Erweiterung abstürzt kann die Erweiterung später mittels {{{#!vorlage befehl sudo mdadm /dev/md0 --continue --backup-file=/tmp/md0.bak}}} fortgesetzt werden. Die Sicherungsdatei darf '''nicht''' auf dem zu erweiternden RAID liegen! Die Verwendung von `backup-file` ist zwar nicht zwingend notwendig, ist aber stark anzuraten. 1. Das Dateisystem muss noch [:Dateisystemgröße_ändern:erweitert] werden, damit der neu entstandene Speicherplatz genutzt werden kann. Das Dateisystem sollte dabei, wenn möglich, nicht eingehangen sein. Bei [:ext:] Dateisystemen muss außerdem vorher eine Überprüfung durchgeführt werden. Am Beispiel [:ext#ext4:ext4] {{{#!vorlage Befehl sudo umount /dev/md0 # Das Dateisystem aushängen sudo fsck.ext4 -f /dev/md0 # Die Prüfung erzwingen, selbst wenn vor Kurzem geprüft wurde sudo resize2fs /dev/md0 # Das Dateisystem auf Maximalgröße erweitern sudo mount /dev/md0 # Das Dateisystem wieder einhängen}}} 1. Die [#mdadm-conf-aktualisieren mdadm.conf] sollte noch auf den aktuellen Stand gebracht werden (evtl. alte Einträge löschen). 1. Der Status lässt sich wieder jederzeit [#RAID-ueberwachen einsehen]. = Problembehebungen = == 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. Dabei muss auf die Art der Partitionstabelle geachtet werden. Die obige Anleitung nutzt GPT-Partitionstabellen. == RAID startet nicht == 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 zunächst der alte Verbund [#RAID-aufloesen aufgelöst] werden. = Komplexe Aufgaben = Dieser Abschnitt fasst komplexere Szenarien und Methoden zusammen, die im normalen Betrieb nicht auftreten, aber für Nutzer mit speziellen Anforderungen nützlich sein können. == 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. Spätestens bei einem Neustart sollten bestehenden Arrays automatisch erkannt und gestartet werden. Falls dies nicht funktioniert, weil z.B. Arrays mit alten Superblock-Versionen vorhanden sind kann man dies auch per Hand aktivieren: {{{#!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 nutzbar machen: * RAID aus den gefundenen Superblöcken neu assemblieren{{{#!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}}}. * 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 [#mdadm-conf-aktualisieren 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. 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. == Kombinierte RAIDs == Wem die oben genannten Möglichkeiten nicht ausreichen, der kann auch nach eigenen Anforderungen verschiedenen RAID-Arten kombinieren. So ist es zum Beispiele möglich, zwei RAID 5 zu spiegeln, also als RAID 1 zu betreiben: 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 }}} Ein solcher Verbund würde als RAID 51 bezeichnet werden, also ein RAID 1 über mehrere RAID 5. Im Allgemeinen sind solche exotischen Kombinationen zwar selten sinnvoll, aber prinzipiell sind beliebige Kombinationen möglich. Eine sinnvolle Kombination ist ein RAID 0 über mehrere RAID 1, also ein RAID 10. Dies wird jedoch von '''mdadm''' direkt als RAID-Level unterstützt und muss nicht wir hier beschrieben per Hand angelegt werden. 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 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 sudo mdadm --stop /dev/md0}}} 1. In der '''/etc/fstab'''[9] die aufgelösten RAIDs entfernen. 1. Mit einem Editor in der [#mdadm-conf-aktualisieren mdadm.conf] die Array-Angaben löschen. 1. Den Superblock der entfernten Partitionen löschen, hier am Beispiel von '''sde1''' und '''sdf1''':{{{#!vorlage befehle sudp mdadm --zero-superblock /dev/sde1 /dev/sdf1}}} 1. Die Partitions-ID wieder auf normale Linux-ID ändern (bei MBR), beziehungsweise das RAID Flag der Partition ausschalten (bei GPT). 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. * '''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:''' 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!}}} Damit die Boot-Partitionen durch die `initrd` auch einwandfrei gemountet werden, sollte nach Änderung die [#mdadm-conf-aktualisieren mdadm.conf und initrd aktualisiert werden]. == USB und RAID == 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. RAID 1 (Spiegel) mit mehreren Partitionen auf verschiedenen USB Festplatten ist prinzipiell kein Problem, auch wenn davon im Allgemeinen abzuraten ist (siehe [#RAID-und-Backup RAID und Backup]). Wer trotzdem sicher ist, dass in seinem Fall ein RAID mit USB-Geräten sinnvoll ist sollte noch folgendes beachten: Bei USB-Festplatten muss man 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. = Begriffe und Details = == RAID-Level == Eine ÜBersicht über die gebräuchlichen und unterstützten RAID-Level. Bei der Angabe des Speicherplatzes im RAID bezeichnet ''k'' die Kapazität je Partition und ''n'' die 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. [#Hotspare-hinzufuegen Hotspares]. Dabei werden vorab Partitionen bekannt gegeben, die beim Ausfall eines Laufwerks innerhalb des RAID-Verbundes durch das Reservelaufwerk automatisch ersetzt werden.|| == Alignment == Festplatten, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in '''Blöcke''' zusammen bevor sie gespeichert werden. Diese Blöcke haben im Allgemeinen alle unterschiedliche Größen. Ein Beispiel für das Lesen einer sehr kleinen Datei. 1. Das Dateisystem möchte einen einzelnen 4 KiB großen Block lesen 1. Das RAID muss dafür den oder die 512 KiB großen RAID-Blöcke (bei RAIDS oft `Chunks` genannt) laden, in denen der Dateisystem-Block abgelegt ist. 1. Die Festplatten müssen dafür wiederum alle 512 Byte großen Blöcke (hier meist `Sektoren` genannt) laden, die am entsprechenden RAID-Block beteiligt sind. Im Idealfall muss also das RAID nur einen 512 KiB Block laden und die Festplatten dafür 1024 Blöcke (512 KiB = 512 B * 1024). Dafür müssen diese geschachtelten Blöcke jedoch aufeinander ausgerichtet sein. Im schlechtesten Fall könnte ein Dateisystem-Block kurz vor dem Ende eines Raid-Blocks an, so dass für einen Dateisystem-Block zwei RAID-Blöcke geladen werden müssen. Analog kann könnte ein RAID-Block auch 1025 anstatt 1024 Festplatten-Blöcke belegen, falls er mitten in einem Festplatten-Block anfängt. Das Lesen eines Dateisystem-Blocks würde damit im schlechtesten Fall das Laden von 2050 Festplatten-Blöcken erfordern. Dies führt dramatischen Performance-Einbußen schon beim Lesen. Da beim Schreiben oft auch zuerst die vorherigen Daten gelesen werden müssen sind die Einbußen beim Schreiben noch stärker. Daher sollte bei der Verwendung von Blockgeräten immer auf das '''Alignment''', also die Ausrichtung der verschiedenen Block-Arten aufeinander, geachtet werden: * Der erste Dateisystem-Block eines RAID-Blocks sollte genau am Anfang des RAID-Blocks beginnen. * Ein RAID-Block sollte genau am Anfang eines Festplatten-Blocks beginnen. * Die Größe der RAID-Blöcke sollte ein ganzzahliges Vielfaches der Dateisystem-Blöcke sein. * Die Größe der RAID-Blöcke sollte ein ganzzahliges Vielfaches der Festplatten-Blöcke sein. * Partitionen sollten auf Sektorgrenzen der Festplatten ausgerichtet sein, wie im Abschnitt [#Partitionierung Partitionierung] beschrieben. * Dem Dateisystem sollten Informationen zum unterliegenden RAID [#Dateisystem bereitgestellt werden], um seine Blöcke passend auszurichten. Falls noch weitere Schichten zwischen Dateisystem und Festplatte verwendet werden, z.B. bei Verschlüsselung, muss auch bei diesen auf das Alignment geachtet werden. == MDADM == '''mdadm''' ist das Linux-Werkzeug für alle Arbeiten an Software-RAIDs. Durch die Angabe eines Schlüsselwortes wird ein bestimmter Modus eingeleitet, der für die ordnungsgemäße Verarbeitung der weiteren Optionen entscheidend ist. Eine komplette Beschreibung zu Modi und Optionen befindet sich in der [:man:Manpage] zu '''mdadm'''. {{{#!vorlage befehl mdadm OPTIONEN }}} || <-4 tablestyle="width: 100%;" rowclass="titel">Syntax-Übersicht der Modi || || Nr. || Syntax || Modus || Kurzbeschreibung || || 1 || mdadm --assemble MD-DEVICE OPTIONS DEVICES || <|3>Assemble || Assembliert das Array mit den angegebenen Festplatten/Partitionen || || 1.1 || mdadm --assemble --scan MD-DEVICE OPTIONS || Assembliert das angegebene Array neu anhand der Superblöcke || || 1.2 || mdadm --assemble --scan OPTIONS || Assembliert alle Arrays anhand der Superblöcke auf den Partitionen || || 2. || mdadm --create MD-DEVICE OPTIONS DEVICES || Build || Anlegen/Definieren eines neues Arrays || || 3. || mdadm --grow MD-DEVICE OPTIONS || Grow || Vergrößern/Verkleinern eines bestehenden Arrays || || 4. || mdadm --monitor MD-DEVICE OPTIONS DEVICES || Monitor || Monitoring von einem oder allen ''md-devices'', inkl. Reaktion auf Status-Veränderungen || || 5. || mdadm MD-DEVICE OPTIONS DEVICES || Manage || Verwaltung eines RAIDs || || 6. || mdadm OPTIONS DEVICES || Misc || Sonstige Aufgaben || || || <-3 cellstyle="border-left: none;"> Legende: `MD-DEVICES`[4] beschreibt die RAID-Arrays und `DEVICES` die am Array teilnehmenden Festplatten/Partitionen[5] || === Optionen === Neben dem einzelnen Modus gibt es eine ganze Reihe von Optionen, die unterschiedliche Funktionen bei den einzelnen Modi haben. Eine komplette Beschreibung zu Modus und Optionen befindet sich in der [:man:Manpage] zu '''mdadm'''. || <-4 tablestyle="width: 100%;" rowclass="titel">Auswahl einiger Optionen mit dem zugeordneten [#Syntax Modus], wie er in den Beispielen angewendet wird. || || Option || Beschreibung || gültig bei Modi || || `--add` || Hinzufügen weiterer Festplatten/Partitionen || 1, 6 || || `--backup-file=...` || Erzeugt eine Backup-Datei - darf nicht im Array liegen || 1, 3 || || `--detail` || Details zu den Arrays ausgeben || 6 || || `--fail` || Status eines Array verändern || 5 || || `--force` || Erzwinge die Ausführung, auch wenn es unsinnig erscheint || 1, 2, 6 || || `--help` || Ausgabe eines generellen Hilfetextes - hinter eine Option gestellt = spezielle Optionshilfe || 1, 2, 3, 4, 5, 6 || || `--level=...` || Bezeichnet den RAID-Typ || 1, 2, 3 || || `--query` || Üperprüfen ob das angegebene Device ein `md`-Device ist bzw. zu einem Array gehört(e) || 6 || || `--raid-device=...` || Anzahl der aktiven am Array teilnehmenden Festplatten/Partitionen || 1, 2 || || `--remove` || Festplatten/Partitionen die aus dem Array entnommen werden sollen || 5 || || `--stop` || Stoppen eines Arrays || 4, 5, 6 || || `--spare-device=...` || Anzahl der inaktiven (Ersatz-) Festplatten/Partitionen eines Arrays || 2, 3 || || `--test` || Testen der angegebenen Optionen || 5, 6 || || `--uuid=...` || Die [:UUID:] des Arrays || 1 || || `--verbose` || Mehr Ausgabe-Informationen erzeugen - kann 2x gesetzt werden || 4, 5, 6 || || `--zero-superblock` || Löschen des RAID-Superblocks || 6 || = 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]{en} Webseite zur Berechnung der Stride-Parameter # tag: Hardware, Server, RAID