SelfLinux Systemverwaltung Linux Software-RAID HOWTO Abschnitt 8 | SelfLinux-0.13.0

| Linux Software-RAID HOWTO | Autor Formatierung GPL

#### 8 Spezielle Optionen der RAID-Devices Version 0.9x

#### 8.1 Was bedeutet Chunk-Size?

Mit dem Chunk-Size Parameter legt man die Größe der Blöcke fest, in die eine Datei zerlegt wird, die auf einen RAID-Verbund geschrieben werden soll. Diese ist nicht mit der Blockgröße zu verwechseln, die beim Formatieren des RAID-Verbundes als Parameter eines bestimmten Dateisystems angegeben werden kann. Vielmehr können die beiden verschiedenen Blockgrößen variabel verwendet werden und bringen je nach Nutzung unterschiedliche Geschwindigkeitsvor- wie auch -nachteile.

Nehmen wir das Standardbeispiel: RAID-0 (/dev/md0) bestehend aus /dev/sda6 und /dev/sdb6 soll als angegebene Chunk-Size in der /etc/raidtab 4 kB haben. Das würde heißen, dass bei einem Schreibprozess einer 16 KB großen Datei der erste 4 KB Block und der dritte 4 KB Block auf der ersten Partition (/dev/sda6) landen würden, der zweite und vierte Block entsprechend auf der zweiten Partition (/dev/sdb6). Bei einem RAID, das vornehmlich große Dateien schreiben soll, kann man so bei einer größeren Chunk-Size einen kleineren Overhead und damit einen gewissen Performancegewinn feststellen. Eine kleinere Chunk-Size zahlt sich dafür bei RAID-Devices aus, die mit vielen kleinen Dateien belastet werden. Somit bleibt auch der Verschnitt in einem erträglichen Rahmen. Die Chunk-Size sollte also jeder an seine jeweiligen Bedürfnisse anpassen.

Der Chunk Size Parameter in der /etc/raidtab funktioniert für alle RAID-Modi und wird in Kilobyte angegeben. Ein Eintrag von 4 bedeutet also 4096 Byte. Mögliche Werte für die Chunk-Size sind 4 KB bis 128 KB, wobei sie immer einer 2er Potenz entsprechen müssen.

Wie wirkt sich die Chunk-Size jetzt speziell auf die RAID-Modi aus?

Linear Modus

> Beim Linear Modus wirkt sich die Chunk-Size mehr oder minder direkt auf die benutzten Daten aus. Allgemein gilt hier, bei vielen kleinen Dateien eher eine kleine Chunk-Size zu wählen und umgekehrt.

RAID-0

> Da die Daten auf ein RAID-0 parallel geschrieben werden, bedeutet hier eine Chunk-Size von 4 KB, dass bei einem Schreibprozess mit einer Größe von 16 KB in einem RAID-Verbund aus zwei Partitionen die ersten beiden Blöcke parallel auf die beiden Partitionen geschrieben werden und anschließend die nächsten beiden wieder parallel. Hier kann man auch erkennen, das die Chunk-Size in engem Zusammenhang mit der verwendeten Anzahl der Partitionen steht. Eine generelle optimale Einstellung kann man also nicht geben. Diese hängt vielmehr vom Einsatzzweck des RAID-Arrays in bezug auf die Größe der hauptsächlich verwendeten Dateien, der Anzahl der Partitionen und den Einstellungen des Dateisystems ab.

RAID-1

> Beim Schreiben auf ein RAID-1 Device ist die verwendete Chunk-Size für den "parallelen" Schreibprozess unerheblich, da sämtliche Daten auf beide Partitionen geschrieben werden müssen. Die Abhängigkeit besteht hier also wie beim Linear-Modus von den verwendeten Dateien. Beim Lesevorgang allerdings bestimmt die Chunk-Size, wie viele Daten zeitgleich von den unterschiedlichen Partitionen gelesen werden können. Der Witz ist hierbei, dass alle Partitionen dieselben Daten enthalten (Spiegel-Partitionen eben) und dadurch Lesevorgänge wie eine Art RAID-0 arbeiten. Hier ist also mit einem Geschwindigkeitsgewinn zu rechnen.

RAID-4

> Hier beschreibt die Chunk-Size die Größe der Paritätsblöcke auf der Paritäts-Partition, welche nach dem eigentlichen Schreibzugriff geschrieben werden. Wird auf einen RAID-4 Verbund 1 Byte geschrieben, so werden die Bytes, die die Blockgröße bestimmen, von den RAID-4 Partitionen abzüglich der Paritäts-Partition (X-1, wobei X die Gesamtzahl der RAID-4 Partitionen ist) gelesen, die Paritäts-Information berechnet und auf die Paritäts-Partition geschrieben. Die Chunk-Size hat auf den Lesevorgang denselben geschwindigkeitsgewinnenden Einfluss wie bei einem RAID-0 Verbund, da der Lesevorgang auf eine ähnliche Weise realisiert ist.

