Linux/Software-RAID/tmp

Aus Foxwiki

allgemeines

allgemeines zum Software-RAID

  • Von Software-RAID spricht man, wenn das Zusammenwirken der Festplatten komplett softwareseitig organisiert wird.
  • Auch der Begriff Host based RAID ist geläufig, da nicht das Speicher-Subsystem, sondern der eigentliche Computer die RAID-Verwaltung durchführt.
  • Die meisten modernen Betriebssysteme wie FreeBSD, OpenBSD, Apple macOS, HP HP-UX, IBM AIX, Linux, Microsoft Windows ab Windows NT oder SUN Solaris sind dazu in der Lage.
  • Die einzelnen Festplatten sind in diesem Fall entweder über einfache Festplattencontroller am Computer angeschlossen oder es werden externe Storage-Geräte wie Disk-Arrays von Unternehmen wie EMC, Promise, AXUS, Proware oder Hitachi Data Systems (HDS) an den Computer angeschlossen.
  • Die Festplatten werden zunächst ohne RAID-Controller als sogenannte JBODs („just a bunch of disks“) in das System integriert, dann wird per Software-RAID (z. B. unter Linux mit dem Programm mdadm) die RAID-Funktionalität realisiert.
  • Eine besondere Variante des Software RAID sind Dateisysteme mit einer integrierten RAID-Funktionalität.
  • Ein Beispiel dafür ist das von Sun Microsystems entwickelte RAID-Z.[6]

Pro

  • Der Vorteil von Software-RAID ist, dass kein spezieller RAID-Controller benötigt wird.
  • Die Steuerung wird von der RAID-Software erledigt, diese ist entweder schon Teil des Betriebssystems oder wird nachträglich installiert.
  • Dieser Vorteil kommt besonders bei der Disaster Recovery zum Tragen, wenn der RAID-Controller defekt und nicht mehr verfügbar ist.
  • Praktisch alle derzeit verfügbaren Software-RAID-Systeme benutzen die Festplatten so, dass diese auch ohne die spezifische Software ausgelesen werden können.

Contra

  • Bei einem Software-RAID werden bei Festplattenzugriffen neben dem Hauptprozessor des Computers auch die System-Busse wie PCI stärker belastet als bei einem Hardware-RAID.
  • Bei leistungsschwachen CPUs und Bus-Systemen verringert dies deutlich die Systemleistung.
  • Bei leistungsstarken, wenig ausgelasteten Systemen ist dies belanglos.
  • Storage-Server sind in der Praxis oft nicht voll ausgelastet; auf solchen Systemen können Software-RAID-Implementierungen unter Umständen sogar schneller sein als Hardware-RAIDs.
  • Ein weiterer Nachteil ist, dass bei vielen Software-RAID kein Cache genutzt werden kann, dessen Inhalt auch nach einem Stromausfall erhalten bleibt, wie es bei Hardware-RAID-Controllern mit einer Battery Backup Unit der Fall ist.
    • Dieses Problem lässt sich mit einer unterbrechungsfreien Stromversorgung für den gesamten PC vermeiden.
    • Um die Gefahr von Datenverlusten und Fehlern in der Datenintegrität bei einem Stromausfall oder Systemabsturz zu minimieren, sollten außerdem die (Schreib-)Caches der Festplatten deaktiviert werden.[7]
  • Da die Platten eines Software-RAIDs prinzipiell auch einzeln angesprochen werden können, besteht bei gespiegelten Festplatten die Gefahr, dass Änderungen nur noch an einer Platte durchgeführt werden – wenn etwa nach einem Betriebssystem-Update die RAID-Software oder der Treiber für einen RAID-Festplatten-Controller nicht mehr funktionieren, eine der gespiegelten Festplatten aber weiterhin über einen generischen SATA-Treiber angesprochen werden kann.
  • Entsprechende Warnhinweise oder Fehlermeldungen während des Bootens sollten deshalb nicht ignoriert werden, nur weil das System trotzdem funktioniert.
  • Ausnahmen bilden hier Software-RAID mit Datenintegrität wie z. B. ZFS.
  • Unvollständige Speichervorgänge werden zurückgesetzt.
  • Fehlerhafte Spiegeldaten werden erkannt und durch korrekte Spiegeldaten ersetzt.
  • Es wird wohl beim Lesen eine Fehlermeldung geben, da die fehlerhafte oder alte Spiegelseite nicht mit dem aktuellen Block übereinstimmt.

allgemeines Software-RAID unter Linux

  • 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.
  • 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).

Grundsätzliche Informationen

  • Im Allgemeinen macht es nur Sinn, Partitionen gleicher Größe zu verwenden, die auf unterschiedlichen Festplatten angelegt sind.
  • Um das komplette System auf einem RAID-Verbund zu installieren, bietet es sich an, das System über die Alternate-CD aufzusetzen.
  • Die Alternate-CD unterstützt bereits bei der Installation das Erstellen üblicher RAID-Varianten.
    • Dies findet man unter dem Punkt: "Partitionieren".
    • Die Alternate-CD ist nur noch bei Lubuntu verfügbar.
    • Dann kann man auf die Server-CD ausweichen und den gewünschten Desktop nachträglich installieren.
  • Ubuntu unterstützt von Haus aus die RAID-Varianten 0, 1, 5, 6 und 10. Details zu den einzelnen Typen finden sich im Abschnitt RAID-Level.
  • 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!
    • 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 RAID schützt ausschließlich vor Datenverlust durch Plattendefekte.
  • 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[1] 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.
  • 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 (ab Ubuntu 17.10).

allgemeines Software-RAID unter Linux II

  • Linux Software RAID (häufig auch als mdraid oder MD/RAID bezeichnet) ermöglicht die Nutzung von RAID Funktionalität ohne Hardware RAID Controller.
  • Die dazu verwendeten Datenträger (Festplatten, SSDs, ...) werden dabei einfach als einzelne Laufwerke am Rechner angeschlossen, etwa direkt an den SATA Ports des Mainboards.
  • Hardware RAID Controller haben im Gegensatz zu Software RAID meistens einen eingebauten Cache (häufig 512 MB oder 1GB), der mit einer BBU oder ZMCP geschützt werden kann (siehe Unterschiede zwischen Hardware RAID und Linux Software RAID).

Funktionsweise

  • Beispiel: Linux Software RAID mit zwei RAID 1 Devices (eines für das Root Dateisystem, ein weiteres für swap.
  • Linux Software RAID unterstützt die folgenden RAID Level:[1]
    • RAID 0
    • RAID 1
    • RAID 4
    • RAID 5
    • RAID 6[2]
    • RAID 10


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.[3]
  • Die RAID5 multithreading Unterstützung wurde im Linux Kernel mit 3.12 aufgenommen.

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.[4]


  • 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[5]

Superblock Metadaten-Version 1.*

  • Die Position des Superblock hängt von der Version der Metadaten ab:[6]
    • 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.

Umsetzung