Debian Woody und Booten vom Software-Raid

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
Laril
Beiträge: 5
Registriert: 07.04.2004 16:12:16
Wohnort: Freiburg

Debian Woody und Booten vom Software-Raid

Beitrag von Laril » 16.04.2004 14:12:36

Hola folks.

Ich bin gerade dabei auf unserem neuen Server ein Software-Raid einzurichten. Dabei bin ich schon relativ weit gekommen (habe gerade vom Raid gebootet), aber ein paar Fragen sind dann doch offen geblieben. Ausserdem schreibe ich meine Story hier mal auf, damit vielleicht auch andere Leute was daraus lernen können. :-)

Meine Fragen (in Kürze; Details ganz unten):
* Wo speichert eigentlich lilo den Kernel und die initrd hin, so dass beim Booten der Zugriff darauf funktioniert?
* depmod -a funktioniert mit 2.4.25 nicht ganz wie gewünscht (viele "unresolved symbols"). Muss ich da die modutils und damit libc6 aktualisieren?




Die Vorgeschichte

Wir haben hier in unserer kleinen Firma einen Server (Debian Woody), der alles für uns erledigt: Router, DHCP, Email, Http, etc. Diese starke Beanspruchung bekommt allerdings den Festplatten irgendwie nicht. Zumindest hatten wir jetzt in relativ kurzen Abständen drei Plattenausfälle. Eine davon ist vollständig hinüber. Was blöd war, da zu dem Zeitpunkt das Backupkonzept noch nicht vollständig implementiert war. :(
Da der Server sehr wichtig ist und deshalb keine längeren Auszeiten haben sollte, war die Verwendung eines Mirroring-Raids naheliegend.


Die Story

Gesagt, getan und eine Promise FastTrak TX2000 Raid-Controller und drei Platten gekauft (siehe für eine ähnliche Geschichte auch http://www.debianforum.de/forum/viewtop ... ght=tx2000 in diesen Foren). Ich hatte vorher eigentlich angenommen, dass ich so einen Raid-Controller ähnlich wie eine Festplatte oder ein CD-Rom-Laufwerk verwenden kann: Einbauen, Platten anschließen, fertig. Weit gefehlt! Man braucht, wenn man das Teil verwenden will, natürlich im Betriebssystem spezielle Treiberunterstützung. Die gibt's für Windows und einige spezielle Linux-Versionen (SuSE, RedHat, etc.), aber nicht für Debian.

Ok, es gibt auf den Promise-Seiten doch Treiber für Debian, allerdings nur in Form von "partial sources". Das heisst Teile sind vorkompiliert und den Rest muss man selber kompilieren. Wenn man das hinbekommt, dann hat man zum Schluss ein Kernelmodul zum Zugriff auf das Array bzw. die Platten. Ich habe es nicht hinbekommen. Nach einiger Suche habe ich aber auf der Seite oben Jemanden gefunden, der es hinbekommen hat:
http://user.cs.tu-berlin.de/~baqui/howt ... /index.htm

Ich hatte parallel dazu auch "reines" Software-Raid vom Kernel ausprobiert. Das ist beim 2.4.18-bf2.4 auch als Kernelmodule realisiert.
Beide Varianten haben also das Problem, dass man zum Raid-Betrieb Kernelmodule braucht. Das wiederum heisst, dass man beim Booten (wenn noch keine Module bekannt sind) irgendwelche speziellen Vorkehrungen treffen muss, damit der Kernel "direkt" auf das Raid zugreifen kann. Die Antwort hier hieß: initrd, die initiale Ram-Disk.

Also habe ich einige Stunden damit zugebracht, das Internet nach Informationen zu initrd abzugrasen. Allerdings war dabei das Problem, dass die meisten Anleitungen zu diesem Thema viel zu alt waren und damit viel zu kompliziert erklärt waren.
Nachdem ich das herausgefunden hatte und ein paar aktuellen Informationen gefunden hatte, ging es relativ einfach: mkinitrd installieren, Konfiguration anpassen, mkinitrd aufrufen, lilo.conf anpassen.
Dieses Verfahren führt dazu, dass man schon vor dem Mounten von / (bzw. /lib) Zugriff auf einige Kernelmodule hat. Im Prinzip das was ich brauchte, aber so richtig zufrieden war ich noch nicht, da noch ziemlich viel Handarbeit bei der Einrichtung notwendig war und dieser für mich etwas wackelige initrd-Vorgang dabei ist. Wackelig, weil ich es nicht 100-prozentig verstanden habe.

Bei den Experimenten mit dem reinen Software-Raid ist mir des öfteren aufgefallen, dass es wohl einen automatischen Erkennungsmechanismus (im Kernel) gibt, der die einmal eingerichteten Raids beim Start automatisch einbindet.
Dieses funktionierte aber leider bei mir nicht. Zumindest nicht mit dem Standard-Kernel 2.4.18-bf2.4 und der initrd-Variante.
Das funktionierte erst, als ich mir einen eigenen Kernel zusammengestellt habe. Dieser Kernel (2.4.25) unterstützt erfreulicherweise auch direkt meinen Raid-Controller, zumindest als IDE-Controller. Und wenn man dann in diesen Kernel noch direkt die Software-Raid-Unterstützung einbindet (also nicht als Modul), dann klappt das auch mit der automatischen Raideinbindung beim Start!
Sehr hilfreich bei der Konfiguration eines eigene Kernels fand ich den Hinweis, dass man bei "make menuconfig" über "Load alternate Configuration File" die bisherige 2.4.18-Konfiguration als Grundlage verwenden soll. Die findet sich unter /boot/config-2.4.18-bf2.4.
Macht man das nicht, so fehlen einem beim Start mit diesem Kernel wahrscheinlich einige wichtige Sachen. Bei mir war das das Flag "CONFIG_FILTER=y". Das war in meinem ersten Kernel nicht drin. Prompt funktionierte zum Beispiel dhcp (dhclient) nicht mehr. Mit einer mehr als nichtsagenden Fehlermeldung (er behauptete /var/run/dhclient.pid sei nicht vorhanden).

Ok, dann wusste ich nun endlich, was ich schon von Anfang an hätte machen sollen:
1. Ganz normalen IDE-Controller kaufen (dann gibt es keine Treiberprobleme).
2. Kernel um Raid-Unterstützung erweitern (geht auch mit 2.4.18-bf2.4).
3. Auf den Platten am Controller mit mdadm ein oder mehrere Software-Raids konfigurieren.
4. System auf das Raid kopieren.
5. Konfiguration (lilo.conf und etc/fstab) anpassen und lilo laufen lassen.
6. Fertig: Boot and Pray. :-)

Wem diese Liste nun zu knapp war, der findet vielleicht bei den folgenden Links ein paar Ratschläge:

http://www.wlug.org.nz/SoftwareRaid
Etwas knappe aber aktuelle Software-Raid-Howto.

http://www.debianforum.de/wiki/?page=Ke ... stem+bauen
Im Wiki: Kernel für/mit Debian modifizieren und installieren.

http://unthought.net/Software-RAID.HOWT ... HOWTO.html
Mittelmäßig aktuelle aber vor allem ausführliche Software-Raid-Howto.


Ok, soweit so gut. Wo sind nun die aktuellen Probleme? Die kamen mit dem 2.4.25-er Kernel ins Haus. Der ist ja aus dem unstable-Zweig. Damit mit diesem depmod (Analyse der Modulabhängigkeiten) funktioniert benötigt ein aktuelles modutil-Paket (auch aus dem unstable-Zweig). Dieses wiederum verlangt ein aktuelleres libc6. Hier habe ich mal aufgehört, da libc6 ersetzen ja nicht ganz unkritisch ist.
Exemplarisch mal einen der Fehler:

Code: Alles auswählen

# depmod -av
depmod: *** Unresolved symbols in /lib/modules/2.4.25/kernel/net/irda/irda.o
/lib/modules/2.4.25/kernel/net/irda/irda.o
/lib/modules/2.4.25/kernel/net/irda/irlan/irlan.o
/lib/modules/2.4.25/kernel/net/irda/irlan.o
/lib/modules/2.4.25/kernel/net/netlink/netlink_dev.o
Kann ich das vielleicht auch anders als durch das Update vieler (unstable) Pakete beheben? Was will er mir damit überhaupt sagen?

Desweiteren würden mich mal ein paar Information zu lilo interessieren: Wo speichert lilo eigentlich den Kernel und die initrd ab, so dass er beim Start darauf zugreifen kann? Er kann doch nicht einfach nur die Sprungadresse auf eine Stelle auf der Festplatte abspeichern, oder?
Diese Kenntnis ist nicht ganz unwichtig wenn ich mir im Weiteren überlegen will, wie ich das System auch im Fehlerfall problemlos booten kann.


Auf jeden Fall schonmal vielen Dank. Diese Foren hier waren eine meiner Hauptinformationsquellen. :-)