RAID-5

> Beim RAID-5 Verbund bezeichnet die Chunk-Size denselben Vorgang wie beim RAID-4. Eine allgemein vernünftige Chunk-Size läge hier zwischen 32 KB und 128 KB, jedoch treffen auch hier die Faktoren wie Nutzung des RAIDs und verwendete Partitionen auf den Einzelfall zu und die Chunk-Size sollte dementsprechend angepasst werden.

RAID-10

> Bei dieser Art des RAID-Verbundes bezieht sich die Chunk-Size auf alle integrierten RAID-Verbunde, also beide RAID-0 Verbunde und das RAID-1 Array. Als Richtwert kann man hier 32 KB angeben - experimentieren ist hierbei natürlich wie bei allen anderen RAID-Modi auch ausdrücklich erlaubt.

#### 8.2 Spezielle Optionen von mke2fs für RAID-4 und RAID-5 Systeme

Die Option -R stride=nn von mke2fs erlaubt es, verschiedene ext2 spezifische Datenstrukturen auf eine intelligentere Weise auf das RAID zu verteilen. Ist die Chunk-Size mit 32 KB angegeben, heißt das, dass 32 KB fortlaufende Daten als Block auf dem RAID-Verbund liegen. Danach würde der nächste 32 KB Block kommen. Will man ein ext2 Dateisystem mit 4 KB Blockgröße erstellen, erkennt man, dass acht Dateisystemblöcke in einem Verbundblock (Chunk Block; durch Chunk-Size angegeben) untergebracht werden. Diese Information kann man dem ext2 Dateisystem beim Erstellen mitteilen:

root@linux ~# mke2fs -b 4096 -R stride=8 /dev/md0

Die RAID-4 und RAID-5 Performance wird durch diesen Parameter erheblich beeinflusst. Das Benutzen dieser Option ist dringend anzuraten.

#### 8.3 Beispiel-raidtab Einträge für alle RAID-Modi

Hier werden nur der neue RAID-Kernel-Patch in Verbindung mit den passenden RAID-Tools Version 0.9x und der entsprechenden Kernel-Version beschrieben. Die älteren RAID-Tools der Version 0.4x finden keine Berücksichtigung. Der Kernel-Patch sollte installiert sein. Ebenso sollten die RAID-Optionen im Kernel aktiviert sein und der Kernel neu kompiliert und neu gebootet sein.

#### 8.3.1 Linear (Append) Modus

Der Linear Modus verbindet mehrere Partitionen unterschiedlicher Größe zu einem Gesamtverbund, der allerdings nicht parallel, sondern nacheinander beschrieben wird. Ist die erste Partition voll, wird auf der nächsten weitergeschrieben. Dadurch sind weder Performancevorteile zu erwarten noch eine gesteigerte Sicherheit. Im Gegenteil. Ist eine Partition des Linear-Verbundes defekt, ist meist auch der gesamte Verbund hinüber.

Die Parameter der /etc/raidtab für einen Linear-Verbund sehen so aus:

root@linux ~# raiddev /dev/md0 raid-level linear nr-raid-disks 2 persistent-superblock 1 chunk-size 4 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1

Zu beachten ist hier, dass der Linear Modus keine Spare-Disks unterstützt. Was das ist und was man unter dem Persistent-Superblock versteht, finden Sie im Abschnitt Weitere Optionen der neuen RAID-Patches. Der Parameter Chunk-Size wurde bereits in diesem Abschnitt weiter oben erläutert.

Initialisiert wird Ihr neues Device mit folgendem Kommando:

root@linux ~# mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

root@linux ~# mke2fs /dev/md0

Schon können Sie das Device überall hin mounten und in die /etc/fstab eintragen.

#### 8.3.2 RAID-0 (Striping)

Sie haben sich entschlossen, mehrere Partitionen unterschiedlicher Festplatten zusammenzufassen, um eine Geschwindigkeitssteigerung zu erzielen. Auf die Sicherheit legen Sie dabei weniger Wert, jedoch sind Ihre Partitionen alle annähernd gleich groß.

Ihre /etc/raidtab sollte daher etwa so aussehen:

root@linux ~# raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblock 1 chunk-size 4 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1

