• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Systempartition mit Raid1 + eigener Kernel

mcgege

Newbie
Hallo zusammen,

ich habe mir neulich einen neuen Linux-Server für daheim gebastelt und OpenSUSE 11.1 64bit installiert. Bei der Installation habe ich zwei SATA-Platten als RAID1 zusammengefasst:

/dev/md0 -> /boot : /dev/sda5, /dev/sdb5
/dev/sda6, /dev/sdb6 jeweils als Swap
/dev/md1 -> / : /dev/sda7, /dev/sdb7
/dev/md2 -> /daten : /dev/sda8, /dev/sdb8

Soweit, so gut - leider läuft mein System nicht 100%tig stabil (z.B. Verzögerungen in der Shell bei Zugriff auf Festplatte, unter hoher IO-Last hängt sich irgendwann das System auf, irgendwann gibt es Zombie-Prozesse usw.).

Um dem Problem auf die Spur zu kommen möchte ich erst einmal einen auf das System zugeschnittenen Kernel ausprobieren. Beim Booten des neuen Kernels (modular, allerdings ohne initrd) bin ich dann auf das Problem gestoßen, dass die automatische Erkennung der Raid-Partitionen nicht funktioniert. Suse schreibt Superblocks der Version 1.0, die automatische Erkennung im Kernel setzt allerdings Version 0.9 voraus.

Nun die Frage in die Runde: wie komme ich mit überschaubarem Aufwand zum Ziel, meinen eigenen Kernel zu booten? Gibt es vielleicht die Möglichkeit, erst die Root-Partition von einer der Festplatten readonly zu booten, und dann auf das Raid-Device zu schwenken?

Was sind Eure Erfahrungen / Lösungsansätze mit gespiegelter Root-Partition?


Michael
 

josef-wien

Ultimate Guru
mcgege schrieb:
die automatische Erkennung im Kernel setzt allerdings Version 0.9 voraus
Das bestreite ich. Ich habe noch nie einen selbst gebauten Kernel verwendet und kann Dir daher diesbezüglich nicht weiterhelfen. Es muß aber beim Bauen eine Einstellung geben, 1.0 einzubinden, schließlich können die "fertigen" openSUSE-Kernel (und nicht nur diese) das auch. "modular, allerdings ohne initrd" sagt mir auch nichts (und Du brauchst gar nicht zu versuchen, mir das erklären zu wollen), aber wenn es geht, ohne initrd auszukommen, mußt Du auf andere Art die RAID1-Unterstützung aktivieren.
 
OP
M

mcgege

Newbie
josef-wien schrieb:
Das bestreite ich. Ich habe noch nie einen selbst gebauten Kernel verwendet und kann Dir daher diesbezüglich nicht weiterhelfen. Es muß aber beim Bauen eine Einstellung geben, 1.0 einzubinden, schließlich können die "fertigen" openSUSE-Kernel (und nicht nur diese) das auch.

Ist aber so, s. Documentation/md.txt:
When md is compiled into the kernel (not as module), partitions of type 0xfd are scanned and automatically assembled into RAID arrays. This autodetection may be suppressed with the kernel parameter "raid=noautodetect". As of kernel 2.6.9, only drives with a type 0 superblock can be autodetected and run at boot time.

Type 0 ist dabei Version 0.9, die sich auch bei mdadm mit "-e 0" erzeugen lässt - Suse hat mir allerdings eine Version 1.0 geschrieben.
Die Raid-Partitionen werden bei Suse in der initrd gemounted, und zwar nicht durch die Automount-Funktion den Kernels - wenn man mal die initrd auspackt, dann sieht man einen Berg Scripte und Tools, die das erledigen ... das ist für mich allerdings nicht der Weg, den ich gehen möchte ... :/

Michael
 

josef-wien

Ultimate Guru
Als "Nicht-Kernel-Ersteller" kann ich Dir bei Deinem Problem nicht wirklich helfen, ich versuche nur, aus der Theorie heraus Denkanstöße zu geben.

mcgege schrieb:
When md is compiled into the kernel (not as module)
Logischer Schluß Nr. 1: Da es in openSUSE funktioniert, muß md wohl als Modul realisiert sein.

mcgege schrieb:
Die Raid-Partitionen werden bei Suse in der initrd gemounted
Seitenschritt: In der initrd steckt die Unterstützung, daß der Bootvorgang von einem RAID-Laufwerk möglich ist. Den Rest erledigt /etc/init.d/boot.md.

mcgege schrieb:
das ist für mich allerdings nicht der Weg, den ich gehen möchte
Logischer Schluß Nr. 2: Wenn Du openSUSE einen anderen Kernel verpaßt, der nicht der openSUSE-Logik folgt, wirst Du Dich möglicherweise der vielen Probleme nicht mehr erwehren können, die auf Dich einströmen werden. Oder aber Du baust Dir nicht nur einen eigenen Kernel, sondern gleich ein ganzes mcgege-Linux (und das ist nicht sarkastisch, sondern ernst gemeint).
 
OP
M

mcgege

Newbie
josef-wien schrieb:
Als "Nicht-Kernel-Ersteller" kann ich Dir bei Deinem Problem nicht wirklich helfen, ich versuche nur, aus der Theorie heraus Denkanstöße zu geben.
... und dafür bin ich ja auch dankbar ... ;)

josef-wien schrieb:
Logischer Schluß Nr. 2: Wenn Du openSUSE einen anderen Kernel verpaßt, der nicht der openSUSE-Logik folgt, wirst Du Dich möglicherweise der vielen Probleme nicht mehr erwehren können, die auf Dich einströmen werden. Oder aber Du baust Dir nicht nur einen eigenen Kernel, sondern gleich ein ganzes mcgege-Linux (und das ist nicht sarkastisch, sondern ernst gemeint).
Ja, das hab ich früher auch schon gemacht (auch ernst gemeint) - allerdings muss man ja nicht immer den steinigsten Weg wählen.

Ich bin einfach auf der Suche nach Tipps / Erfahrungen der Community - mir selbst sind hier zwei Ansätze eingefallen:

1) Kernel bootet mit Root-Partition = eine Hälfte des Raid1-Verbundes im readonly-mode (also bei mir /dev/sda7) und "wechselt" dann readwrite auf /dev/md1. Falls sowas überhaupt möglicht ist ...

2) Die Superblocks werden konvertiert / neu geschrieben als Version 0.9, dann klappt auch das automatische Mounten im Kernel.


Tja

Michael
 
OP
M

mcgege

Newbie
Hallo zusammen,

ich hab das Problem gestern nun selbst gelöst - und zwar so:
  1. Neueste Kernel-Sourcen ausgepackt
  2. Die Config des aktuellen Suse-Kernels als Basis verwendet (gzip -cd /proc/config.gz > .config ; make oldconfig)
  3. Unnötige Kernel-Anteile entfernen (was ihr behalten wollt und von Suse als Modul geladen wird, auch als Modul belassen!)
  4. make ; make modules_install ; make install

Mit "make install" bastelt Suse dann auch eine passende initrd und die Root-Partition wird damit sauber eingehängt.


Michael
 
Oben