[linux-l] IDE RAID Controller fuer 2 Festplatten, Empfehlung

Volker Wegert mail at volker-wegert.de
Mo Okt 10 19:24:08 CEST 2005


Hallo.

Kai Kuehne <kai.kuehne at gmail.com> writes:
> On 10/9/05, Volker Wegert <mail at volker-wegert.de> wrote:
>> Ich habe vor Jahren mal mit Promise- und Dawi-Geräten gearbeitet. Soweit ich
>> weiß, sind preiswerte Adapter in der Regel keine echten RAID-Controller,
>> sondern bilden den ganzen Krams in Software ab - dann kann man auch gleich das
>> Linux-interne SW-RAID nehmen...
> Aha.. ab wann ist bei dir denn preiswert?

Alles, was unter Schmerzgrenze für Heim-Server ist, ist per definitionem
minestens billich und maximal preiswert. ;-)

> Wollte mir das rumgebastel mit md eigentlich ersparen...

Nicht sehr viel Gebastel notwendig ist - das Ganze ist in einer halben Stunde
zu schaffen. Die folgende Beschreibung geht davon aus, daß ein bestehendes
System auf RAID umgesetzt werden soll. Sie stammt noch von einem
2.4er-woody-System, ich hoffe, der Kram stimmt auch für aktuelle Systeme noch.
Da die erste Festplatte bereits teilweise belegt ist, werden die zu
spiegelnden Bereiche zunächst im degraded mode nur auf der zweiten Festplatte
eingerichtet; sie sind dann zwar bereits voll funktionsfähig, aber natürlich
noch nicht gegen Datenverlust gesichert. Dann wird das System in die neu
eingerichteten RAID-Bereiche verschoben und dort getestet. Wenn alle Dateien
erfolgreich umgezogen sind, wird die erste Platte ebenfalls in das RAID
aufgenommen, womit die echte Spiegelung aktiviert wird und die
Ausfallsicherheit hergestellt wird.

Zuerst wird die zweite Festplatte partitioniert. Diese Partitionierung muß
genau eingehalten und dokumentiert werden, und sie muß insbesondere (später)
auf beiden Platten identisch eingerichtet werden, damit kein Speicherplatz
verschwendet wird. Das RAID-Subsystem nimmt nämlich ansonsten die Größe der
kleineren Partition als Maß der Größe des gespiegelten Bereichs an.

Jetzt wird die Konfigurationsdatei /etc/raidtab mit einem beliebigen Editor
erstellt. Diese Datei enthält für jedes der RAID-Laufwerke einen Abschnitt, in
dem zunächst die allgemeinen Einstellungen für dieses Laufwerk festgelegt
werden. Daran schließen sich unmittelbar die Zuweisungen der für dieses
Laufwerk zu verwendenden Partitionen an. Eine solche Definition sieht etwa wie
folgt aus:

,----
| raiddev /dev/mdX
|         raid-level 1
|         nr-raid-disks 2
|         nr-spare-disks 0
|         chunk-size 16
|         persistent-superblock 1
|         device /dev/sdbX
|         raid-disk 0
|         device /dev/sdaX
|         raid-disk 1
`----

Wie man sieht, war das ein SCSI-System. :-)

Strenggenommen ist diese Datei nur zur erstmaligen Initialisierung des Arrays
notwendig, da durch die Option persistent-superblock dafür gesorgt wird, daß
jede einzelne RAID-Partition die notwendigen Informationen zur Konfiguration
des Arrays enthält (ansonsten wäre es nicht möglich, vom Array zu booten). Die
Datei sollte aber bei allen Änderungen aktualisiert werden, weil dies etwaige
Wiederherstellungsoperationen sehr vereinfacht.

Zur Initialisierung des RAID-Systems werden jetzt die Partitionen auf der
ersten Platte zusätzlich mit der Angabe failed-disk 1 versehen (unmittelbar
hinter raid-disk 1), damit das RAID-System diese Partitionen bis auf weiteres
nicht antastet. Wenn man das vergisst, darf man gleich von vorne anfangen :-).

Jetzt werden die RAID-Arrays im degraded mode initialisiert:

,----
| server:~# mkraid /dev/md0
| ...
`----

Der Zustand der Arrays kann zur Laufzeit in der Datei /proc/mdstat eingesehen
werden. Hier werden auch etwaige Recovery-Operationen angezeigt. Bevor jetzt
der Umzug der Systemdaten beginnt, sollte einmal kontrolliert werden, ob der
Kernel die RAID-Partitionen auch schon beim Systemstart erkennt. Während des
Bootvorgangs müssen für jede der vier Bereiche Meldungen wie "md: created mdX"
erscheinen.  Wenn die Arrays automatisch erkannt und initialisiert werden,
können die Datenbereiche umziehen.

Dem Boot-Loader muß natürlich auch noch mitgeteilt werden, daß sich die
Partitionen verschoben haben. Außerdem muß GRUB noch in den Bootsektoren auf
beiden Festplatten installiert werden: 

,----
| server:~# grub
| grub> setup (hd0,0) (hd0,0)
| grub> setup (hd1,0) (hd1,0)
| grub> quit
`----

Dieser etwas umständliche Installationsweg ist notwendig, damit auch bei einem
Totalausfall der ersten Platte korrekt von der zweiten Platte gebootet werden
kann - immer vorausgesetzt, der Controller / das BIOS unterstützt
das. Prinzipiell sollte es egal sein, von welcher Partition man den Kernel
bootet, da nach dem nächsten Neustart ohnehin alles von den RAID-Arrays
gezogen wird. Da als nächstes die Spiegelung vervollständigt werden soll, ist
es ohnehin angebracht, das System einmal komplett durchzustarten.

Wie bereits angesprochen sollten beide Festplatten eine identische
Partitionstabelle bekommen; deshalb wird jetzt die Partitionierung der
zweiten Platte auch auf der ersten Festplatte eingetragen. Anschließend werden
die zur Installation benötigten Zeilen "failed-disk 1" aus der Datei
/etc/raidtab entfernt und die Partitionen der ersten Platte mit denen der
zweiten Platte synchronisiert:

,----
| server:~# raidhotadd /dev/md0 /dev/sda1 
| ...
`----

Die Synchronisation läuft im Hintergrund ab, wobei ohnehin freie I/O-Kapazität
genutzt wird, so daß der laufende Betrieb möglichst wenig beeinträchtigt
wird. Dennoch ist es sinnvoll, die Synchronisation abzuwarten.

Weitere Infos unter http://www.linuxhaven.de/dlhp/HOWTO/DE-Software-RAID-HOWTO.html

HTHALM
  Volker

-- 
* Volker Wegert * http://www.volker-wegert.de/contact *
* "In my opinion MS is a lot better at making money than it is at making 
* good operating systems." (Linus Torvalds)  
* 




Mehr Informationen über die Mailingliste linux-l