RAID: Unterschied zwischen den Versionen
Zeile 114: | Zeile 114: | ||
****Dem Dateisystem sollten Informationen zum unterliegenden RAID bereitgestellt werden, um seine Blöcke passend auszurichten. | ****Dem Dateisystem sollten Informationen zum unterliegenden RAID bereitgestellt werden, um seine Blöcke passend auszurichten. | ||
****Falls noch weitere Schichten zwischen Dateisystem und Datenträger verwendet werden, z.B. bei Verschlüsselung, muss auch bei diesen auf das Alignment geachtet werden. | ****Falls noch weitere Schichten zwischen Dateisystem und Datenträger verwendet werden, z.B. bei Verschlüsselung, muss auch bei diesen auf das Alignment geachtet werden. | ||
==[[Hardware:Storage:RAID#Alignment|Alignment (Ausrichtung)]]== | |||
*Datenträger, 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. | |||
*Um eine optimale Performance zu erzielen, sollten die Größen aufeinander abgestimmt sein. | |||
===Ermittlung der Chunk Size=== | |||
# mdadm -D /dev/md0 | grep "Chunk Size" | |||
*Bei einem RAID 5 mit Standardeinstellungen liefert dies z.B.: | |||
Chunk Size : 512K | |||
*Es werden also 512 [https://de.wikipedia.org/wiki/Byte#Vergleichstabelle KiB] Chunks verwendet. | |||
===Änderung der Chunk Size=== | |||
*Chunk Size auf 64 KiB ändern. | |||
*Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen. | |||
# mdadm --grow -c 64 /dev/md0 | |||
===Berechnung des Alignments=== | |||
*Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden. | |||
*Am einfachsten geht das mittels eines [https://busybox.net/~aldot/mkfs_stride.html Raid-Stride-Calculators]. | |||
*Alternativ können die Parameter auch von Hand ermittelt werden. | |||
**'''block-size''' - Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fast ausschließlich '''4096 Byte''' (4 KiB) Blöcke verwendet. | |||
**'''stride-size''' - Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich '''512 KiB/ 4 KiB = 128'''. | |||
**'''stripe-width''' - Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus '''stride-size * Anzahl der effektiv nutzbaren Partitionen'''. Bei einem RAID 5 über 4 Partitionen ergibt sich hier '''128 * 3 = 384'''. | |||
*Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel [[Hardware:Storage:RAID#RAID-Level|Hardware:Storage:RAID]]. | |||
*Sind die Parameter ermittelt, wird das Dateisystem erstellt: | |||
# mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0 | |||
=Quellen= | =Quellen= |
Version vom 28. August 2020, 10:20 Uhr
Redundant Array of Independent Disks
Funktion
- Ein RAID dient dazu, mehrere physikalische Datenträger 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 Datenträgerdefektes zu erreichen.
- Von Software-RAID spricht man, wenn das Zusammenwirken der Datenträger komplett softwareseitig organisiert wird.
- Im Allgemeinen macht es nur Sinn, Partitionen gleicher Größe zu verwenden, die auf unterschiedlichen Datenträger angelegt sind.
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-Datenträger aufzusetzen, um eine automatische Sicherung zu erhalten, ist dies kein Backup.
- Das Entfernen der externen Datenträger führt immer dazu, dass sich das RAID im Fehlerzustand (degraded) befindet.
- Bei Wiederanschluss muss die interne Datenträger 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-Datenträger 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 Datenträger angibt, um Datenverlust zu vermeiden.
- Bei älteren IDE-ATA-Datenträger gilt: die verwendeten Datenträger sollten nicht am selben IDE-Kanal hängen, da im Fehlerfall einer Datenträger 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.
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.
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:
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 Datenträger 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.
Alignment
- Datenträger, 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 Datenträger 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 Datenträger 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 Datenträger-Blöcke belegen, falls er mitten in einem Datenträger-Block anfängt.
- Das Lesen eines Dateisystem-Blocks würde damit im schlechtesten Fall das Laden von 2050 Datenträger-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 Datenträger-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 Datenträger-Blöcke sein.
- Partitionen sollten auf Sektorgrenzen der Datenträger 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 Datenträger verwendet werden, z.B. bei Verschlüsselung, muss auch bei diesen auf das Alignment geachtet werden.
- Das Dateisystem möchte einen einzelnen 4 KiB großen Block lesen
Alignment (Ausrichtung)
- Datenträger, 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.
- Um eine optimale Performance zu erzielen, sollten die Größen aufeinander abgestimmt sein.
Ermittlung der Chunk Size
# mdadm -D /dev/md0 | grep "Chunk Size"
- Bei einem RAID 5 mit Standardeinstellungen liefert dies z.B.:
Chunk Size : 512K
- Es werden also 512 KiB Chunks verwendet.
Änderung der Chunk Size
- Chunk Size auf 64 KiB ändern.
- Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen.
# mdadm --grow -c 64 /dev/md0
Berechnung des Alignments
- Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden.
- Am einfachsten geht das mittels eines Raid-Stride-Calculators.
- Alternativ können die Parameter auch von Hand ermittelt werden.
- block-size - Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fast ausschließlich 4096 Byte (4 KiB) Blöcke verwendet.
- stride-size - Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich 512 KiB/ 4 KiB = 128.
- stripe-width - Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus stride-size * Anzahl der effektiv nutzbaren Partitionen. Bei einem RAID 5 über 4 Partitionen ergibt sich hier 128 * 3 = 384.
- Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel Hardware:Storage:RAID.
- Sind die Parameter ermittelt, wird das Dateisystem erstellt:
# mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0