|
|
Zeile 64: |
Zeile 64: |
| **Version 1.1: Der Superblock liegt am Anfang des Devices. | | **Version 1.1: Der Superblock liegt am Anfang des Devices. |
| **Version 1.2: Der Superblock liegt 4 KiB nach dem Beginn des Devices. | | **Version 1.2: Der Superblock liegt 4 KiB nach dem Beginn des Devices. |
|
| |
| =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.
| |
|
| |
| ==Resync und Rebuild beschleunigen==
| |
|
| |
| *Wie eingangs erläutert ermöglicht ein RAID unterbrechungsfreien Zugriff auf die gespeicherten Daten auch während eines Ausfalls.
| |
|
| |
| *Daten können also auch während eines '''Resyncs''' oder '''Rebuilds''' gelesen und geschrieben werden, wenn auch mit verringerter Geschwindigkeit.
| |
|
| |
| *Lese- und Schreibzugriffe wirken sich umgekehrt wiederum auf die Geschwindigkeit von Resnyc- und Rebuild-Vorgängen aus.
| |
|
| |
| *Die Balance zwischen Lese-/Schreib-Performance und Resync-/Rebuild-Geschwindigkeit kann über zwei (virtuelle) Dateien im proc-System gesteuert werden:
| |
|
| |
| {|class="wikitable"
| |
| |+
| |
| | Pfad|| Standardwert (in KiB/s)|| Bedeutung
| |
| |-
| |
| | /proc/sys/dev/RAID/speed_limit_min|| 1000|| Das System wird ggf. Lese- und Schreibzugriffen verlangsamen, falls die Resync-/Rebuild-Geschwindigkeit unter diesen Wert zu fallen droht.
| |
| |-
| |
| | /proc/sys/dev/RAID/speed_limit_max|| 200000|| Das System wird Rebuild und Resync höchstens mit dieser Geschwindigkeit durchführen und eventuellen Überschuss für Lese-/Schreib-Zugriffe frei halten.
| |
| |}
| |
|
| |
| *Da der Standard-Maximalwert von knapp 200 MiB/s die Leistung normaler Festplatten (mit Ausnahme von SSDs) übersteigt, wird das System effektiv immer versuchen, '''Resync''' und '''Rebuild''' so schnell wie möglich zu beenden, falls keine Lese- oder Schreibzugriffe stattfinden.
| |
|
| |
| *Falls sich Zugriffe nicht vermeiden lassen (zum Beispiel, wenn das root-Dateisystem auf dem RAID liegt) und '''Rebuild/Resync''' trotzdem Vorrang haben sollen, kann die Mindestgeschwindigkeit temporär auf einen praktisch nicht erreichbaren Wert angehoben werden:
| |
|
| |
| # su -c "echo 200000 > /proc/sys/dev/RAID/speed_limit_min"
| |
|
| |
| *Gerade im Fall des root-Dateisystems kann die damit einhergehende verringerte Lese- und Schreibgeschwindigkeit jedoch zu einem instabilem, effektiv nicht mehr nutzbaren System führen.
| |
|
| |
| *Änderung an den Standardwerten sind daher mit Vorsicht zu genießen.
| |
|
| |
| *Bei einem Neustart werden automatisch die Standardwerte wiederhergestellt.
| |
|
| |
| *Um den Wert per Hand zurückzusetzen:
| |
|
| |
| # su -c "echo 1000 > /proc/sys/dev/RAID/speed_limit_min"
| |
|
| |
| *In Einzelfällen kann das Aushängen des Dateisystems (falls möglich) den Vorgang beschleunigen.
| |
|
| |
| *Im Regelfall wird dies jedoch keinen Vorteil bringen.
| |
|
| |
| *In jedem Fall widerspricht dies natürlich dem Grundgedanken eines RAIDs, die Daten in jedem Fall verfügbar zu halten:
| |
|
| |
| # umount /dev/md0
| |
|
| |
| *Generell sollte man von diesen Möglichkeiten keine Wunder erwarten.
| |
|
| |
| *'''Resync''' und '''Rebuild''' erfordern im Allgemeinen das komplette Lesen und Neubeschreiben aller beteiligten Laufwerke und können damit maximal so schnell durchgeführt werden, wie es das langsamste, am RAID beteiligte, Laufwerk erlaubt.
| |
|
| |
| *Zeiten im Bereich von mehreren Tagen sind bei entsprechender Größe völlig normal.
| |
|
| |
| *Wenn man möchte, kann man während der Vorgänge mit watch den Fortschritt kontrollieren:
| |
|
| |
| # watch cat /proc/mdstat
| |
|
| |
| *Die Anzeige kann mit Strg + C beendet 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
| |
|
| |
| Paketliste zum Kopieren:
| |
|
| |
| # apt install mdadm
| |
|
| |
| Oder mit apturl installieren, Link:
| |
|
| |
| apt://mdadm
| |
|
| |
| *...installiert 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:
| |
|
| |
| Achtung!
| |
| 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:
| |
|
| |
| # 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:
| |
|
| |
| # mdadm --assemble --scan --uuid=6c926c35:380d7ab2:3603cf0e:ecfa67b9
| |
|
| |
| *Durch die Angabe der einzelnen Partitionen:
| |
|
| |
| # 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...
| |
|
| |
| # apt install --no-install-recommends mdadm
| |
|
| |
| *...installiert werden.
| |
|
| |
| *Die Option --no-install-recommends verhindert dabei die Installation des Mail-Server Postfix.
| |
|
| |
| *Anschließend werden mit:
| |
|
| |
| # mdadm --assemble --scan
| |
|
| |
| *alle gefundenen RAID-Verbunde aktiviert.
| |
|
| |
| *Mit dem Befehl:
| |
|
| |
| # 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. sda1 als Quelle angegeben (bei RAID 0 nicht möglich):
| |
|
| |
| # 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 Root-Directory-, die Chroot- oder die Setup-Methode.
| |
|
| |
| ==Kombinierte RAIDs==
| |
|
| |
| *Wem die oben genannten Möglichkeiten nicht ausreichen, kann auch nach eigenen Anforderungen verschiedenen RAID-Arten kombinieren.
| |
|
| |
| ===RAID51===
| |
| *So ist es zum Beispiel möglich, zwei RAID 5 zu spiegeln, also als RAID 1 zu betreiben:======
| |
| **Aus sde1, sdf1 und sdg1 wird ein RAID 5 erstellt
| |
| **Aus sdh1, sdj1 und sdk1 wird ebenfalls ein RAID 5 erstellt
| |
| **Aus den beiden RAID 5 wird dann ein RAID 1 erstellt:
| |
|
| |
| # mdadm --create --verbose /dev/md0 --level=5 --RAID-devices=3 /dev/sde1 /dev/sdf1 /def/sdg1
| |
| # mdadm --create --verbose /dev/md1 --level=5 --RAID-devices=3 /dev/sdh1 /dev/sdj1 /dev/sdk1
| |
| # 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 (je komplexer, desto fehleranfälliger sind Wartung und Reparatur), aber prinzipiell sind beliebige Kombinationen möglich.
| |
|
| |
| ===RAID10===
| |
|
| |
| *Eine sinnvolle Kombination, ein RAID 0 über mehrere RAID 1, also ein RAID 10, wird direkt von mdadm als RAID-Level unterstützt und muss nicht wie hier beschrieben per Hand angelegt werden.
| |
|
| |
| *Alternativ verwendet man auch gerne mehrere RAIDs in Zusammenarbeit mit LVM, da dieses einen sehr flexiblen Umgang mit RAID-Verbünden 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 Ressourcen wieder freizugeben, geht man wie folgt vor:
| |
|
| |
| *Stoppen des RAID-Verbundes:
| |
|
| |
| # umount /dev/md0
| |
| # mdadm --stop /dev/md0
| |
|
| |
| *In der /etc/fstab die aufgelösten RAIDs entfernen.
| |
|
| |
| *Mit einem Editor in der mdadm.conf die Array-Angaben löschen.
| |
|
| |
| *Den Superblock der entfernten Partitionen löschen, hier am Beispiel von sde1 und sdf1:
| |
|
| |
| # mdadm --zero-superblock /dev/sde1 /dev/sdf1
| |
|
| |
| *Die Partitions-ID wieder auf normale Linux-ID ändern (bei MBR) beziehungsweise das RAID-Flag der Partition ausschalten (bei GPT).
| |
|
| |
| *Auf die vorhandenen Daten kann anschließend nicht mehr zugegriffen werden.
| |
|
| |
| *Die Partitionen auf den Festplatten sind 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.
| |
|
| |
| *'''MPT''': Installation des Bootloaders in alle MBR aller beteiligten Festplatten (grub-install /dev/sdX), wobei die neu eingerichteten Festplatten anzugeben sind.
| |
| *Am schnellsten geht es mit dem Befehl:
| |
|
| |
| # dpkg-reconfigure grub-pc
| |
|
| |
| *und der anschließenden Auswahl der gewünschten Festplatten.
| |
|
| |
| *'''GPT''': Der Bootloader muss in die entsprechenden Boot-Partitionen installiert werden.
| |
| *Z.B. bei einer Installation mit GPT und 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!
| |
|
| |
| *Damit die Boot-Partitionen durch die [https://de.wikipedia.org/wiki/Initrd initrd] auch einwandfrei gemountet werden, sollte nach Änderung die mdadm.conf und initrd aktualisiert werden.
| |
|
| |
| ==USB und RAID==
| |
|
| |
| *RAID 0 (stripping) ist denkbar ungeeignet für ein USB-RAID, 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 davon stark abzuraten ist.
| |
|
| |
| *RAID 1 (mirror) mit mehreren Partitionen auf verschiedenen USB-Festplatten ist prinzipiell kein Problem, auch wenn davon im Allgemeinen abzuraten ist.
| |
|
| |
| *Wer trotzdem sicher ist, dass in Spezialfällen ein RAID mit USB-Geräten sinnvoll ist, sollte 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 auf diese abstellen und um die Parameter nouser und noauto erweitern.
| |
|
| |
| ==RAID 1 zu RAID 0 konvertieren==
| |
|
| |
| Ausgangssituation
| |
| */dev/md0 ist ein RAID 1 aus /dev/sda1 und /dev/sdb1.
| |
|
| |
| Ziel
| |
| */dev/md0 soll ein RAID 0 aus beiden Partitionen werden.
| |
|
| |
| Vorgehen
| |
| # mdadm --grow /dev/md0 -l 0
| |
|
| |
| mdadm: level of /dev/md0 changed to RAID0
| |
|
| |
| */dev/sda1 wurde aus dem RAID 1 entfernt.
| |
| *Den Superblock entfernen.
| |
| # mdadm --zero-superblock /dev/sda1
| |
| *RAID 4 ist ein notwendiger Zwischenschritt.
| |
| # mdadm --grow /dev/md0 --level=4 --RAID-devices=2 --add /dev/sda1 --backup-file=/root/RAID.bak
| |
|
| |
| mdadm: level of /dev/md0 changed to RAID4
| |
| mdadm: added /dev/sda1
| |
| mdadm: Need to backup 128K of critical section..
| |
| mdadm: /dev/md0: could not set level to RAID0
| |
|
| |
| */dev/md0 ist jetzt ein RAID 4 das gesynced wird.
| |
| *Synchronisation abwarten...
| |
| *Dann RAID 4 zu RAID 0 konvertieren.
| |
| # mdadm --grow /dev/md0 --level=0 --RAID-devices=2 --backup-file=/root/RAID.bak
| |
| *Wieder das Reshaping abwarten...
| |
| watch mdadm -D /dev/md0
| |
| *Fertig ist das RAID 0.
| |
|
| |
|
| =weiterführende Artikel= | | =weiterführende Artikel= |