Linux 15.032 Themen, 107.077 Beiträge

Gentoo auf externer Festplatte: Config von Kernel und Grub

Yves3 / 9 Antworten / Baumansicht Nickles

Hallo,

ich habe kürzlich Gentoo auf meiner externen USB-Festplatte installiert und es hat eigentlich auch alles wunderbar geklappt. Jetzt wollte ich mir noch einen eigenen Kernel kompilieren, da mir der Genkernel einfach zu aufgeblasen ist.

Leider erhalte ich immer folgende Meldung beim Booten dieses Kernels:
Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Ich habe die hier aufgeführten Kernel-Optionen alle aktiviert:
http://de.gentoo-wiki.com/USB_Mass_Storage_Ger%C3%A4te
Zusätzlich habe ich noch Ext3 einkompiliert (Das Dateisystem der Root- und Bootpartition).

Zudem habe ich die Treiber für meinen Raid-Controller gefunden und auch aktiviert. (Sollte aber eigentlich nicht nötig sein, geht ja über USB).
Grub habe ich wie im Gentoo Handbuch beschrieben konfiguriert (ohne initramfs): http://www.gentoo.org/doc/de/handbook/handbook-amd64.xml?part=1&chap=10

Weiss jemand wo das Problem liegen könnte?

bei Antwort benachrichtigen
gelöscht_189916 Yves3 „Gentoo auf externer Festplatte: Config von Kernel und Grub“
Optionen

Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Kann es sein, das grub die root-Partition falsch sucht?
(0,0) ist ja die erste Platte am ersten Controller, da müßtest Du mal die Daten ändern in (1,0) oder so, da ich ja nicht weiß, die wievielte Platte das USB-Laufwerk ist.
Entschuldige mein fürchterliches Deutsch, aber so auf die Schnelle wußte ich nicht, wie ich es besser formulieren sollte.

bei Antwort benachrichtigen
Yves3 gelöscht_189916 „Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block 0,0...“
Optionen

Das muss doch eigentlich genau gleich sein wie beim Genkernel, oder nicht? Dieser verwendet wie im Manual beschrieben eine Ramdisk zum booten und mein Kernel nicht... spielt das eine Rolle?

bei Antwort benachrichtigen
KarstenW Yves3 „Das muss doch eigentlich genau gleich sein wie beim Genkernel, oder nicht?...“
Optionen

Vielleicht hat sich die Gerätedatei geändert durch das Neukompilieren des Linuxkernels.
Ich denke aber eher das du einen Treiber vergessen hast.
Alle Treiber die du für die / Partition brauchst, müssen monolitisch in den Kernel (Datei bzImage) kompiliert werden.
Alle anderen Treiber für Sound u.s.w. können als Modul übersetzt werden. Der Grund dafür ist, das ein Kernelmodul erst geladen werden kann nach dem die / Partition gemounted wurde.
Um ein Kernelmodul zu laden muß das Programm modprobe gestartet werden können , was sich wiederum auf der / Partion befindet.
Der Zeitpunkt für das Laden eines Kernelmodules ist beim Rechnerstart ungünstig.

Die RAM Disk ist bei einem selbst übersetzen Kernel nicht notwendig. Die RAM Disk ist eine Notlösung um das Problem mit den Kernelmodulen zu umgehen.
Die Maintainer die den Standardkernel übersetzen wollen den Kernel nicht mit nutzlosen Treibern überfüllen. Sie können nicht wissen ob ein Anwender von SCSI ,SATA oder IDE booten will.
Deshalb werden bestimmte Treiber in die RAM Disk ausgelagert um sie nur bei Bedarf zu laden, ohne sie in den Kernel fest einzukompilieren.

Du mußt die Treiber für die USB Festplatte (usb-storage, SCSI Festplattentreiber nicht vergessen, Treiber für USB Controller u.s.w.) monolitisch in den Kernel kompilieren, damit der Kernel die / Partition mounten kann, die sich wiederum auf der USB Festplatte befindet.
Wie schon gesagt wenn du die USB Treiber als Modul übersetzt, dann können die Treiber zu diesem Zeitpunkt nicht geladen werden, weil der Linuxkernel noch nicht auf die / Partition zugreifen kann.


PS: Allein schon wegen dieser Notlösung mit der RAM Disk übersetze ich einen eigenen Linuxkernel. Diese RAM Disk macht machmal auch Probleme (habe ich gehört).

PPS: Sichere die Konfigurationsdatei /usr/src/linux-source???/.config. nach /boot oder auf einen USB Stick.
Wenn du mal ein Sicherheitsupate installierst, brauchst du diese Datei nur in das verzeichnis /usr/src/linux-source?? zurückkopieren und mußt den Linuxkernel nur noch mal neu übersetzen.
Du kannst die erneute Konfiguration sparen.









Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
gelöscht_189916 KarstenW „Vielleicht hat sich die Gerätedatei geändert durch das Neukompilieren des...“
Optionen