Hier werde genauso wie beim Linear Modus keine Spare-Disks unterstützt. Was das ist und was man unter dem Persistent-Superblock versteht, wird im Abschnitt Weitere Optionen der neuen RAID-Patches erläutert.

Initialisiert wird Ihr neues Device mit folgendem Kommando:

root@linux ~# mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

root@linux ~# mke2fs /dev/md0

Schon können Sie das Device überall hin mounten und in die /etc/fstab eintragen.

#### 8.3.3 RAID-1 (Mirroring)

Ein RAID-1 Verbund wird auch als Spiegelsystem bezeichnet, da hier der gesamte Inhalt einer Partition auf eine oder mehrere andere gespiegelt und damit eins zu eins dupliziert wird. Wir haben hier also den ersten Fall von Redundanz. Des weiteren können hier, falls es erwünscht ist, zum ersten mal Spare-Disks zum Einsatz kommen. Diese liegen pauschal erst mal brach im System und werden erst um Ihre Mitarbeit bemüht, wenn eine Partition des RAID-1 Verbundes ausgefallen ist. Spare-Disks bieten also einen zusätzlichen Ausfallschutz, um nach einem Ausfall möglichst schnell wieder ein redundantes System zu bekommen.

Die /etc/raidtab sieht in solch einem Fall inkl. Spare-Disk so aus:

root@linux ~# raiddev /dev/md0 raid-level 1 nr-raid-disks 2 nr-spare-disks 1 chunk-size 4 persistent-superblock 1 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1 device /dev/sdc6 spare-disk 0

Weitere Spare- oder RAID-Disks würden analog hinzugefügt werden. Führen Sie hier nun folgendes Kommando aus:

root@linux ~# mkraid -f /dev/md0

Mittels cat /proc/mdstat können Sie wieder den Fortschritt und den Zustand Ihres RAID-Systems erkennen. Erstellen Sie das Dateisystem mittels

root@linux ~# mke2fs /dev/md0

sobald das RAID sich synchronisiert hat.

Theoretisch funktioniert das Erstellen des Dateisystems bereits während sich das RAID-1 noch synchronisiert, jedoch ist es vorläufig sicherer, mit dem Formatieren und Mounten zu warten, bis das RAID-1 fertig ist.

#### 8.3.4 RAID-4 (Striping & Dedicated Parity)

Sie möchten mehrere, aber mindestens drei etwa gleich große Partitionen zusammenfassen, die sowohl einen Geschwindigkeitsvorteil als auch erhöhte Sicherheit bieten sollen. Das Verfahren der Datenverteilung beim Schreibzugriff ist hierbei genauso wie beim RAID-0 Verbund, allerdings kommt hier eine zusätzliche Partition mit Paritätsinformationen hinzu. Fällt eine Partition aus, so kann diese, falls eine Spare-Disk vorhanden ist, sofort wieder rekonstruiert werden; fallen zwei Partitionen aus, ist aber auch hier Schluss und die Daten sind verloren. Obwohl RAID-4 Verbunde eher selten eingesetzt werden, müsste Ihre /etc/raidtab dann so aussehen:

root@linux ~# raiddev /dev/md0 raid-level 4 nr-raid-disks 3 nr-spare-disks 0 persistent-superblock 1 chunk-size 32 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1 device /dev/sdc6 raid-disk 2

Möchten Sie Spare-Disks einsetzen, so werden sie analog der Konfiguration des RAID-1 Devices hinzugefügt, also:

nr-spare-disks 1 device /dev/sdd6 spare-disk 0

Der Grund dafür, dass RAID-4 Verbunde nicht oft eingesetzt werden, liegt daran, dass die Paritäts-Partition immer die gesamten Daten des restlichen - als RAID-0 arbeitenden - Verbundes schreiben muss. Denkt man sich einen Extremfall, wo zehn Partitionen als RAID-0 arbeiten und eine Partition nun die gesamten Paritätsinformationen speichern soll, so wird unweigerlich deutlich, dass die Paritäts-Partition schnell überlastet ist.

Initialisiert wird Ihr neues Device so:

root@linux ~# mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

root@linux ~# mke2fs /dev/md0

Schon können Sie das Device überall hin mounten und in die /etc/fstab eintragen.

#### 8.3.5 RAID-5 (Striping & Distributed Parity)

Ein RAID-5 Verbund löst nun das klassische RAID-4 Problem elegant, indem es die Paritätsinformationen gleichmäßig über alle im RAID-5 Verbund laufenden Partitionen verteilt. Hierdurch wird der Flaschenhals einer einzelnen Paritäts-Partition wirksam umgangen, weshalb sich RAID-5 als Sicherheit und Geschwindigkeit bietender RAID-Verbund großer Beliebtheit erfreut. Fällt eine Partition aus, beginnt das RAID-5, falls Spare-Disks vorhanden sind, sofort mit der Rekonstruktion der Daten, allerdings kann RAID-5 auch nur den Verlust einer Partition verkraften. Genauso wie beim RAID-4 sind beim zeitgleichen Verlust zweier Partitionen alle Daten verloren. Eine /etc/raidtab für ein RAID-5 Device sähe folgendermaßen aus:

root@linux ~# raiddev /dev/md0 raid-level 5 nr-raid-disks 3 nr-spare-disks 2 persistent-superblock 1 parity-algorithm left-symmetric chunk-size 64 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1 device /dev/sdc6 raid-disk 2 device /dev/sdd6 spare-disk 0 device /dev/sde6 spare-disk 1

Bei diesem Beispiel sind gleich zwei Spare-Disks mit in die Konfiguration aufgenommen worden.

Der Parameter parity-algorithm legt die Art der Ablage der Paritätsinformationen fest und kann nur auf RAID-5 Verbunde angewendet werden. Die Auswahl left-symmetric bietet die maximale Performance. Weitere Möglichkeiten sind left-asymmetric, right-asymmetric und right-symmetric.

Initialisiert wird Ihr neues Device so:

root@linux ~# mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

root@linux ~# mke2fs /dev/md0

Schon können Sie das Device überall hin mounten und in die /etc/fstab eintragen.

#### 8.3.6 RAID-10 (Mirroring & Striping)

Die Kombination aus RAID-1 und RAID-0 Verbunden kann sehr flexibel eingesetzt werden, ist aber mit Vorsicht zu genießen. Man muss hierbei genau darauf achten, welche RAID-Partitionen in welchen RAID-Verbund eingebaut werden sollen. Um allerdings die nötige Redundanz gewährleisten zu können, sind hierfür mindestens vier RAID-Partitionen auf unterschiedlichen Festplatten nötig. Als Beispiel erstellen wir zwei RAID-0 Verbunde über jeweils zwei verschiedene RAID-Partitionen, die anschließend per RAID-1 gespiegelt werden sollen. Eine passende /etc/raidtab ohne Spare-Disks sähe dann so aus:

root@linux ~# raiddev /dev/md0 raid-level 0 nr-raid-disks 2 nr-spare-disks 0 persistent-superblock 1 chunk-size 4 device /dev/sda6 raid-disk 0 device /dev/sdb6 raid-disk 1

root@linux ~# raiddev /dev/md1 raid-level 0 nr-raid-disks 2 nr-spare-disks 0 persistent-superblock 1 chunk-size 4 device /dev/sdc6 raid-disk 0 device /dev/sdd6 raid-disk 1

root@linux ~# raiddev /dev/md2 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 persistent-superblock 1 chunk-size 4 device /dev/md0 raid-disk 0 device /dev/md1 raid-disk 1

Jetzt gilt es aber ein paar Kleinigkeiten zu beachten, denn anders als bei den anderen RAID-Verbunden haben wir hier gleich drei RAID-Arrays erstellt, wobei man sich überlegen muss, welches denn nun nachher überhaupt gemountet und mit Daten beschrieben werden soll. Die Reihenfolge ergibt sich aus der Datei /etc/raidtab. /dev/md0 wird nachher auf /dev/md1 gespiegelt.

Jedes Devices muss für sich erstellt werden:

root@linux ~# mkraid -f /dev/mdx

Ein Dateisystem per mke2fs wird nur auf /dev/md0 und /dev/md1 erstellt.

Die beste Reihenfolge ist, erst das Device /dev/md0 zu erstellen, zu formatieren und zu mounten. Dann wird /dev/md1 erstellt und formatiert. Dieses bitte nicht mounten, da ja hier keine Daten drauf geschrieben werden sollen. Zuletzt wird nun mittels

root@linux ~# mkraid -f /dev/md2

das RAID-1 Array erstellt, jedoch sollte man hier wirklich kein Dateisystem erstellen. Ab jetzt kann man mittels

root@linux ~# cat /proc/mdstat

die Synchronisation der beiden RAID-0 Verbunde /dev/md0 und /dev/md1 verfolgen. Ist die Synchronisation abgeschlossen, werden alle Daten, die auf /dev/md0 geschrieben werden, auf /dev/md1 gespiegelt. Aktiviert, gemountet und in die Datei /etc/fstab eingetragen wird letzthin nur /dev/md0. Natürlich könnte man auch /dev/md1 mounten, jedoch sollte man sich für ein Device entscheiden. Ausgeschlossen ist allerdings das Mounten von /dev/md2.