net17.de
Linux RAID
Dies ist eigentlich kein richtiges Projekt, mehr ein paar Tips zum Linux RAID, welche teilweise schwer zu finden waren.
Zurest mal eine Abwägung der Vor- und Nachteile. Ein Software RAID wir Linux es bietet ist langsam, antürlich! Alle Checksummen müssen berechnet werden und dies belastet die CPU, bei einem Hardware RAID Controller entfällt das weil der Controller auf dem RAID Adapter darauf spezialisiert ist. Bei einem IDE (ATA) Raid kommt noch hinzu das der Zugriff auf die Festplatten nicht wirklich parallel erfolgt wodurch weitere Performance Verluste auftreten.
Als Vorteile sind der Preis, die quelloffenen Programme und die Felxibilität zu nennen.
Einige der Vor- und Nachteile im Überblick:
Hardware RAID | Software RAID |
---|---|
Sehr schnell | Langsam bis Schnell, je nach verwendeter Hardware |
Teuer (ab 30 Euro für einfaches RAID-1 bis zu mehreren tausend Euro für professionelle Controller) | Sehr Günstig |
Sehr unterschiedliche Ausstattung und Flexibilität | Sehr flexibel und mächtig, die nachträgliche Erweiterung eines RAID 1 oder 5 z.B. findet man sonst nur bei sehr teuren Hard RAID Controllern |
RAID erstellen
Meine Konfiguration:
Im ersten Schritt habe ich ein RAID aus 4 Samsung 300GB Platten aufgebaut (Samsung HD300LD).
Zuerst habe ich die 4 Platten per fdisk partitioniert und jeweile eine Partition ueber die gesamte Platte angelegt. Dann habe ich dieser als Typ "fd" zugewiesen was "Linux raid autodetect" bedeutet. (Mittels Schalter t in fdisk)
RAID erweitern
Viel zu schnell wurde das RAID mit seinen 879100608 Bytes free zu klein, was für eine Überraschung. Also musste eine Lösung her. Das RAID Array neu aufbauen kam nicht in Frage da ich keinen Platz hatte um die Daten zu sichern. Hätte ich diesen gehabt hätte es auch kein Platzproblem gegeben :)
Also muste das bestehende RAID erweitert werden. Das Linux RAID bietet angeblich solch eine Funktionlit&aauml;t.
Mein RAID ist das Device dev/md0 und besteht aus den Platten/Partitions /dev/hde1, /dev/hdf1, /dev/hdg1 und /dev/hdh1.
Hinzukommen sollen /dev/hdi1 und /dev/hdj1
Das RAID wird per mdadm verwaltet, welches auch die Erweiterung durchführen kann. Als Distribution setze ich OpenSuSE 10.2 ein und gleich folgte die erste Ernüchterung:
Nach Eingabe von
mdadm --grow --help
gab es folgende Infos:
hydra:~ # mdadm --grow --help
Usage: mdadm --grow device options
This usage causes mdadm to attempt to reconfigure a running array.
This is only possibly if the kernel being used supports a particular
reconfiguration. This version only supports changing the number of
devices in a RAID1, and changing the active size of all devices in
a RAID1/4/5/6.
Options that are valid with the grow (-G --grow) mode are:
--size= -z : Change the active size of devices in an array.
: This is useful if all devices have been replaced
: with larger devices.
--raid-disks= -n : Change the number of active devices in a RAID1
: array.
also nichts mit Erweiterung eines RAID5, toll....
Auf der mdadm Homepage gibt es aber eine neuere Version 2.6.2 (OpenSuSE 10.2 bring die Version 2.5.3 mit) diese ist zwingend erforderlich wenn man ein RAID 5 erweitern will.
Also die alte Version gesichert, die Neue von Sourceforge runtergeladen, entpackt und kompiliiert:
cp /sbin/mdadm /sbin/mdadm.old
make
make install
und siehe da:
mdadm --grow --help
bringt:
Das Binary der 2.6.2 Version von mdadm kann man auch hier bei mir runterladen. Einfach altes Binary in /sbin/mdadm.alt umbenennen und dieses hier reinkopieren)
das macht Hoffnung.
Usage: mdadm --grow device options
This usage causes mdadm to attempt to reconfigure a running array.
This is only possibly if the kernel being used supports a particular
reconfiguration. This version supports changing the number of
devices in a RAID1/5/6, changing the active size of all devices in
a RAID1/4/5/6, adding or removing a write-intent bitmap, and changing
the error mode for a 'FAULTY' array.
Options that are valid with the grow (-G --grow) mode are:
--level= -l : Tell mdadm what level the array is so that it can
: interpret '--layout' properly.
--layout= -p : For a FAULTY array, set/change the error mode.
--size= -z : Change the active size of devices in an array.
: This is useful if all devices have been replaced
: with larger devices.
--raid-disks= -n : Change the number of active devices in an array.
: array.
--bitmap= -b : Add or remove a write-intent bitmap.
Zuerst müssen die beiden neuen Festplatten zum Array hinzugefügt werden, vorerst als Spare Festplatten. Dies geschieht mittels:
mdadm /dev/md0 --add /dev/hdi1
und
mdadm /dev/md0 --add /dev/hdj1
Beides gab keine Probleme, die neue Konfiguration sieht dann so aus:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 hdj1[5](S) hdi1[4](S) hde1[0] hdh1[3] hdg1[2] hdf1[1]
879100608 blocks level 5, 32k chunk, algorithm 2 [4/4] [UUUU]
unused devices:
Wie man sieht sind die beiden neu hinzugefügten Festplatten mit [S] für Spare gekennzeichnet.
Dann kommt der heikle Teil....Das aktivieren der beiden neuen Festplatten:
mdadm /dev/md0 --grow --raid-disks 6 --backup-file=/tmp/raid-backup
Dadurch wird die Anzahl der aktiven Festplatten im Array von 4 auf 6 angehoben und die Daten werden auf alle Platten verteilt.
Bei raid-disks muss die gesamte Anzahl der Platten angegeben werden (inklusive Parity Platte).
Mit --backup-file sollte man eine temporäre Datei angeben die mdadm am Anfang des Umkopierens braucht um kritische Daten zu sichern. Falls das System ausgerechnet in diesem Moment abstürzt kann mdadm daraus das Array wieder retten. Die Datei wird nur ganz kurz am Anfang benötigt und sofort wieder gelöscht, die Grösse ist auch vernachlässigbar.
Wenn alles klappt kann an per cat /proc/mdstat
oder mdadm --misc --detail
den Status ansehen. Keine Angst das dauert also muss man nicht schnell sein bei kontrollieren.
mdstat:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 hdj1[4] hdi1[5] hde1[0] hdh1[3] hdg1[2] hdf1[1]
879100608 blocks super 0.91 level 5, 32k chunk, algorithm 2 [6/6] [UUUUUU]
[>....................] reshape = 0.0% (102592/293033536) finish=999.2min speed=4885K/sec
unused devices:
mdadm:
/dev/md0:
Version : 00.91.03
Creation Time : Sat Mar 31 16:16:10 2007
Raid Level : raid5
Array Size : 879100608 (838.38 GiB 900.20 GB)
Used Dev Size : 293033536 (279.46 GiB 300.07 GB)
Raid Devices : 6
Total Devices : 6
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Jun 9 14:00:46 2007
State : clean, recovering
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 32K
Reshape Status : 0% complete
Delta Devices : 2, (4->6)
UUID : 8658ad4a:b318e342:405852c9:e0e609bf
Events : 0.376706
Number Major Minor RaidDevice State
0 33 1 0 active sync /dev/hde1
1 33 65 1 active sync /dev/hdf1
2 34 1 2 active sync /dev/hdg1
3 34 65 3 active sync /dev/hdh1
4 56 65 4 active sync /dev/hdj1
5 56 1 5 active sync /dev/hdi1
Bei mir hat das Ganze in der o.a. Konfiguration 13 Stunden gedauert, also nicht gerade kurz vor der Party anwerfen ;)
Erstaunlicherweise hat die Geschwindigkeit in der das RAID reorganisiert wurde ab 60% Fertigstellungsgrad stark zu genommen.
Am Ende sollte es dann so
/dev/md0:
Version : 00.90.03
Creation Time : Sat Mar 31 16:16:10 2007
Raid Level : raid5
Array Size : 1465167680 (1397.29 GiB 1500.33 GB)
Used Dev Size : 293033536 (279.46 GiB 300.07 GB)
Raid Devices : 6
Total Devices : 6
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun Jun 10 03:04:06 2007
State : clean
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 32K
UUID : 8658ad4a:b318e342:405852c9:e0e609bf
Events : 0.571120
Number Major Minor RaidDevice State
0 33 1 0 active sync /dev/hde1
1 33 65 1 active sync /dev/hdf1
2 34 1 2 active sync /dev/hdg1
3 34 65 3 active sync /dev/hdh1
4 56 65 4 active sync /dev/hdj1
5 56 1 5 active sync /dev/hdi1
aussehen.
Jetzt gibt es nur noch ein Problem zu lösen. Das, in meinem Falle ext3, Dateisystem weiss noch nichts von der grösseren Partition. Es ist weiterhin so gross wie zuvor. D.h. wenn mn jetzt einfach /dev/md0 wieder mountet sieht man keine Vergrösserung.
Daher muss jetzt noch das Dateisystem vergrössert werden. Dies gescheiht mittels des Tools resize2fs. reisze2fs verlangt ein sauberes Dateisystem ohne Fehler und setzt daher eine entsprechende Prüfung mittel e2fsck voraus.
Das Ganze mündet in 2 Befehlen:
e2fsck -f /dev/md0
resize2fs /dev/md0 366291920
Die zweite Angabe beim resize2fs ist die neue Anzahl der Blöcke die das Dateisystem umfassen soll. Man kriegt sie über fdisk /dev/md0 raus.
Die Prüfung und der resize dauern auch nochmal so ca. 1 Stunde. Danach kann man das Dateisystem wieder mounten.