Hallo nochmal

Es kommt spät, aber es kommt:

Die Beschreibung zu USB liefert ja nur eine Anleitung für das Einbinden von USB-Geräten in ein laufendes System, das nützt Dir beim Starten von Linux selber nicht all zu viel.
Lies Dir im Gentoohandbuch nochmal den Abschnitt 10b durch, das ist das was ich eigentlich meine, der Ort der root-Partition auf dem Stick und diese muß grub richtig übergeben werden, damit der Bootloader sie findet, das (0,0) in Klammern weist auf die erste Partition der ersten Platte hin und das ist Dein USB-Stick sicher nicht.
Ich habe zwar ein Suse-System, aber ich stelle Dir mal meinen grub-Eintrag rein:
title openSUSE 10.3 - 2.6.22.18-0.2

root (hd0,1)
kernel /boot/vmlinuz-2.6.22.18-0.2-default root=/dev/disk/by-id/scsi-SATA_S$
initrd /boot/initrd-2.6.22.18-0.2-default
Beachte das root (hd0,1), also in der grub-Syntax die erste Platte und die zweite Partition.

In Deinem Fall müßtest Du das dann wie folgt eingeben (ich nehme das Bsp. aus dem Gentoohandbuch:

default 0
timeout 30

title Gentoo Linux 2.6.24-r5
root (hd2,1)
kernel /boot/kernel-genkernel-amd64-2.6.24-gentoo-r5 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/sda3 udev
initrd /boot/initramfs-genkernel-amd64-2.6.24-gentoo-r5

So wie oben dargestellt, würde grub die root-Partition jetzt auf der dritten Platte in der zweiten Partition suchen. Das müßtest Du dann mal auf Deine Plattenverhältnisse ummodeln, zum Testen kannst Du ja in grub mit e in den Editionsmodus wechseln, die root-Zeile ändern und dann mit b booten.

Einfach mal durchhangeln und wenn Du die entsprechende Ziffernfolge gefunden hast, paßt Du mit nano Deine grub.conf an.

Gute Nacht oder besser guten Morgen, bin nämlich gerade von der Schicht gekommen ;-)

bei Antwort benachrichtigen
Yves3 gelöscht_189916 „Hallo nochmal Es kommt spät, aber es kommt: Die Beschreibung zu USB liefert ja...“
Optionen

Ich werde mir das am Wochenende noch einmal genau anschauen. Heute habe ich leider keine Zeit mehr.

@fakiauso
Wie gesagt, beim Genkernel ist es "root (hd0,0)" und dort funktioniert es.
Natürlich kann es nicht schaden, mal noch hd1 und hd2 auszuprobieren...
Die Partition ist die erste auf der Platte, die zweite Null sollte also eigentlich auch stimmen.

@KarstenW
Ich habe die erwähnten Treiber und Komponenten fest in den Kernel kompiliert. Leider habe ich keine Ahnung, was noch fehlen könnte.

bei Antwort benachrichtigen
gelöscht_189916 Yves3 „Ich werde mir das am Wochenende noch einmal genau anschauen. Heute habe ich...“
Optionen

Hallo

Wenn Du die Dateisysteme fest einkompiliert hast, kann es noch der generische IDE- oder SCSI-Treiber sein.
Die Variante mit der RAM-Disk hatte ich etwas überlesen, Du kannst ja über den grub-Editor die Zeile mal einfügen, falls diese gesucht und nicht gefunden wird.
Ist der Pfad zur root-Partition enthalten und vielleicht versucht grub noch die alten .config-Dateien anzusprechen.
Dann noch folgender Link:
http://www.gentooforum.de/artikel/15173/kernel-panic-nahc-installation-von-kernel-2-6-24-gentoo-r3.html
Wichtig scheint mir in diesem Fall die Aussage am Ende des Threads zu sein:

make clean
make defconfig respektive

make mrproper

Viel Glück

bei Antwort benachrichtigen
KarstenW Yves3 „Ich werde mir das am Wochenende noch einmal genau anschauen. Heute habe ich...“
Optionen

Ich habe früher den SCSI Festplattentreiber vergessen. Du hast eine USB Festplatte, aber USB Sticks und USB Festplatten haben eine ähnliche Gerätedatei wie SCSI Festplatten /dev/sda1 oder /dev/sdb1. Und dann brauchst du usb-storage und die Treiber für USB Controller. Und nicht vergessen den Dateisystemtreiber ext3 oder einen andern in den Kern zu kompilieren.

