Linux/Software-RAID: Unterschied zwischen den Versionen

Aus Foxwiki
Robertquies (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
K Textersetzung - „bzw.  “ durch „bzw. “
 
(24 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 12: Zeile 12:
==Pro Software-RAID==  
==Pro Software-RAID==  


*Günstig bis kostenlos - Software-RAIDs gibt es als Open-Source-Software.
*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 Defekt des Betriebssystems, 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.
*Bei Software-RAIDs auf BIOS-Ebene (Host-RAID-Systemen) ist das nicht immer so.


==Contra Software-RAID==
==Contra Software-RAID==
*Benutzt den Prozessor und verbraucht Ressourcen.
*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.
*Bei einem RAID, das auf dem Betriebssystem (OS) eingerichtet wurde, profitiert das OS selber nicht vom RAID.


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


Zeile 42: Zeile 40:
*Je nach Metadaten-Version liegt dieser an unterschiedlichen Stellen.
*Je nach Metadaten-Version liegt dieser an unterschiedlichen Stellen.


*Weiterführende Informationen zum Superblock findet man unter:  
*Mehr Info: [https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats]
**[https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats]


==Superblock Metadaten-Version 0.90==
==Superblock Metadaten-Version 0.90==
Zeile 49: Zeile 46:
*Der version-0.90 Superblock ist 4.096 Byte groß und liegt in einem 64 KiB aligned block am Ende eines Devices.  
*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.  
*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.
*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:
*Einschränkungen der Metadaten-Version 0.90
**Maximal 28 Devices in einem Array.
**Maximal 28 Devices in einem Array.
**Jedes Device kann maximal 2 TiB groß sein.
**Jedes Device kann maximal 2 TiB groß sein.
Zeile 60: Zeile 57:
==Superblock Metadaten-Version 1.*==
==Superblock Metadaten-Version 1.*==


*Die Position des Superblock hängt von der Version der Metadaten ab:
*Die Position des Superblock hängt von der Version der Metadaten ab
**Version 1.0: Der Superblock liegt am Ende des Devices.
**Version 1.0: Der Superblock liegt am Ende des Devices.
**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=
= HowTo =
 
# [[Linux:Software-RAID:Vorbereitung]]
*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.
# [[Linux:Software-RAID:Anlegen]]
 
# [[Linux:Software-RAID:Wartung]]
==Resync und Rebuild beschleunigen==
# [[Linux:Software-RAID:Fehlerbehebung]]
 
# [[Linux:Software-RAID:Aufgaben]]
*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=
[https://wiki.itw-berlin.net/index.php?title=Linux:Software-RAID:Anlegen Linux:Software-RAID:Anlegen]
 
[https://wiki.itw-berlin.net/index.php?title=Linux:Software-RAID:Wartung Linux:Software-RAID:Wartung]
 
[https://wiki.itw-berlin.net/index.php?title=Linux:Software-RAID:Fehlerbehebung Linux:Software-RAID:Fehlerbehebung]


=Quellen=
=Quellen=
Zeile 345: Zeile 83:
#[https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats]
#[https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats https://RAID.wiki.kernel.org/index.php/RAID_superblock_formats]


[[Category:Linux:Storage]]
[[Kategorie:Linux/Software-RAID]]

Aktuelle Version vom 28. Mai 2023, 22:16 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

  • Software-RAIDs gibt es als Open-Source-Software.
  • Bei Defekt des Betriebssystems, 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.
  • Bei einem RAID, das auf dem Betriebssystem (OS) eingerichtet wurde, profitiert das OS selber nicht vom RAID.

Pro Hardware-RAID

  • Entlastung der Host-CPU.Alle Berechnungen werden vom RAID-Controller gemacht.
  • 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.

HowTo

  1. Linux:Software-RAID:Vorbereitung
  2. Linux:Software-RAID:Anlegen
  3. Linux:Software-RAID:Wartung
  4. Linux:Software-RAID:Fehlerbehebung
  5. Linux:Software-RAID:Aufgaben

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