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?
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.
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.
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.
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.
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.
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, 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.
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:
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.
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.
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.
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.
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.
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
.