RAID

Aus Foxwiki
  • Ein RAID (Redundant Array of Independent Disks) dient dazu, mehrere physikalische Festplatten zu einem oder mehreren logischen Laufwerken zu vereinen und dadurch einen schnelleren Datenzugriff und/oder eine erhöhte Verfügbarkeit des Systems im Falle eines Festplattendefektes zu erreichen.
  • Von Software-RAID spricht man, wenn das Zusammenwirken der Festplatten komplett softwareseitig organisiert wird.
  • Native Hardware-RAID-Controller, die unter Linux unterstützt werden (z.B. von 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önnen auch sog. FakeRAID-Controller verwendet werden, z.B. Onboard-RAID-Controller. Allerdings wird von dieser Variante im Allgemeinen abgeraten, da beispielsweise oft Kernelmodule (Treiber) fehlen oder diese nur für bestimmte Kernelversionen zur Verfügung stehen.
  • Dies spricht dann eher für ein Software-RAID, zumal bei modernen, schnellen CPUs die zusätzliche Rechenbelastung für ein Software-RAID kaum eine Rolle spielt.
  • Der Einsatz der Fake-Raid Variante würde dann Sinn machen, wenn via Dual Boot Linux und Windows auf die gleichen RAID-Partitionen zugreifen sollen.
  • Außerdem sollte man beachten, dass sowohl Software-Raid als auch Fake-Raid keinen batteriegepufferten Cache besitzen.
  • Dies kann bei einem Stromausfall zum Datenverlust führen (write hole in den RAID-Leveln 5 und insbesondere 6).
  • Hardware-RAID-Controller verfügen in der Regel über einen batteriegepufferten Cache (BBU) oder NVRAM, der auch bei einem plötzlichen Stromausfall noch nicht physisch gespeicherte Daten solange vorhält, bis das System wieder gestartet ist.
  • Software-Raid unter Linux versucht dieses Problem mit einem Journal zu lösen.
  • Im Allgemeinen macht es nur Sinn, Partitionen gleicher Größe zu verwenden, die auf unterschiedlichen Festplatten angelegt sind.
  • Soll von einem neuen RAID-Verbund gebootet werden (Root-Dateisystem), sollte zusätzlich der Abschnitt Bootloader beachtet werden.


RAID und Backup

  • Ein RAID ersetzt keine Datensicherung!
  • Ein RAID schützt ausschließlich vor Datenverlust durch Plattendefekte.
  • Auch wenn es verlockend scheint, z.B. 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.
  • Bei Wiederanschluss muss die interne Festplatte jedesmal komplett neu mit der externen Platte synchronisiert werden.
  • Ein Datenverlust, der durch Fehler des Betriebssystems, des Dateisystems, durch die verwendeten Programmen oder den Benutzer entsteht, wird sofort automatisch auf alle Laufwerke synchronisiert, so dass das vermeintliche Backup automatisch mit fehlerhaften Daten überschrieben wird.

IDE/SATA

  • Generell sollte man bei RAIDs moderne SATA-Festplatten verwenden, da der Datendurchsatz bei diesen zum Teil erheblich höher ist als bei älteren IDE-Platten.
  • Zudem sind SATA-Platten prinzipiell "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 angibt, um Datenverlust zu vermeiden.
  • Bei älteren IDE-ATA-Festplatten 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.

SSD RAIDs

  • Linux Software RAID verwendet bis Kernel 3.11 nur einen Thread für RAID5/RAID6 Berechnungen.
    • Das kann die Performance von SSD RAIDs limitieren.
  • Im Januar 2013 gab es erste Patches von Fusion-io, diese waren zu diesem Zeitpunkt aber noch nicht reviewed.
  • Die RAID5 multithreading Unterstützung wurde im Linux Kernel mit 3.12 aufgenommen.

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.
Auswahl von RAID-Typen im Überblick
Typ mind. Partitionen Speicherplatz Vorteil Bemerkung
0 2 k*n Geschwindigkeit (Lesen & Schreiben), Plattenplatz Keine Partition darf ausfallen - Reißverschlussverfahren
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. Hotspares.
    • Dabei werden vorab Partitionen bekannt gegeben, die beim Ausfall eines Laufwerks innerhalb des RAID-Verbundes durch das Reservelaufwerk automatisch ersetzt werden.

RAID-Zustände

  • Ein RAID kann sich in unterschiedlichen Zuständen befinden, die seinen Status zusammenfassen:
RAID-Zustände im Überblick
Zustand Beschreibung
Clean Bezeichnet den Normalzustand. Es liegt kein Fehler vor und alle Prüf- und Initialisierungsaufgaben sind abgeschlossen.
Degraded Es liegt ein Ausfall vor. Je nach RAID-Level kann dieser durch Austausch einer Festplatte mit einem anschließenden Rebuild behoben werden um das RAID wieder in den Clean-Zustand zu versetzen.
Resync Bei einem Resync werden je nach RAID-Level Sicherungsinformation, z.B. Paritäten, geprüft und ggf. neu erstellt. Ein neu angelegtes RAID befindet sich in der Regel in diesem Zustand. Auch während eines Resync sind die Daten auf dem RAID bereits vor einem Ausfall gesichert. Die volle Lese- und Schreibgeschwindigkeit kann jedoch erst nach Abschluss des Resync erreicht werden.
Rebuild Bei einem Rebuild "erholt" sich das RAID von einem Ausfall. Die verlorenen Daten werden aus den Sicherungsinformationen wiederhergestellt und damit das Austauschlaufwerk gefüllt. Ein weiterer Ausfall eines Laufwerks während eines Rebuilds wird in der Regel zu Datenverlust führen.
  • Resync und Rebuild können je nach Größe und Art des RAIDs mehrere Stunden bis Tage in Anspruch nehmen.

RAID 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.


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:
    • Das Dateisystem möchte einen einzelnen 4 KiB großen Block lesen
      • 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.
      • 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 liegen, so dass für einen Dateisystem-Block zwei RAID-Blöcke geladen werden müssen.
      • Analog 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 zu 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 beschrieben.
        • Dem Dateisystem sollten Informationen zum unterliegenden RAID 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.