Benutzeravatar
el_cattivo
Beiträge: 177
Registriert: 25.09.2003 02:36:16
Wohnort: Bonn
Kontaktdaten:

Beitrag von el_cattivo » 16.04.2004 14:28:30

Zum Thema Module und booten: integriere doch den RAID Support fest in den kernel ein. Dann klappts auch mit dem RAID ;-)

Kernel und initrd speicher Lilo dorthin wie auch ohne RAID, nur das auf beiden Platten die selben Daten liegen. Bin auf den MBR, der muss für die 2. Platte etwas angepasst werden. Damit Lilo auch bootet wenn di erste nicht da ist.

Zu dem Rest kann ich leider nicht weiterhelfen. Würde aber auf externe Controller a la Promise verzichten.

UND: Ein RAID ersetzt KEIN Backup. Streamer oder ähnliches gehört trotzdem rein, wenn mal das Netzteil abraucht und die Platten mitnimmt, sich wer in den Server hackt oder jemand ausversehen nen falschen Befehl losschickt nützt dir auch das RAID nix. Falls jemand meckert zu teuer dann rechne mal was es euch gekostet hat als die Backupstrategie nopch nicht lief und die Platten tot waren ;-)

Benutzeravatar
Laril
Beiträge: 5
Registriert: 07.04.2004 16:12:16
Wohnort: Freiburg

Beitrag von Laril » 16.04.2004 17:00:14

Zum Thema Module und booten: integriere doch den RAID Support fest in den kernel ein. Dann klappts auch mit dem RAID ;-)
Genau das habe ich zum Schluss gemacht...
Kernel und initrd speicher Lilo dorthin wie auch ohne RAID, nur das auf beiden Platten die selben Daten liegen.
Eigentlich wollte ich das eher allgemein wissen (auch ohne Raid): Welcher Mechanismen bebient sich Lilo, um seine Aufgabe zu erfüllen?

UND: Ein RAID ersetzt KEIN Backup. Streamer oder ähnliches gehört trotzdem rein, wenn mal das Netzteil abraucht und die Platten mitnimmt, sich wer in den Server hackt oder jemand ausversehen nen falschen Befehl losschickt nützt dir auch das RAID nix. Falls jemand meckert zu teuer dann rechne mal was es euch gekostet hat als die Backupstrategie nopch nicht lief und die Platten tot waren ;-)
Ja, das stimmt. Deshalb sind es auch 3 Platten. Streamer finde ich extrem umständlich... :wink:

Antworten