Debian Soft-Raid: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
Um Raid-Array's zu verwalten, kommt mdadm zum Einsatz. Damit die Array-Größe und Dateisystem-Größe später problemlos durch hinzufügen einer weiteren Festplatte erweitert werden kann, kommt der Logical Volume Manager (lvm) zum Einsatz. | Um Raid-Array's zu verwalten, kommt mdadm zum Einsatz. Damit die Array-Größe und Dateisystem-Größe später problemlos durch hinzufügen einer weiteren Festplatte erweitert werden kann, kommt der Logical Volume Manager (lvm) zum Einsatz. | ||
Das komplette Vorgehen incl. Ersetzen defekter und Erweiterung um weitere Festplatten ist einmal Kommandozeilen- und einmal [[Debian_Webmin|Webmin]] basiert beschrieben. | |||
==Installation== | '''Annahme:''' | ||
:4 Festplatten '''/dev/sdb''' '''/dev/sdc''' '''/dev/sdd''' '''/dev/sde''': | |||
:Es wird der Einfachheit halber nur jeweils eine Partition vom Typ Linux Raid angelegt. Die Devicenamen sind dann '''/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1''' | |||
:'''/dev/sdb1 /dev/sdc1 /dev/sdd1''' werden zunächst zu einem Raid5-Array zusammengefasst. '''/dev/sde1''' wird später dem Array zur online kapazitätserweiterung hinzugefügt.: | |||
:Das Raid Array wird in den Ordner '''/home/shares''' gemounted | |||
Die Devicenamen (/dev/sdb ...) können bei Bedarf mit Hilfe des Befehls ermittelt werden | |||
fdisk -l | |||
==Kommandozeile== | |||
===Installation=== | |||
apt-get install initramfs-tools mdadm lvm2 | apt-get install initramfs-tools mdadm lvm2 | ||
Nach dem Download startet ein Script. In diesem OK anwählen | Nach dem Download startet ein Script. In diesem OK anwählen | ||
. | . | ||
Arryas: all und Return betätigen | |||
===Präparieren der Festplatten=== | ====Präparieren der Festplatten==== | ||
Partitionieren der Festplatten (alle Daten gehen verloren) | Partitionieren der Festplatten (alle Daten gehen verloren) | ||
Zeile 49: | Zeile 55: | ||
Sämtliche Schritte für die anderen Festplatten ('''dev/sdc''' und '''/dev/sdd''') wiederholen. | Sämtliche Schritte für die anderen Festplatten ('''dev/sdc''' und '''/dev/sdd''') wiederholen. | ||
{{Hinweis| | |||
Falls auf eine der Festplatten bereits eine Partition war, die gelöscht wurde, sollte der Rechner vor dem Fortsetzen '''unbedingt''' neu gestartet werden, da ansonsten das Anlegen des Raid-Arrays mit einer Fehlermeldung "Device busy" scheitern könnte.}} | |||
===Raid Array anlegen=== | ====Raid Array anlegen==== | ||
mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 '''/dev/sdb1''' '''/dev/sdc1''' '''/dev/sdd1''' | mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 '''/dev/sdb1''' '''/dev/sdc1''' '''/dev/sdd1''' | ||
Eine Auflistung der beteiligten Festplatten erscheint. | Eine Auflistung der beteiligten Festplatten erscheint. | ||
Da moderne Linux-Versionen versuchen, Medien automatisch beim Booten zu mounten, kann es passieren, dass das Raid-Array nach dem Reboot des Rechners nicht mehr funktionsfähig ist. Mit folgenden Schritten wird verhindert, dass Linux die einzelnen Festplatten versucht automatisch zu mounten. | |||
durch den mdadm-Befehl haben alle beteiligten Festplatten den selben Volume Identifier UUID erhalten, sodass es genügt die folgenden Schritte für eine der beteiligten Festplatten ('''dev/sdb1''', '''/dev/sdc1''' oder '''/dev/sdd1''') auszuführen: | durch den mdadm-Befehl haben alle beteiligten Festplatten den selben Volume Identifier UUID erhalten, sodass es genügt die folgenden Schritte für eine der beteiligten Festplatten ('''dev/sdb1''', '''/dev/sdc1''' oder '''/dev/sdd1''') auszuführen: | ||
vol_id '''/dev/sdb1''' | vol_id '''/dev/sdb1''' | grep ID_FS_UUID= | ||
Ausgabe z.B.: | |||
Ausgabe | |||
ID_FS_UUID='''c84cf171:c72b4da5:e368bf24:bd0fce41''' | ID_FS_UUID='''c84cf171:c72b4da5:e368bf24:bd0fce41''' | ||
/etc/fstab bearbeiten: | /etc/fstab bearbeiten: | ||
Zeile 77: | Zeile 77: | ||
UUID='''ab7e3bf8:ec404b79:e368bf24:bd0fce41''' none auto nouser,noauto 0 0 | UUID='''ab7e3bf8:ec404b79:e368bf24:bd0fce41''' none auto nouser,noauto 0 0 | ||
====Status des Arrays abfragen==== | |||
===Status des Arrays abfragen=== | |||
mdadm --detail /dev/md0 | mdadm --detail /dev/md0 | ||
Zeile 97: | Zeile 88: | ||
Obwohl das Array degraded ist und während es regeneriert wird, ist es bereits verwendbar. | Obwohl das Array degraded ist und während es regeneriert wird, ist es bereits verwendbar. | ||
===LVM Einrichten=== | ====LVM Einrichten==== | ||
Auf diesem Raid-Array könnte nun einfach "ganz normal" ein EXT3-Filesystem angelegt werden. Deutlich flexibler ist das Array allerdings, wenn LVM (Logical Volume Management) zum Einsatz kommt. Damit ist es relativ einfach, das Array um eine weitere Platte zu erweitern, ohne das Array neu anlegen zu müssen. | Auf diesem Raid-Array könnte nun einfach "ganz normal" ein EXT3-Filesystem angelegt werden. Deutlich flexibler ist das Array allerdings, wenn LVM (Logical Volume Management) zum Einsatz kommt. Damit ist es relativ einfach, das Array um eine weitere Platte zu erweitern, ohne das Array neu anlegen zu müssen. | ||
Zeile 126: | Zeile 117: | ||
Folgende Zeile anhängen: | Folgende Zeile anhängen: | ||
/dev/mapper/vgraid5-lvm0 '''/home/shares''' ext3 rw,noatime 0 0 | /dev/mapper/vgraid5-lvm0 '''/home/shares''' ext3 rw,noatime 0 0 | ||
===Array erweitern=== | |||
Ein laufendes Array kann folgendermaßen um eine Festplatte erweitert werden, um die Kapazität zu erhöhen. Das Array und Dateisystem bleibt dabei komplett intakt. | |||
Neue Festplatte (/dev/sde) einbauen und Rechner einschalten. | |||
neue Festplatte partitionieren: | |||
fdisk /dev/sde | |||
Neue Raid-Partition entsprechend obiger Anleitung anlegen | |||
Neue Festplatte dem Array hinzufügen: | |||
mdadm --add /dev/md0 '''/dev/sde1''' | |||
Staus abfragen: | |||
mdadm --detail /dev/md0 | |||
Ausgabe: | |||
... | |||
Number Major Minor RaidDevice State | |||
0 8 1 0 active sync /dev/sdb1 | |||
1 8 17 1 active sync /dev/sdc1 | |||
2 8 33 2 active sync /dev/sdd1 | |||
3 8 49 - spare /dev/sde1 | |||
Die neue Festplatte wurde als Hot Spare ins Array eingebunden. D.h. wenn nun eine Festplatte ausfallen würde, würde die Hot Spare Festplatte sofort automatisch ins Array eingebunden und neu initialisiert. Es soll aber hier die Kapazität des Array's erweitert werden. Dies erfolgt mit folgendem Befehl: | |||
mdadm --grow --raid-devices=4 /dev/md0 | |||
Staus abfragen: | |||
mdadm --detail /dev/md0 | |||
Ausgabe: | |||
... | |||
State : clean, recovering | |||
... | |||
Number Major Minor RaidDevice State | |||
0 8 1 0 active sync /dev/sdb1 | |||
1 8 17 1 active sync /dev/sdc1 | |||
2 8 33 2 active sync /dev/sdd1 | |||
3 8 49 3 active sync /dev/sde1 | |||
LVM Physical Volume vergrößern: | |||
pvresize /dev/md0 | |||
Logical Volume vergrößern: | |||
lvresize /dev/vgraid5/lvm0 /dev/md0 | |||
Dateisystem erweitern: | |||
resize2fs /dev/vgraid5/lvm0 | |||
===Festplatte ersetzen=== | |||
Falls eine Festplatte ausgefallen ist, muß diese ersetzt werden. | |||
Mit dem Befehl | |||
mdadm --detail /dev/md0 | |||
zunächst ermitteln, welche Festplatte ausgefallen ist. Ausgabe z.B. : | |||
... | |||
Number Major Minor RaidDevice State | |||
0 8 1 0 active sync /dev/sdb1 | |||
1 8 17 1 active sync /dev/sdc1 | |||
2 0 0 2 removed | |||
=> '''/dev/sdd''' ist ausgefallen | |||
Den Rechner ausschalten und die entsprechende Festplatte austauschen. | |||
Rechner neu starten. | |||
Neue Festplatte partitionieren | |||
fdisk '''/dev/sdd''' | |||
Neue Raid-Partition entsprechend obiger Anleitung anlegen | |||
Neue Festplatte dem Array hinzufügen: | |||
mdadm --add /dev/md0 '''/dev/sdd1''' | |||
Status checken: | |||
mdadm --detail /dev/md0 | |||
Ausgabe: | |||
... | |||
Number Major Minor RaidDevice State | |||
0 8 1 0 active sync /dev/sdb1 | |||
1 8 17 1 active sync /dev/sdc1 | |||
3 8 33 2 spare rebuilding /dev/sdd1 | |||
=> Raid5 Array wird neu initialisiert | |||
===Array neu initialisieren=== | |||
Falls das Betriebssystem neu installiert werden muss, kann das Array folgendermaßen ohne Datenverlust neu eingerichtet werden (zunächst die Pakete gemäß obiger Anleitung installieren): | |||
mdadm --assemble --scan | |||
Anschließend die Arrayüberwachung gemäß obiger Anleitung neu einrichten. | |||
Mount beim Systemstart: | |||
vi /etc/fstab | |||
Folgende Zeile anhängen: | |||
/dev/mapper/vgraid5-lvm0 '''/home/shares''' ext3 rw,noatime 0 0 | |||
Rechner neu starten. | |||
Dabei wird die LVM Volume Group und das LVM Volume automatisch neu initialisiert. | |||
==Webmin== | |||
Voraussetzung: | |||
[[Debian_Webmin|webmin]] ist installiert | |||
Webbrowser starten und in webmin einloggen. | |||
===Installation=== | |||
* Menü '''System/Software Packages''' auswählen | |||
* '''Package from APT''' anklicken | |||
* In die Textbox daneben "hdparm initramfs-tools mdadm lvm2" eintragen | |||
* Button '''Install''' anklicken | |||
====Präparieren der Festplatten==== | |||
# Menü '''Hardware/Partitions on Logical Discs''' aufrufen | |||
# Zu formatierende IDE- oder SCSI-Festplatte aus der Liste auswählen | |||
# '''add primary partition''' auswählen | |||
# '''Linux Raid''' aus der Pulldown-Liste auswählen. Evtl. Partitionsgröße mittels '''Extents''' rechts daneben ändern. | |||
# Button '''Create''' anklicken | |||
# '''Return to disk list''' anwählen | |||
Schritte 2 bis 6 für alle gewünschten Festplatten wiederholen | |||
====Raid Array anlegen==== | |||
* Menü '''Hardware/Linux RAID''' aufrufen | |||
* '''Redundant (RAID5)''' aus der Pulldown-Liste auswählen | |||
* '''Create RAID device of level''' auswählen | |||
* Einstellungen vornehmen: | |||
Persistent Superblock: Yes | |||
Parity Algorithm: Default | |||
Chunk Size: 32Kb | |||
Partitions in RAID: Die gewünschten Partitionen aus der Liste mit Shift-Taste markieren | |||
Spare Partitions: Falls nicht alle Partitionen dem Array hinzugefügt wurden, können diese hier als Hot Spare angewählt werden. Hot Spares sind nicht unmittelbar Teil eines Array's, sondern werden automatisch eingebunden und neu initialisiert, sobald eine Festplatte ausfallen sollte. | |||
Force Initialisation of RAID: Yes | |||
* Button '''Create''' anwählen | |||
* Nach dem Anlegen des Arrays (Mauszeiger erscheint als Sanduhr; dauert etwas) wird automatisch ins RAID-Hauptmenü zurückgekehrt. | |||
Da moderne Linux-Versionen versuchen, Medien automatisch beim Booten zu mounten, kann es passieren, dass das Raid-Array nach dem Reboot des Rechners nicht mehr funktionsfähig ist. Mit folgenden Schritten wird verhindert, dass Linux die einzelnen Festplatten versucht automatisch zu mounten. | |||
Durch das Anlegen des Arrays haben alle beteiligten Festplatten den selben Volume Identifier UUID erhalten, sodass es genügt die folgenden Schritte für eine der beteiligten Festplatten ('''dev/sdb1''', '''/dev/sdc1''' oder '''/dev/sdd1''') auszuführen: | |||
* Menü '''Others/Command Shell''' aufrufen | |||
* In Eingabezeile neben '''Execute Command'''' eingeben: | |||
vol_id /dev/sdb1 | grep ID_FS_UUID= | |||
* Ausgabe z.B. | |||
ID_FS_UUID='''80ce1168:8077513e:9d4deba6:47ca997f''' | |||
* In Eingabezeile neben '''Execute Command'''' der Reihe nach die beiden Befehle eingeben (UUID mit eben ermittelter ID_FS_UUID ersetzen): | |||
echo "#No RAID Automount" >> /etc/fstab | |||
echo "UUID='''80ce1168:8077513e:9d4deba6:47ca997f''' none auto nouser,noauto 0 0" >> /etc/fstab | |||
====Array Überwachung==== | |||
* '''Hardware/Linux RAID''' aufrufen | |||
Folgende Einstellungen vornehmen: | |||
Monitoring enabled: Yes | |||
Send notifications to: Email-Adresse eingeben, an die Problemmails gesendet werden sollen | |||
From Adress: Default (Root) oder eine andere Absenderadresse eingeben | |||
Command to run when problems are detected: leer lassen | |||
* Button '''Save''' anwählen | |||
====LVM Einrichten==== | |||
* Menü '''Hardware/Logical Volume Management''' | |||
Volume Group anlegen: | |||
* '''Add a new volume group.''' anwählen | |||
* Folgende Eingaben vornehmen: | |||
Volume group name: vgraid5 | |||
Initial physical device: RAID device 0 | |||
Allocation block size: default | |||
* Button '''Create''' anklicken | |||
Logical Volume anlegen: | |||
* Reiter'''Logical Volumes''' anwählen | |||
* '''Create a logical volume in vgraid5.''' anklicken | |||
* Folgende Eingaben vornehmen: | |||
Volume name: lvm0 | |||
Volume size: Vorgabewert übernehmen, sodass die komplette Volume group ausgenutzt wird | |||
Volume access: read /write | |||
Volume striping: Disabled | |||
* Button '''Create''' anklicken | |||
Dateisystem anlegen und mounten: | |||
* Menü '''Hardware/Logical Volume Management/Logical Volumes''' anwählen, falls nicht bereits angewählt (sollte der Fall sein, wenn dieser Schritt unmittelbar nach dem anlegen des logical volumes ausgeführt wird) | |||
* '''lvm0''' anklicken | |||
* Im unteren Bereich '''Linux Native (ext3)''' aus der Dropdown-Liste auswählen | |||
* '''Create filesystem of type:''' anklicken | |||
* Im folgenden Fenster alle Einstellungen auf den vorgegebenen Einstellungen belassen und '''Create''' anklicken | |||
* nachdem das Filesystem erstellt ist, '''return to volume groups''' anwählen | |||
* '''lvm0''' nochmals anklicken | |||
* Im unteren Bereich in dem Textfeld neben '''Mount LV on:''' den Mountpoint eingeben: '''/home/shares''' | |||
* '''Mount LV on:''' anklicken | |||
* Im folgenden Fenster sind normalerweise keine Änderungen nötig. Button '''Create''' anklicken | |||
* '''Return to Filesystem list''' anwählen. | |||
{{Hinweis|Die Mount Optionen können im Menü '''System/Disk and Network Filesystem''' jederzeit geändert werden.}} | |||
===Array erweitern=== | |||
Ein laufendes Array kann folgendermaßen um eine Festplatte erweitert werden, um die Kapazität zu erhöhen. Das Array und Dateisystem bleibt dabei komplett intakt. | |||
Neue Festplatte ins Raid Array aufnehmen: | |||
* Neue Festplatte einbauen und Rechner einschalten | |||
* Neue Festplatte mit '''Linux RAID''' partitionieren wie oben beschrieben | |||
* Menü '''Hardware/Linux RAID''' anwählen | |||
* Das Array '''/dev/md0''' anklicken | |||
* '''Add Partition''' anklicken, um die neue Festplatte als neues Hotspare dem Array hinzuzufügen. Dieser Vorgang dauert etwas. Mauszeiger verwandelt sich in eine Sanduhr. | |||
* Anschließend wird automatisch in das Hauptfenster '''Linux RAID''' zurückgekehrt | |||
* Das Array '''/dev/md0''' erneut anklicken | |||
* Button '''Grow RAID''' anklicken, um dad Hotspare Laufwerk in's Array endgültig aufzunehmen | |||
* Anschließend wird automatisch in das Hauptfenster '''Linux RAID''' zurückgekehrt | |||
* Das Array '''/dev/md0''' erneut anklicken | |||
* Der '''RAID status''' sollte "clean, recovering" sein, während das Array auf die neue Festplatte erweitert wird. Unter '''rebuilding Progress''' kann der Fortschritt beobachtet werden (Seite im Webbrowser refreshen). | |||
LVM erweitern: | |||
Das LVM sollte und kann erst erweitert werden, sobald der Rebuild komplett abgeschlossen ist. | |||
Dies ist leider nicht graphisch möglich, sondern es sind wieder Befehle nötig. | |||
* Menü '''/Others/Command Shell''' aufrufen | |||
* Folgende Befehle eingeben: | |||
pvresize /dev/md0 | |||
lvresize /dev/vgraid5/lvm0 /dev/md0 | |||
resize2fs /dev/vgraid5/lvm0 | |||
===Festplatte ersetzen=== | |||
Falls eine Festplatte ausgefallen ist, muß diese ersetzt werden. Solange keine weitere Festplatte ausfällt, sind die Daten weiterhin unbeschadet vorhanden. | |||
* Menü '''Hardware/Linux RAID''' anwählen | |||
* Raid Device '''/dev/md0''' anklicken | |||
* Anhand der aufgeführten Festplatten, die noch im Raid-Verbund funktionsfähig sind, die defekte Festplatte ermitteln | |||
* Rechner ausschalten und defekte Festplatte mit neuer Festplatte ersetzen (mindestens die selbe Kapazität wie die defekte) | |||
* Rechnere einschalten und Webmin starten | |||
* Neue Festplatte mit '''Linux RAID''' partitionieren wie oben beschrieben | |||
* Menü '''Hardware/Linux RAID''' anwählen | |||
* Das Array '''/dev/md0''' anklicken | |||
* '''Add Partition''' anklicken, um die neue Festplatte als in's Array aufzunehmen | |||
* Anschließend wird automatisch in das Hauptfenster '''Linux RAID''' zurückgekehrt | |||
* Das Array '''/dev/md0''' erneut anklicken | |||
===Array neu initialisieren=== | |||
alls das Betriebssystem neu installiert werden muss, kann das Array folgendermaßen ohne Datenverlust neu eingerichtet werden (zunächst Webmin und die Pakete gemäß obiger Anleitung installieren): | |||
Webmin im Webbrowser aufrufen. | |||
* Menü '''Others/Command Shell''' aufrufen | |||
* Folgenden Befehl eingeben: | |||
mdadm --assemble --scan | |||
*Anschließend die Arrayüberwachung gemäß obiger Anleitung neu einrichten. | |||
* Rechner neu starten. Dabei wird die LVM Volume Group und das LVM Volume automatisch neu initialisiert. | |||
* Webmin Menü '''System/Disk and Network Filesystems''' aufrufen | |||
* Aus der Dropdown-Liste '''Linux Native Filesystem (ext3)''' auswählen | |||
* Button '''Add Mount''' anklicken | |||
* In der Folgenden Maske: | |||
Mounted As: '''/home/shares''' | |||
Linux Native Filesystem: '''LVM Logical Volume''' | |||
Die restlichen Optionen sollten für die meisten Anwendungsfälle bereits passend eingestellt sein | |||
* Button '''Create''' anklicken | |||
==Array Überwachung== | ==Array Überwachung== | ||
Achtung | {{Achtung| | ||
Folgende Schritte erst ausführen, nachdem das Raid Array vollständig hergestellt ist. | Folgende Schritte erst ausführen, nachdem das Raid Array vollständig hergestellt ist. | ||
Ansonsten könnte es passieren, dass das Raid-Array als ein degraded Array aus zwei Festplatten und ein Hotspare in die mdadm.conf eingetragen wird. Deshalb unbedingt vor dem Weitermachen mit folgenden Befehl überprüfen, ob das Raid5-Array vollständig (State: clean) aufgebaut wurde: | Ansonsten könnte es passieren, dass das Raid-Array als ein degraded Array aus zwei Festplatten und ein Hotspare in die mdadm.conf eingetragen wird. Deshalb unbedingt vor dem Weitermachen mit folgenden Befehl überprüfen, ob das Raid5-Array vollständig (State: clean) aufgebaut wurde:}} | ||
mdadm --detail /dev/md0 | mdadm --detail /dev/md0 | ||
Wenn Array komplett hergestellt: | Wenn Array komplett hergestellt: | ||
Zeile 138: | Zeile 378: | ||
dpkg-reconfigure mdadm | dpkg-reconfigure mdadm | ||
Folgende Fragen beantworten: | Folgende Fragen beantworten: | ||
OK anwählen | |||
MD-Arrays nötig für root Filesystem: no | |||
Monatliche Redundanzprüfung: Ja | Monatliche Redundanzprüfung: Ja | ||
Überwachungsdämon starten: ja | Überwachungsdämon starten: ja | ||
Email-Empfänger für Emailbenachrichtigungen: Email-Adresse eingeben z.B. root | Email-Empfänger für Emailbenachrichtigungen: Email-Adresse eingeben z.B. root@domain.org | ||
Überwachungsdämon neu starten: | Überwachungsdämon neu starten: | ||
/etc/init.d/mdadm restart | /etc/init.d/mdadm restart | ||
'''Bug in Debian Squeeze:''' | |||
In Debian Squeeze enthält das Script zum Check des Array's einen Bug, der wöchentlich eine Notification Mail mit folgendem Inhalt versendet: | |||
checkarray: I: selecting idle I/O scheduling class for resync of md0. | |||
Um diese Notification Mail zu verhindern: | |||
vi /usr/share/mdadm/checkarray | |||
Ab Zeile 195 den Block: | |||
if [ -n "$resync_pid" ]; then | |||
echo "$PROGNAME: I: selecting $ionice I/O scheduling class for resync of $array." >&2 | |||
ionice -p "$resync_pid" $arg | |||
break | |||
fi | |||
Folgendermaßen abändern: | |||
if [ -n "$resync_pid" ]; then | |||
'''[ $quiet -lt 1 ] && '''echo "$PROGNAME: I: selecting $ionice I/O scheduling class for resync of $array." >&2 | |||
ionice -p "$resync_pid" $arg | |||
break | |||
fi |
Aktuelle Version vom 7. August 2011, 08:12 Uhr
Einleitung
Linux bietet mächtige Tools um ein Software-Raid zu betreiben. Es ist dazu kein besonderer Raid-Controller erforderlich. Es können sämtliche Festplatten verwendet werden, die vom Linux Kernel erkannt werden. Es ist dabei egal, ob diese an IDE, SATA, USB oder Firewire Schnittstellen (auch gemischt) hängen. Auch die Größe und Typ der Festplatten ist unerheblich. Die Größe des Raid-Array wird von der kleinsten zur Verfügung stehenden Partition bestimmt. Es können auch mehrere Array's auf den zur Verfügung stehenden Festplatten eingerichtet werden, z.B. Raid0 für SWAP und Raid5 für Daten.
Im folgenden wird beschrieben wie ein Raid5 einzurichten ist, da dieses wohl am häufigsten für Fileserver verwendet wird.
Um Raid-Array's zu verwalten, kommt mdadm zum Einsatz. Damit die Array-Größe und Dateisystem-Größe später problemlos durch hinzufügen einer weiteren Festplatte erweitert werden kann, kommt der Logical Volume Manager (lvm) zum Einsatz.
Das komplette Vorgehen incl. Ersetzen defekter und Erweiterung um weitere Festplatten ist einmal Kommandozeilen- und einmal Webmin basiert beschrieben.
Annahme:
- 4 Festplatten /dev/sdb /dev/sdc /dev/sdd /dev/sde:
- Es wird der Einfachheit halber nur jeweils eine Partition vom Typ Linux Raid angelegt. Die Devicenamen sind dann /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
- /dev/sdb1 /dev/sdc1 /dev/sdd1 werden zunächst zu einem Raid5-Array zusammengefasst. /dev/sde1 wird später dem Array zur online kapazitätserweiterung hinzugefügt.:
- Das Raid Array wird in den Ordner /home/shares gemounted
Die Devicenamen (/dev/sdb ...) können bei Bedarf mit Hilfe des Befehls ermittelt werden
fdisk -l
Kommandozeile
Installation
apt-get install initramfs-tools mdadm lvm2
Nach dem Download startet ein Script. In diesem OK anwählen . Arryas: all und Return betätigen
Präparieren der Festplatten
Partitionieren der Festplatten (alle Daten gehen verloren)
fdisk /dev/sdb
Fdisk ist über Buchstaben zu bedienen (m für Hilfe)
checken, ob korrekte Fesplatte gewählt wurde
p
Die Partitionen der Festplatte werden aufgelistet
Falls Partitionen bestehen, alle entfernen
d Partitionsnummer die gelöscht werden soll eingeben (z.B. 1) Wiederholen für alle Partitionen, die gelöscht werden sollen
Eine neue Partition anlegen:
n p (primäre Partition) Partitionsnummer (1-4) : 1 Erster Zylinder: enter um Vorgabewert zu übernehmen letzter Zylinder: enter um Vorgabewert zu übernehmen, dh. komplette Festplatte. Bei Bedarf evtl. anpassen
Den Dateisystemtyp festlegen:
t Hexcode (L um Liste anzuzeigen): fd Nochmals p aufrufen, um die neue Partitionstabelle zu prüfen. Wenn OK, dann mit w die Partitionierung auf die Festplatte zu schreiben.
Sämtliche Schritte für die anderen Festplatten (dev/sdc und /dev/sdd) wiederholen.
Raid Array anlegen
mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
Eine Auflistung der beteiligten Festplatten erscheint.
Da moderne Linux-Versionen versuchen, Medien automatisch beim Booten zu mounten, kann es passieren, dass das Raid-Array nach dem Reboot des Rechners nicht mehr funktionsfähig ist. Mit folgenden Schritten wird verhindert, dass Linux die einzelnen Festplatten versucht automatisch zu mounten.
durch den mdadm-Befehl haben alle beteiligten Festplatten den selben Volume Identifier UUID erhalten, sodass es genügt die folgenden Schritte für eine der beteiligten Festplatten (dev/sdb1, /dev/sdc1 oder /dev/sdd1) auszuführen:
vol_id /dev/sdb1 | grep ID_FS_UUID=
Ausgabe z.B.:
ID_FS_UUID=c84cf171:c72b4da5:e368bf24:bd0fce41
/etc/fstab bearbeiten:
vi /etc/fstab
Folgendes einfügen (UUID mit der UUID des vol_id-Befehls ersetzen):
#No Automount for Raid Devices UUID=ab7e3bf8:ec404b79:e368bf24:bd0fce41 none auto nouser,noauto 0 0
Status des Arrays abfragen
mdadm --detail /dev/md0
Neben der Anzahl der Platten, dem Raid-Level (5) wird der Status angegeben. Dieser ist nach dem anlegen "clean, degraded, recovering". Das Array muß erst komplett initialisiert werden (Recovering). Das Recovery kann je nach Größe und Geschwindigkeit der Platten einige Stunden in Anspruch nehmen.
Während der Regenerierung kann der Fortschritt und die restliche Dauer angezeigt werden:
cat /proc/mdstat
Obwohl das Array degraded ist und während es regeneriert wird, ist es bereits verwendbar.
LVM Einrichten
Auf diesem Raid-Array könnte nun einfach "ganz normal" ein EXT3-Filesystem angelegt werden. Deutlich flexibler ist das Array allerdings, wenn LVM (Logical Volume Management) zum Einsatz kommt. Damit ist es relativ einfach, das Array um eine weitere Platte zu erweitern, ohne das Array neu anlegen zu müssen.
Initialisieren des Arrays für die Verwendung mit LVM:
pvcreate /dev/md0
Volume Group vgraid5 anlegen:
vgcreate vgraid5 /dev/md0
Die tatsächliche Größe des Arrays ermitteln:
vgdisplay vgraid5 | grep Free
Ausgabe von vgdisplay z.B:
Free PE / Size 190775/ 745.21 GB
Anlegen des Volumes (FREE_PE mit eben ermittelten PE-Wert - im Beispiel 190775 - ersetzen):
lvcreate -l FREE_PE vgraid5 -n lvm0
EXT3 Filesystem anlegen:
mkfs.ext3 /dev/vgraid5/lvm0
Mounten des Arrays bzw. lvm Volumes in den Ordner /home/shares. In der Anleitung Samba wird standardmäßgi dieses Verzeichnis benutzt, um Netzwerkfreigaben anzulegen. D.h. die Netzwerkfreigaben werden auf dem Raid5-Array angelegt:
mkdir -p /home/shares mount /dev/vgraid5/lvm0 /home/shares
Mount beim Systemstart:
vi /etc/fstab
Folgende Zeile anhängen:
/dev/mapper/vgraid5-lvm0 /home/shares ext3 rw,noatime 0 0
Array erweitern
Ein laufendes Array kann folgendermaßen um eine Festplatte erweitert werden, um die Kapazität zu erhöhen. Das Array und Dateisystem bleibt dabei komplett intakt.
Neue Festplatte (/dev/sde) einbauen und Rechner einschalten. neue Festplatte partitionieren:
fdisk /dev/sde
Neue Raid-Partition entsprechend obiger Anleitung anlegen
Neue Festplatte dem Array hinzufügen:
mdadm --add /dev/md0 /dev/sde1
Staus abfragen:
mdadm --detail /dev/md0
Ausgabe:
... Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sdb1 1 8 17 1 active sync /dev/sdc1 2 8 33 2 active sync /dev/sdd1 3 8 49 - spare /dev/sde1
Die neue Festplatte wurde als Hot Spare ins Array eingebunden. D.h. wenn nun eine Festplatte ausfallen würde, würde die Hot Spare Festplatte sofort automatisch ins Array eingebunden und neu initialisiert. Es soll aber hier die Kapazität des Array's erweitert werden. Dies erfolgt mit folgendem Befehl:
mdadm --grow --raid-devices=4 /dev/md0
Staus abfragen:
mdadm --detail /dev/md0
Ausgabe:
... State : clean, recovering ... Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sdb1 1 8 17 1 active sync /dev/sdc1 2 8 33 2 active sync /dev/sdd1 3 8 49 3 active sync /dev/sde1
LVM Physical Volume vergrößern:
pvresize /dev/md0
Logical Volume vergrößern:
lvresize /dev/vgraid5/lvm0 /dev/md0
Dateisystem erweitern:
resize2fs /dev/vgraid5/lvm0
Festplatte ersetzen
Falls eine Festplatte ausgefallen ist, muß diese ersetzt werden. Mit dem Befehl
mdadm --detail /dev/md0
zunächst ermitteln, welche Festplatte ausgefallen ist. Ausgabe z.B. :
... Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sdb1 1 8 17 1 active sync /dev/sdc1 2 0 0 2 removed
=> /dev/sdd ist ausgefallen
Den Rechner ausschalten und die entsprechende Festplatte austauschen. Rechner neu starten.
Neue Festplatte partitionieren
fdisk /dev/sdd
Neue Raid-Partition entsprechend obiger Anleitung anlegen
Neue Festplatte dem Array hinzufügen:
mdadm --add /dev/md0 /dev/sdd1
Status checken:
mdadm --detail /dev/md0
Ausgabe:
... Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sdb1 1 8 17 1 active sync /dev/sdc1 3 8 33 2 spare rebuilding /dev/sdd1
=> Raid5 Array wird neu initialisiert
Array neu initialisieren
Falls das Betriebssystem neu installiert werden muss, kann das Array folgendermaßen ohne Datenverlust neu eingerichtet werden (zunächst die Pakete gemäß obiger Anleitung installieren):
mdadm --assemble --scan
Anschließend die Arrayüberwachung gemäß obiger Anleitung neu einrichten.
Mount beim Systemstart:
vi /etc/fstab
Folgende Zeile anhängen:
/dev/mapper/vgraid5-lvm0 /home/shares ext3 rw,noatime 0 0
Rechner neu starten. Dabei wird die LVM Volume Group und das LVM Volume automatisch neu initialisiert.
Webmin
Voraussetzung: webmin ist installiert
Webbrowser starten und in webmin einloggen.
Installation
- Menü System/Software Packages auswählen
- Package from APT anklicken
- In die Textbox daneben "hdparm initramfs-tools mdadm lvm2" eintragen
- Button Install anklicken
Präparieren der Festplatten
- Menü Hardware/Partitions on Logical Discs aufrufen
- Zu formatierende IDE- oder SCSI-Festplatte aus der Liste auswählen
- add primary partition auswählen
- Linux Raid aus der Pulldown-Liste auswählen. Evtl. Partitionsgröße mittels Extents rechts daneben ändern.
- Button Create anklicken
- Return to disk list anwählen
Schritte 2 bis 6 für alle gewünschten Festplatten wiederholen
Raid Array anlegen
- Menü Hardware/Linux RAID aufrufen
- Redundant (RAID5) aus der Pulldown-Liste auswählen
- Create RAID device of level auswählen
- Einstellungen vornehmen:
Persistent Superblock: Yes Parity Algorithm: Default Chunk Size: 32Kb Partitions in RAID: Die gewünschten Partitionen aus der Liste mit Shift-Taste markieren Spare Partitions: Falls nicht alle Partitionen dem Array hinzugefügt wurden, können diese hier als Hot Spare angewählt werden. Hot Spares sind nicht unmittelbar Teil eines Array's, sondern werden automatisch eingebunden und neu initialisiert, sobald eine Festplatte ausfallen sollte. Force Initialisation of RAID: Yes
- Button Create anwählen
- Nach dem Anlegen des Arrays (Mauszeiger erscheint als Sanduhr; dauert etwas) wird automatisch ins RAID-Hauptmenü zurückgekehrt.
Da moderne Linux-Versionen versuchen, Medien automatisch beim Booten zu mounten, kann es passieren, dass das Raid-Array nach dem Reboot des Rechners nicht mehr funktionsfähig ist. Mit folgenden Schritten wird verhindert, dass Linux die einzelnen Festplatten versucht automatisch zu mounten.
Durch das Anlegen des Arrays haben alle beteiligten Festplatten den selben Volume Identifier UUID erhalten, sodass es genügt die folgenden Schritte für eine der beteiligten Festplatten (dev/sdb1, /dev/sdc1 oder /dev/sdd1) auszuführen:
- Menü Others/Command Shell aufrufen
- In Eingabezeile neben Execute Command' eingeben:
vol_id /dev/sdb1 | grep ID_FS_UUID=
- Ausgabe z.B.
ID_FS_UUID=80ce1168:8077513e:9d4deba6:47ca997f
- In Eingabezeile neben Execute Command' der Reihe nach die beiden Befehle eingeben (UUID mit eben ermittelter ID_FS_UUID ersetzen):
echo "#No RAID Automount" >> /etc/fstab echo "UUID=80ce1168:8077513e:9d4deba6:47ca997f none auto nouser,noauto 0 0" >> /etc/fstab
Array Überwachung
- Hardware/Linux RAID aufrufen
Folgende Einstellungen vornehmen:
Monitoring enabled: Yes Send notifications to: Email-Adresse eingeben, an die Problemmails gesendet werden sollen From Adress: Default (Root) oder eine andere Absenderadresse eingeben Command to run when problems are detected: leer lassen
- Button Save anwählen
LVM Einrichten
- Menü Hardware/Logical Volume Management
Volume Group anlegen:
- Add a new volume group. anwählen
- Folgende Eingaben vornehmen:
Volume group name: vgraid5 Initial physical device: RAID device 0 Allocation block size: default
- Button Create anklicken
Logical Volume anlegen:
- ReiterLogical Volumes anwählen
- Create a logical volume in vgraid5. anklicken
- Folgende Eingaben vornehmen:
Volume name: lvm0 Volume size: Vorgabewert übernehmen, sodass die komplette Volume group ausgenutzt wird Volume access: read /write Volume striping: Disabled
- Button Create anklicken
Dateisystem anlegen und mounten:
- Menü Hardware/Logical Volume Management/Logical Volumes anwählen, falls nicht bereits angewählt (sollte der Fall sein, wenn dieser Schritt unmittelbar nach dem anlegen des logical volumes ausgeführt wird)
- lvm0 anklicken
- Im unteren Bereich Linux Native (ext3) aus der Dropdown-Liste auswählen
- Create filesystem of type: anklicken
- Im folgenden Fenster alle Einstellungen auf den vorgegebenen Einstellungen belassen und Create anklicken
- nachdem das Filesystem erstellt ist, return to volume groups anwählen
- lvm0 nochmals anklicken
- Im unteren Bereich in dem Textfeld neben Mount LV on: den Mountpoint eingeben: /home/shares
- Mount LV on: anklicken
- Im folgenden Fenster sind normalerweise keine Änderungen nötig. Button Create anklicken
- Return to Filesystem list anwählen.
Hinweis: | |
Die Mount Optionen können im Menü System/Disk and Network Filesystem jederzeit geändert werden. |
Array erweitern
Ein laufendes Array kann folgendermaßen um eine Festplatte erweitert werden, um die Kapazität zu erhöhen. Das Array und Dateisystem bleibt dabei komplett intakt.
Neue Festplatte ins Raid Array aufnehmen:
- Neue Festplatte einbauen und Rechner einschalten
- Neue Festplatte mit Linux RAID partitionieren wie oben beschrieben
- Menü Hardware/Linux RAID anwählen
- Das Array /dev/md0 anklicken
- Add Partition anklicken, um die neue Festplatte als neues Hotspare dem Array hinzuzufügen. Dieser Vorgang dauert etwas. Mauszeiger verwandelt sich in eine Sanduhr.
- Anschließend wird automatisch in das Hauptfenster Linux RAID zurückgekehrt
- Das Array /dev/md0 erneut anklicken
- Button Grow RAID anklicken, um dad Hotspare Laufwerk in's Array endgültig aufzunehmen
- Anschließend wird automatisch in das Hauptfenster Linux RAID zurückgekehrt
- Das Array /dev/md0 erneut anklicken
- Der RAID status sollte "clean, recovering" sein, während das Array auf die neue Festplatte erweitert wird. Unter rebuilding Progress kann der Fortschritt beobachtet werden (Seite im Webbrowser refreshen).
LVM erweitern:
Das LVM sollte und kann erst erweitert werden, sobald der Rebuild komplett abgeschlossen ist.
Dies ist leider nicht graphisch möglich, sondern es sind wieder Befehle nötig.
- Menü /Others/Command Shell aufrufen
- Folgende Befehle eingeben:
pvresize /dev/md0 lvresize /dev/vgraid5/lvm0 /dev/md0 resize2fs /dev/vgraid5/lvm0
Festplatte ersetzen
Falls eine Festplatte ausgefallen ist, muß diese ersetzt werden. Solange keine weitere Festplatte ausfällt, sind die Daten weiterhin unbeschadet vorhanden.
- Menü Hardware/Linux RAID anwählen
- Raid Device /dev/md0 anklicken
- Anhand der aufgeführten Festplatten, die noch im Raid-Verbund funktionsfähig sind, die defekte Festplatte ermitteln
- Rechner ausschalten und defekte Festplatte mit neuer Festplatte ersetzen (mindestens die selbe Kapazität wie die defekte)
- Rechnere einschalten und Webmin starten
- Neue Festplatte mit Linux RAID partitionieren wie oben beschrieben
- Menü Hardware/Linux RAID anwählen
- Das Array /dev/md0 anklicken
- Add Partition anklicken, um die neue Festplatte als in's Array aufzunehmen
- Anschließend wird automatisch in das Hauptfenster Linux RAID zurückgekehrt
- Das Array /dev/md0 erneut anklicken
Array neu initialisieren
alls das Betriebssystem neu installiert werden muss, kann das Array folgendermaßen ohne Datenverlust neu eingerichtet werden (zunächst Webmin und die Pakete gemäß obiger Anleitung installieren): Webmin im Webbrowser aufrufen.
- Menü Others/Command Shell aufrufen
- Folgenden Befehl eingeben:
mdadm --assemble --scan
- Anschließend die Arrayüberwachung gemäß obiger Anleitung neu einrichten.
- Rechner neu starten. Dabei wird die LVM Volume Group und das LVM Volume automatisch neu initialisiert.
- Webmin Menü System/Disk and Network Filesystems aufrufen
- Aus der Dropdown-Liste Linux Native Filesystem (ext3) auswählen
- Button Add Mount anklicken
- In der Folgenden Maske:
Mounted As: /home/shares Linux Native Filesystem: LVM Logical Volume Die restlichen Optionen sollten für die meisten Anwendungsfälle bereits passend eingestellt sein
- Button Create anklicken
Array Überwachung
mdadm --detail /dev/md0
Wenn Array komplett hergestellt:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
dpkg-reconfigure mdadm
Folgende Fragen beantworten:
OK anwählen MD-Arrays nötig für root Filesystem: no Monatliche Redundanzprüfung: Ja Überwachungsdämon starten: ja Email-Empfänger für Emailbenachrichtigungen: Email-Adresse eingeben z.B. root@domain.org
Überwachungsdämon neu starten:
/etc/init.d/mdadm restart
Bug in Debian Squeeze:
In Debian Squeeze enthält das Script zum Check des Array's einen Bug, der wöchentlich eine Notification Mail mit folgendem Inhalt versendet:
checkarray: I: selecting idle I/O scheduling class for resync of md0.
Um diese Notification Mail zu verhindern:
vi /usr/share/mdadm/checkarray
Ab Zeile 195 den Block:
if [ -n "$resync_pid" ]; then echo "$PROGNAME: I: selecting $ionice I/O scheduling class for resync of $array." >&2 ionice -p "$resync_pid" $arg break fi
Folgendermaßen abändern:
if [ -n "$resync_pid" ]; then [ $quiet -lt 1 ] && echo "$PROGNAME: I: selecting $ionice I/O scheduling class for resync of $array." >&2 ionice -p "$resync_pid" $arg break fi