Software-RAID
Fehlerhafte Anleitung
Diese Anleitung ist fehlerhaft. Wenn du weißt, wie du sie ausbessern kannst, nimm dir bitte die Zeit und bessere sie aus.
Anmerkung: 1. --backup-file falsch verstanden. 2. in /proc sollten keine Dateien angelegt werden. 3. Einzelne devices sollten nur in Ausnahmefällen in mdadm.conf angegeben werden
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Ein RAID (Redundant Array of Independent Disks) dient dazu, ein logisches Laufwerk redundant auf mehrere physikalische Festplatten zu verteilen und dadurch einen schnelleren Datenzugriff und/oder eine erhöhte Verfügbarkeit des Systems im Falle eines Festplattendefektes 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.
Achtung!
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¶
Software-RAID ist in Ubuntu zwar installier- und verwendbar, man sollte sich aber bewusst sein, dass die Ubuntu-Anpassungen am mdadm Paket viele bekannte Fehler 🇬🇧 enthalten, die keinen stabilen Betrieb erlauben.
Es wird angeraten, die teilnehmenden Partitionen auf verschiedenen Festplatten anzulegen. Zudem sollten die Partitionen alle die gleiche Größe haben.
Um das komplette System zu einem RAID-Verbund zusammenzufassen, muss es mit der Alternate-CD aufgesetzt werden. Die Alternate-CD unterstützt bereits bei der Installation das Erstellen eines RAID (0, 1, 5, 6 & 10). Dies findet man unter dem Punkt: "Partitionieren". Ab Ubuntu 12.10 ist die Alternate-CD nur noch bei Lubuntu verfügbar.
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 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 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.
Achtung!
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.
RAID-Typen¶
Die Angabe des Speicherplatzes im RAID: k = Kapazität je Partition; n = Anzahl der verwendeten Partitionen.
Auswahl von RAID-Typen im Überblick | ||||
Typ | mind. Partitionen | Speicher- platz | Vorteil | Bemerkung |
0 | 2 | 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 | |
RAID unterstützt auch unbenutzte Reservelaufwerke, sog. Hot-Spares. Dabei werden vorab Partitionen bekannt gegeben, die beim Ausfall eines Laufwerks innerhalb des RAID-Verbundes durch das Reservelaufwerk redundant ersetzt werden. |
Installation¶
Folgendes Paket muss installiert[3] werden, um ein Software-RAID erstellen zu können:
mdadm
Befehl zum Installieren der Pakete:
sudo apt-get install mdadm
Oder mit apturl installieren, Link: apt://mdadm
Syntax¶
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 Modus und Optionen befindet sich in der Manpage zu mdadm.
mdadm OPTIONEN
Syntax-Übersicht einiger ausgewählter Modi | |||
Nr. | Syntax | Schlüsselwort | Kurzbeschreibung |
1 | mdadm --assemble MD-DEVICE OPTION DEVICE | --assemble | Assembliert das Array mit den angegebenen Festplatten/Partitionen |
1.1 | mdadm --assemble --scan MD-DEVICE OPTION | Assembliert das angegebene Array neu. | |
1.2 | mdadm --assemble --scan OPTION | Assembliert die in der mdadm.conf mit DEVICE hinterlegten Partitionen | |
2. | mdadm --create MD-DEVICE OPTION DEVICE | --create | Anlegen/Definieren eines neues Arrays |
3. | mdadm --grow OPTION MD-DEVICE | --grow | Vergrößern/Verkleinern eines bestehenden Arrays |
4. | mdadm --monitor DEVICE OPTIONS... DEVICES... | --monitor | Monitoring von einem oder allen md-devices, inkl. Reaktion auf Status-Veränderungen |
5. | mdadm --manage DEVICE OPTIONS... DEVICES... | --manage | Management von md-devices und/oder Partitionen |
6. | mdadm OPTION DEVICE | Sonstige Aktionen | |
Legende: MD-DEVICE [4] beschreibt die RAID-Arrays und DEVICE die am Array teilnehmenden Festplatten/Partitionen[5] (siehe auch: mdadm.conf) |
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 Manpage zu mdadm.
Auswahl einiger Optionen mit dem zugeordneten 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 | |
Bei einem Standard-Ubuntu hat die Option --auto-detect keine Auswirkungen. Soll diese Option genutzt werden, muss sie manuell in den Kernel kompilliert werden. | |||
mdadm.conf¶
Die Neuanlage, das Assemblieren, das Monitoring ... und die Verwaltung der Arrays wird u.a. durch die mdadm.conf gesteuert. mdadm sucht danach in der Reihenfolge: --config=
-Option. /etc/mdadm.conf, /etc/mdadm/mdadm.conf bzw. keine Konfigurationsdatei vorhanden. Man kann sich eine Muster-Konfigurationsdatei aus der /usr/share/mdadm/mkconf erstellen, oder legt sie sich selbst, entsprechend den eigenen Vorgaben, neu an. Eine ausführliche Beschreibung bietet die Manpage zu der mdadm.conf.
Der Aufbau gliedert sich in Schlüsselworte und eine Reihe von Parametern, die durch "white spaces" voneinander getrennt werden.
Auswahl einiger Definitionen der mdadm.conf | |
Schlüsselwort | Beschreibung |
DEVICE | Beschreibt die am RAID teilnehmenden Festplatten/Partitionen, dabei können Wildcards gemäß dem "Globing" genutzt werden. Die Angabe von partitions bewirk, dass alle z.Zt. angeschlossenen Festplatten/Partitionen lt. /proc/partitions zum Aufbau der Arrays herangezogen werden. |
MAILADDR | Eine E-mail-Adresse, an die Veränderungen am RAID gemeldet werden - z.B. bei --monitor (nur 1x eintragen) |
MAILFROM | Eine E-mail-Absenderabgabe (nur 1x eintragen) |
PROGRAM | Ein Programm, das z.B. nach einem --monitor ausgefürt werden soll. Es werden 2 bis 3 Parameter übergeben: der Event, das md-Device und evtl. das dazugehörige, weitere Device. (nur 1x eintragen) |
ARRAY | Alle am RAID teilnehmenden Array-Einträge - diese Einträge kommen mehrfach, je Array, vor |
Muster einer mdadm.conf:
DEVICE /dev/sd[bcdjkl]1 DEVICE /dev/hda1 /dev/hdb1 # /dev/md0 is known by it's UID. ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371 # /dev/md1 contains all devices with a minor number of # 1 in the superblock. ARRAY /dev/md1 superminor=1 # /dev/md2 is made from precisey these two devices ARRAY /dev/md2 devices=/dev/hda1,/dev/hda2 # /dev/md4 and /dev/md5 are a spare-group and spares # can be moved between them ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1 ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1 # /dev/md/home is created if need to be a partitionable md array # any spare device number is allocated. ARRAY /dev/md/home UUID=9187a482:5dde19d9:eea3cc4a:d646ab8b MAILADDR root@mydomain.tld PROGRAM /usr/sbin/handle-mdadm-events
Anlegen eines RAID¶
Hinweis:
Die Bezeichnungen[4] sde bis sdh/sdk für Festplatten und md0/md1 für die RAIDs müssen auf die eigenen Gegebenheiten abgeändert werden.
Bei der Nutzung von ganzen Festplatten (ohne Partitionen) muss jeweils die Partitionsnummer bei den Bezeichnungen weg gelassen werden.
Da die Vergabe der Devices für Festplatten /dev/sdX sich auch ändern kann, kann man, um ein defektes Raid zu vermeiden auch die eindeutige ID der Festplatte, zu finden unter /dev/disk/by-id/... angeben.
Das gleiche gilt auch für Partitionen, wobei man hier für die entsprechende Partition den Pfad /dev/disk/by-uuid/... angeben muss.
Vorbereitung¶
Achtung!
Alle Veränderungen an den Festplatten löschen die vorherigen Inhalte. Es ist daher dringend angeraten eine Datensicherung durchzuführen.
Informationen über die angeschlossenen Festplatten und Partitionen[5] bereit legen.
Bei Nutzung von Partitionen:
Partitionierung[6] der Festplatten mit jeweils 1 Partition:
Die Partitionen sollten immer die gleiche Größe (Anzahl der Sektoren) haben.
Zusätzlich sollte man die Raidpartition immer einige MB (4 sollten reichen (8192 Sektoren bei einer Sektorengröße von 512)) kleiner als die gesamte Festplatte lassen, da bei einem Festplattenwechsel möglicherweise nichtmehr der gleiche Plattentyp verfügbar ist und viele Festplatten sich trotz gleicher Kapazitätsangabe um einige Blöcke unterscheiden. Nichts ist ärgerlicher als wenn man nach einem Plattendefekt ohne Ausfallsicherheit das Raid verkleinern muss.
Konfiguration¶
Anlegen einer eigenen mdadm.conf¶
Rootrechte[2] erlangen
Definition der teilnehmenden Datenträger:
bei kompletten Festplatten ohne die Partitionsnummern, z.B:
DEVICE /dev/sd[efgh] /dev/sgk
bei Nutzung von Partitionen mit den Partitionsnummern, z.B:
DEVICE /dev/sd[efgh]1 /dev/sgk1
Mail-Empfänger (nur 1 mal)
Mail-Absender (nur 1 mal)
Eigenes Script in /usr/bin/ hinterlegt (nur 1 mal)
Rootrechte verwerfen
sudo -i echo 'DEVICE /dev/sd[efgh]1 /dev/sgk1' >/etc/mdadm/mdadm.conf echo 'MAILADDR user@example.com' >>/etc/mdadm/mdadm.conf echo 'MAILFROM raid@example.com' >>/etc/mdadm/mdadm.conf echo 'PROGRAM /usr/bin/usr/bin/raid-problem.sh' >>/etc/mdadm/mdadm.conf exit
Um die E-Mail-Benachrichtigung bzw. die Ausführung des Programms zu testen, führt man ein :
sudo mdadm --monitor --test /dev/md0
aus. Wichtig dabei ist, dass in der Datei /etc/default/mdadm die Optionen "AUTOCHECK
" und "START_DAEMON
" auf "true
" eingestellt sind.
Virtuelles Laufwerk¶
Nun wird das "virtuelle" Laufwerk mit den dazugehörigen Partitionen und dem eigentlichen Dateisystem[7] erzeugt. Mit einem
mdadm --query /dev/sde1
kann man überprüfen, ob die Partition bereits ein md
-Device ist bzw. ob es zu einem Array gehört(e).
Superblock löschen¶
Wurden die Partition bereits einmal für ein RAID genutzt, dann gibt mdadm bei einem --create
zur Warnung das alte RAID level und das zugehörige Datum aus. Sollen die Partitionen dennoch für das neue Array genutzt werden, so muss vorher der RAID-Superblock gelöscht werden:
sudo mdadm --zero-superblock /dev/sde1 sudo mdadm --zero-superblock /dev/sdg1
RAID erzeugen¶
z.B.: Software-RAID 0 mit 2 Partitionen:
sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sde1 /dev/sdf1
z.B.: Software-RAID 1 mit 2 Partitionen:
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sde1 /dev/sdf1
z.B.: Software-RAID 5 mit 3 Partitionen:
sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sde1 /dev/sdf1 /dev/sdg1
z.B.: Software-RAID 6 mit 4 Partitionen:
sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1
RAID formatieren¶
Nun formatiert man das neu angelegte md0 mit dem gewünschten Dateisystem[7], z.B. ext4:
sudo mkfs.ext4 /dev/md0
RAID mounten¶
Das RAID muss noch in die Verzeichnisstruktur eingebunden[8] werden. Der korrelierende Eintrag dazu in der /etc/fstab[9] folgt der selben Syntax wie der einer normalen Partition und könnte beispielsweise so aussehen:
UUID=c4677279:2d8a904a:01f9e43d:ac30fbff /media/daten ext4 defaults 0 0
Hinweis: Alle an einem RAID teilnehmenden Festplatten/Partitionen haben die gleiche UUID, desshalb kann man diese anstatt eines /dev/md0 nutzen.
Sollten hier Probleme auftreten, ggf. die UUID des ext4-Dateisystems benutzen:
tune2fs -l /dev/mdX | grep UUID
mdadm.conf aktualisieren¶
Nun werden die Definitionen der angelegten Arrays abgerufen:
sudo mdadm --detail --scan
Musterausgabe eines Scan mit einem Array:
ARRAY /dev/md0 level=raid4 num-devices=3 UUID=c4677279:2d8a904a:01f9e43d:ac30fbff
Für jedes gefundene Array wird nun an die mdadm.conf eine Zeile, bestehend aus dem Schlüsselwort ARRAY
, dem Gerätedateinamen (hier /dev/md0) und der UUID (hier UUID=c4677279:2d8a904a:01f9e43d:ac30fbff
), angehängt:
ARRAY /dev/md0 UUID=c4677279:2d8a904a:01f9e43d:ac30fbff
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
cat /proc/mdstat
überwachen. Ausführliche Informationen zu einem RAID-Device liefert:
sudo mdadm --detail /dev/md0
Soll von dem neuen RAID-Verbund gebootet werden (Root-Dateisystem), dann muss noch der Bootloader installiert und die mdadm.conf in das initramfs übernommen werden.
Defektes RAID¶
Ein funktionierendes, intaktes Array liefert bei den 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:
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: <none>
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:
RAID stoppen:
sudo mdadm --stop /dev/md0
Das RAID muss manuell wieder zusammengefügt werden, dabei ist es wichtig, die letzte funktionierende Konfiguration zu verwenden. Bei dem 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:
sudo mdadm --assemble /dev/md0 /dev/sde1 /dev/sdf1 --force
.
Die dritte Partition kann nun mit
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 Übersicht eingesehen werden bzw. wird, sofern eingestellt, mittels E-mail/Programm gemeldet.
Achtung!
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.
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 mds 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.:
sudo mdadm /dev/md0 --remove /dev/sde1
Neue Festplatte¶
Die neue Festplatte mit Partitionsnutzung muss zunächst genauso wie die anderen im RAID 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 sfdisk für MPT bzw. mit 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:
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):
sgdisk -R /dev/sdk /dev/sde
Danach gibt man bei GPT der neuen Festplatte noch eine neue zufällige, neue GUID
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
sudo sfdisk -R /dev/sgi
oder
sudo partprobe -s /dev/sdk
ohne einen System-Neustart durchzuführen, machen.
Nun kann die neue Festplatte wieder in die Arrays eingebunden werden
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 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: <none>
Soll von dem neuen Raid-Verbund gebootet werden (Root-Dateisystem), dann muss noch der Bootloader installiert und das 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 formatiert sein.
Achtung!
Das Vergrößern ("reshaping") eines RAID-Systems kann, je nach Größe, einige Stunden oder sogar Tage dauern. Die Aktion wird im Hintergrund ausgeführt. Es sollte also sichergestellt sein, dass das "reshaping" beendet ist, bevor man den Computer ausschaltet oder neu startet, da sonst alle Daten des RAID verlorengehen können.
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 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:
Sicherungsdatei anlegen:
sudo cp /proc/sys/dev/raid/speed_limit_min /proc/sys/dev/raid/speed_limit_min.old
Minimieren der Geschwindigkeit:
sudo -i echo 100000 >/proc/sys/dev/raid/speed_limit_min exit
Neue Festplatte/Partition dem vorhandenen Array hinzufügen:
sudo mdadm --add /dev/md0 /dev/sdk1
Die Partition wird zunächst nur als 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.
Das RAID neu aufbauen, um somit den neuen Speicherplatz nutzen zu können:
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.Das Dateisystem muss noch erweitert werden, damit der neu entstandene Speicherplatz genutzt werden kann. z.B. mit:
sudo resize2fs /dev/md0 # für ext-Dateisysteme
Der überprüfung des Dateisystems (fsck) sollte man stattgeben, auch wenn es ein wenig Zeit in Anspruch nimmt.
Die mdadm.conf sollte noch auf den aktuellen Stand gebracht werden (evtl. alte Einträge löschen).
Der Status lässt sich wieder jederzeit einsehen.
Das Limit sollte nach erfolgreichem "reshaping" wieder zurückgesetzt werden:
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 installiert und das 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
mdadm
Befehl zum Installieren der Pakete:
sudo apt-get install mdadm
Oder mit apturl installieren, Link: apt://mdadm
installiert[2] werden.
Achtung!
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:
RAID aus der mdadm.conf neu assemblieren
sudo mdadm --assemble --scan
Hat man mehrere Software-RAIDs und möchte ein bestimmtes RAID zusammenführen, kann man dies durch die Angabe der UUID des entsprechenden RAIDs tun:
sudo mdadm --assemble --scan --uuid=6c926c35:380d7ab2:3603cf0e:ecfa67b9
oder durch die Angabe der einzelnen Partitionen
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 installiert und das initramfs aktualisiert werden.
Live System¶
Um auf einen RAID-Verbund mittels einer Live-CD bzw. eines Live-USB zuzugreifen muss das Programmpaket mdadm mit
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
sudo mdadm --assemble --scan
alle gefundenen RAID-Verbunde aktiviert. Mit einem
cat /proc/mdstat
kann man dann wieder die gefundenen RAID-Verbunde anzeigen. Nun wird das RAID noch mit
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):
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:
Aus sde1, sdf1 & sdg1 wird ein RAID 5 erstellt
Aus sdh1, sdj1 & sdk1 wird ebenfalls ein RAID 5 erstellt
Aus den beiden RAID 5 wird dann ein RAID 1 erstellt.
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:
Stoppen des RAID-Verbundes:
sudo umount /dev/md0 mdadm --stop /dev/md0
Mit einem Editor in der mdadm.conf alle Array-Angaben löschen.
Evtl. noch den RAID-Superblock der entfernten Partitionen löschen.
Die Partitions-ID wieder auf normale Linux-ID ändern, z.B. bei MPT auf 83 oder bei GPT auf 8300.
In der /etc/fstab[9] die aufgelösten RAIDs entnehmen.
Evtl. noch verbliebene Arrays an die mdadm.conf neu 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 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: 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 Boot-Partitionen installiert werden. Bei z.B. einer Installation mit GPT & BIOS bricht die Installation von 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 Root-Directory-, die Chroot- oder die Setup-Methode.
initramfs¶
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
Sofern die entsprechenden Module, md bzw. raid0, raid1, noch nicht in der /etc/initramfs-tools/modules aktiviert wurden, muss dies noch erfolgen:
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
sudo update-initramfs -u -k all
aktualisiert werden.
Fehlermeldungen¶
Bootprobleme¶
GRUB 2: unknown Filesystem:
Falls das System nicht bootet, nachdem man es auf ein RAID 1 kopiert hat, obwohl die /etc/fstab[9] angepasst, die grub.cfg und die mdadm.conf korrekt erscheinen, sowie das initramfs aktualisiert wurde, kann es helfen, GRUB 2 wie unter GRUB 2/Reparatur (Abschnitt „Root-Directory-Methode“) beschrieben erneut zu installieren. Amerkung: Auf die Art der Partitionstabelle MPT & GPT achten!
RAID startet nicht¶
Device or resource busy
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
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 der automatischen Erkennung auf die Sprünge helfen.
Zuerst aktiviert und startet man alle RAIDs manuell, damit sie vom Kernel erkannt werden.
Dann erstellt man eine neue Konfigurations-Datei. Hier muss man unterscheiden, ob man Partitionen oder ganze Platten für das RAID verwendet hat.
Nun aktualisiert man die mdadm.conf um die neuen Arrays, z.B.:
Partitionen:
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
ganze Platten:
sudo mdadm --examine --scan --config=/etc/mdadm/mdadm.conf >> /etc/mdadm/mdadm.conf
Links¶
Manpage🇬🇧 zu mdadm
Manpage🇬🇧 zu mdadm.conf
Linux Raid 🇬🇧 - Dokumentation im Wiki von Kernel.org
Quick HOWTO - Linux Software RAID 🇬🇧 - ein weiteres RAID-Howto