Poste doch mal die Kernelkonfigurationsdatei .config.





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Yves3 KarstenW „Ich habe früher den SCSI Festplattentreiber vergessen. Du hast eine USB...“
Optionen

So, hier noch mal mein Zwischenstand:
Ich hatte root=/dev/sdc1 geschrieben, dabei müsste es sda1 sein. Leider funktioniert es immer noch nicht, jetzt ist es aber die Meldung: "Kernel panic: no init found. Try passing init= option to kernel"
Ich habe schon ein bisschen gegoogelt und verschiedene init = Optionen ausprobiert, bin aber noch nicht weiter gekommen. An verschiedenen Stellen habe ich gelesen, dass das Problem bei fehlenden /dev/console und /dev/null und ähnlichem auftreten kann und die noch erstellt werden müssen, bei mir sind sie aber schon da.
Udev soll angeblich auch nur mit RAM-Disk funktionieren. So wie ich das verstanden habe war das aber nur bei älteren Versionen so und sollte jetzt eigentlich auch ohne funktionieren.
Ich wollte das dann ausprobieren habe aber aus Versehen die .config gelöscht und musste einen etwas älteren Zwischenstand wieder herstellen. Jetzt kommt eine andere Meldung, das kriege ich aber bestimmt wieder hin.

bei Antwort benachrichtigen
KarstenW Yves3 „So, hier noch mal mein Zwischenstand: Ich hatte root /dev/sdc1 geschrieben,...“
Optionen

Udev ist als Nachfolger des veralteten hotplug System entwickelt worden. Udev ist ein System für die Hardwareerkennung. Der Anwender steckt einen USB Stick oder eine USB Festplatte an den Rechner , udev erkennt das und lädt automatisch das passenden Kernelmodul (und erstellt vorher noch die richtige Gerätedatei). Das Laden des Kernelmoduls ist nicht notwendig wenn der Treiber monolitisch in den Kernel kompiliert wird. Im Betriebsystemkern gibt es KMOD für die Hardwareerkennung. Außerdem kann der Anwender eigene Udev Regeln schreiben damit die Gerätedatei des USB Device unabhängig von der Reihenfolge ist, in der die verschiedenen USB Geräte angesteckt werden.
Du mußt dich mal mit udev genauer beschäftigen (nach deinen Fragen zu urteilen):

http://wiki.ubuntuusers.de/udev?highlight=%28udev%29

http://de.gentoo-wiki.com/Udev_Rules

Du kannst selbst festlegen welche Gerätedatei deine USB Festplatte bekommen soll, wenn du eine eigene udev Regel dafür erstellst. Das ist so , als ob man unter Windows eine Konfigurationsmöglichkeit hätte damit eine USB Festplatte einen bestimmten Laufwerksbuchstaben bekommt.



Hast du dieses Wiki schon mal durchgelesen ?

http://de.gentoo-wiki.com/Kernel_manuell_kompilieren

Du scheinst Probleme mit den Kerneloptionen zu haben.
Die RAM Disk ist nur als Notlösung gedacht, damit der Standard Betriebsystemkern nicht mit nutzlosen Treibern überfüllt wird. Wenn du einen eigenen Kernel übersetzt, dann brauchst du keine RAM Disk, weil du selbst entscheiden kannst welche Treiber und Optionen der Kernel haben soll und welche Treiber sollen monolitisch und welche Treiber sollen als Kernelmodul übersetzt werden.
Das ist für mich auch ein wichtiger Grund einen eigenen Linuxkernel zu übersetzen, weil die RAM Disk manchmal Probleme macht (habe ich nur im Handbuch zu Debian gelesen).

Du kannst dir die Ausgaben des Linuxkernels mit "dmesg | less" anschauen. Der Kernel zeigt auch die Gerätedateien der CD Laufwerke und der Festplatten an. Du kannst ja mal die USB Festplatte vor dem Rechnerstart anstecken und nachschauen welche Gerätedatei diese USB Festplatte bekommt.
Wenn die Ursache nicht ein fehlender Treiber ist (Kerneloptionen lernen !), dann hast du wahrscheinlich die falsche Gerätedatei angegeben.
Wie der Linuxkernel die verschiedenen Gerätedateien für die einzelnen Laufwerke konfiguriert entzieht sich meiner Kenntnis. Ich weiß nur das die Gerätedateien sich manchmal nach dem Neukompilieren des Linuxkernels (neue Version eventuell) ändern. Das kann beispielsweise passieren wenn man mehrere Netzwerkkarten eingebaut hat. Deshalb gibt es auch Udev , damit man selbst (notfalls) festlegen kann wie die Gerätedateien heißen sollen (wenn sie sich ändern sollten).




PS: Wieso willst du unbedingt von USB starten ? Versuch doch erstmal normal von IDE oder SATA zu starten.





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen