Inhalt

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, daß bei einem Schreibprozeß 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, daß bei einem Schreibprozeß 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« Schreibprozeß 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, daß 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 Einfluß 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 angepaßt 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, daß 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, daß acht Dateisystemblöcke in einem Verbundblock (Chunk Block; durch Chunk-Size angegeben) untergebracht werden. Diese Information kann man dem ext2 Dateisystem beim Erstellen mitteilen:

mke2fs -b 4096 -R stride=8 /dev/md0 

Die RAID-4 und RAID-5 Performance wird durch diesen Parameter erheblich beeinflußt. 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.

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:

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, daß 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:

mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

mke2fs /dev/md0

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

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 ausehen:

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:

mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

mke2fs /dev/md0

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

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. Desweiteren können hier, falls es erwünscht ist, zum ersten mal Spare-Disks zum Einsatz kommen. Diese liegen pauschal erstmal 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:

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:

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

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.

RAID-4 (Striping & Dedicated Parity)

Sie möchten mehrere, aber mindestens drei etwa gleich große Partitionen zusammenfassen, die sowohl einen Geschindigkeitsvorteil 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 Schluß und die Daten sind verloren. Obwohl RAID-4 Verbunde eher selten eingestezt werden, müßte Ihre /etc/raidtab dann so aussehen:

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, daß RAID-4 Verbunde nicht oft eingesetzt werden, liegt daran, daß die Paritäts-Partition immer die gesamten Daten des restlichen - als RAID-0 arbeitenden - Verbundes schreiben muß. 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, daß die Paritäts-Partition schnell überlastet ist.

Initialisiert wird Ihr neues Device so:

mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

mke2fs /dev/md0

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

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:

 
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:

mkraid -f /dev/md0

Danach fehlt noch ein Dateisystem:

mke2fs /dev/md0

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

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 muß 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:

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


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


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 muß, welches denn nun nachher überhaupt gemountet und mit Daten beschrieben werden soll. Die Reihenfolge ergibt sich aus der Datei /etc/raidtab. /dev/md0 wird nacher auf /dev/md1 gespiegelt.

Jedes Devices muß für sich erstellt werden:

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

mkraid -f /dev/md2

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

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.


Inhalt