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