Linux/Software-RAID: Unterschied zwischen den Versionen

Aus Foxwiki
Robertquies (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Robertquies (Diskussion | Beiträge)
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=

Version vom 13. August 2020, 09:10 Uhr

Ein Software-Redundant Array of Independent Disks dient dazu, mehrere physikalische Festplatten zu einem oder mehreren logischen Laufwerken zu vereinen.

RAID allgemein

  • Schnellerer Datenzugriff und/oder erhöhte Verfügbarkeit des Systems im Falle eines Festplattendefektes.
  • Es werden nur Partitionen gleicher Größe verwendet, da sonst Speicherkapazitäten ungenutzt bleiben.
  • Hardware-RAID und Software-RAID machen beide das Gleiche.
  • Von Software-RAID spricht man, wenn das Zusammenwirken der Festplatten komplett softwareseitig organisiert wird.

Vergleich - Software-RAID/Hardware-RAID

Pro Software-RAID

  • Günstig bis kostenlos - Software-RAIDs gibt es als Open-Source-Software.
  • Geht die Installation des Betriebssystems kaputt, kann das RAID oft noch mit einer neuen Installation des gleichen Betriebssystems wieder eingelesen werden.
  • Bei Software-RAIDs auf BIOS-Ebene (Host-RAID-Systemen) ist das nicht immer so.

Contra Software-RAID

  • Benutzt den Prozessor und verbraucht Ressourcen.
    • => Der Rechner kann bei komplexen Systemen langsamer werden.
  • Bei einem RAID, das auf dem Betriebssystem (OS) eingerichtet wurde, profitiert das OS selber nicht vom RAID.

Pro Hardware-RAID

  • RAID-Controller - Alle Berechnungen werden von einem extra Chip gemacht.
    • => Entlastung der Host-CPU.
  • Steht schon beim Booten zur Verfügung.
    • => Das OS profitiert vom RAID.
  • Unterstützt eine Vielzahl von Betriebssystemen.

Contra Hardware-RAID

  • Bei RAID-Controller-Defekt - kann kein baugleiches Modell aufgetrieben werden, wird das RAID zum Datengrab.
  • Zusätzliche Kosten für einen RAID-Controller (kein Fake-RAID).
Fake-RAIDs können nur eine begrenzte Anzahl von RAID-Leveln, häufig nur RAID-Level 0 und 1. 
Um die Controller/Karten so billig wie möglich zu halten, überlassen die Hersteller die RAID-Logik der CPU.
=> Benutzt also den Prozessor und verbraucht Ressourcen.

Superblock

  • Linux-Software-RAID speichert alle notwendigen Informationen zu einem RAID-Array in einem Superblock.
  • Je nach Metadaten-Version liegt dieser an unterschiedlichen Stellen.

Superblock Metadaten-Version 0.90

  • Der version-0.90 Superblock ist 4.096 Byte groß und liegt in einem 64 KiB aligned block am Ende eines Devices.
  • Der Superblock beginnt ja nach Devicegröße frühestens 128 KiB vor dem Ende des Devices, bzw. spätestens 64 KiB vor dem Ende des Devices.
  • Um die Adresse des Superblocks zu berechnen, wird die Device-Größe auf ein vielfaches von 64 KiB abgerundet und dann 64 KiB vom Ergebnis abgezogen.
  • Einschränkungen der Metadaten-Version 0.90:
    • Maximal 28 Devices in einem Array.
    • Jedes Device kann maximal 2 TiB groß sein.
    • Keine Unterstützung des Bad-Block-Managements.

Superblock Metadaten-Version 1.*

  • Die Position des Superblock hängt von der Version der Metadaten ab:
    • Version 1.0: Der Superblock liegt am Ende 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.

weiterführende Artikel

Linux:Software-RAID:Anlegen

Linux:Software-RAID:Wartung

Linux:Software-RAID:Fehlerbehebung

Quellen

  1. https://wiki.ubuntuusers.de/Software-RAID/
  2. https://www.thomas-krenn.com/de/wiki/Linux_Software_RAID
  3. https://de.wikipedia.org/wiki/RAID#Software-RAID
  4. The Software-RAID HOWTO
  5. Linux RAID Wiki
  6. RAID Setup
  7. Festplattenpuzzles - Tipps und Tricks rund um Linux-Software-RAID
  8. Workshop - Software-RAID unter Linux einrichten
  9. Quick HOWTO : Ch26 : Linux Software RAID
  10. linux-RAID Mailing List
  11. Ubuntu-Server-Installation mit Software-RAID
  12. https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats