[gelöst] Kernel panic: VFS: Unable to mount root fs on hdb2

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

[gelöst] Kernel panic: VFS: Unable to mount root fs on hdb2

Beitrag von StephanS » 21. Mär 2005, 23:49

Hallo Leute,

nachdem ich versehentlich mit apt meinen Kernel von 2.6.5-7.111 auf 2.6.5-7.147 geupgradet habe, erhalte ich obige Fehlermeldung. Weiß jemand, wie ich wieder ein laufendes System bekomme, egal welcher Kernel?

Folgende Daten zu meinem System:
SuSE 9.1, Pentium III, mkinitrd-1.2-8, grub-0.94-25,
root Filesystem: hdb2 (ReiserFS )
/boot : hda4

Beim Update hat apt/SuSEconfig folgendes ausgegeben:

Code: Alles auswählen

kernel-default              ##################################################
Setting up /lib/modules/2.6.5-7.147-default
Root device:	/dev/hdb2 (mounted on / as reiserfs)
Module list:	reiserfs

Kernel image:	/boot/vmlinuz-2.6.5-7.147-default
Initrd image:	/boot/initrd-2.6.5-7.147-default
Shared libs:	lib/ld-2.3.3.so lib/libc.so.6 lib/libselinux.so.1 

Modules:	kernel/drivers/scsi/scsi_mod.ko kernel/drivers/scsi/sd_mod.ko 
kernel/fs/reiserfs/reiserfs.ko kernel/drivers/pcmcia/pcmcia_core.ko kernel/drivers/pcmcia/i82092.ko kernel/drivers/block/umem.ko kernel/drivers/scsi/megaraid/megaraid_mm.ko kernel/drivers/scsi/megaraid/megaraid_mbox.ko kernel/drivers/scsi/libata.ko kernel/drivers/scsi/ata_piix.ko kernel/drivers/scsi/megaraid.ko kernel/drivers/scsi/aic7xxx/aic79xx.ko kernel/drivers/scsi/gdth.ko kernel/drivers/scsi/sata_vsc.ko kernel/drivers/char/hw_random.ko kernel/drivers/char/watchdog/i8xx_tco.ko kernel/drivers/char/agp/agpgart.ko kernel/drivers/char/agp/intel-mch-agp.ko kernel/drivers/char/agp/intel-agp.ko kernel/drivers/mtd/chips/chipreg.ko kernel/drivers/mtd/mtdcore.ko kernel/drivers/mtd/maps/pci.ko kernel/drivers/mtd/maps/ich2rom.ko kernel/drivers/net/mii.ko kernel/drivers/net/e100.ko kernel/drivers/net/e1000-new/e1000-new.ko kernel/drivers/net/eepro100.ko kernel/drivers/net/tulip/tulip.ko kernel/drivers/net/e1000/e1000.ko kernel/drivers/net/ixgb/ixgb.ko kernel/sound/soundcore.ko kernel/sound/oss/ac97_codec.ko kernel/sound/oss/i810_audio.ko kernel/sound/core/snd.ko kernel/sound/core/seq/snd-seq-device.ko kernel/sound/core/snd-rawmidi.ko kernel/sound/drivers/mpu401/snd-mpu401-uart.ko kernel/drivers/input/gameport/gameport.ko kernel/sound/core/snd-page-alloc.ko kernel/sound/core/snd-timer.ko kernel/sound/core/snd-pcm.ko kernel/sound/pci/ac97/snd-ac97-codec.ko kernel/sound/pci/snd-intel8x0.ko kernel/sound/pci/snd-intel8x0m.ko extra/hostap_old.ko kernel/drivers/base/firmware_class.ko extra/ipw2100.ko extra/slamr.ko kernel/drivers/cdrom/cdrom.ko kernel/drivers/ide/ide-cd.ko 
Including:	klibc udev
Bootsplash:	Linux-Stephan (1024x768)
Using grub, re-install of bootloader not required.
Der relevante Abschnitt aus /boot/grub/menu.lst lautet:

Code: Alles auswählen

###Don't change this comment - YaST2 identifier: Original name: linux###
title Linux
    kernel (hd0,3)/vmlinuz root=/dev/hdb2 vga=791 splash=silent desktop resume=/dev/hdb4 showopts
    initrd (hd0,3)/initrd
Die symbolischen Links in /boot stehen auf die neue Kernelversion (einschl. initrd). Alter Kernel ist von apt/rpm gelöscht worden.

Das Filesystem auf hdb2 hab ich mit Knoppix und reiserfsck gecheckt: keine Fehler, kann ohne Weiteres gemountet werden. Ich hab auch schon versucht, mit

Code: Alles auswählen

mkinitrd -k vmlinuz-2.6.5-7.147 -o initrd-2.6.5-7.147
eine neue initrd zu erstellen: keine Änderung. Herausnehmen der initrd-Zeile aus menu.lst: keine Änderung. Entfernen aller Bootoptionen hinter vga=791: keine Änderung.

Leider bin ich mit ähnlichen Topics im Forum nicht zurechtgekommen, weil die sich meistens auf selbstkompilierte Kernel beziehen.

Vielen Dank im Voraus!
Zuletzt geändert von StephanS am 14. Apr 2005, 11:42, insgesamt 1-mal geändert.

Werbung:
Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 21. Mär 2005, 23:55

Eine Idee hab ich noch:
Ich such mir das rpm vom vorigen Kernel (2.6.5-7.111), entpacke das unter Knoppix in ein temporäres Verzeichnis (wie geht der rpm-Befehl dazu genau?) und kopiere ihn dann nach /boot. Wenn alles läuft, kümmere ich mich um die rpm-db. Macht das Sinn? Was mach ich dann mit der initrd?

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 24. Mär 2005, 09:08

So. Bin einen kleinen Schritt weiter. Hab den Kernel of the day installiert und kann nun starten, muss aber noch irgendwie den nvidia-Grafiktreiber wieder einrichten.
Ursache für den Fehler war, dass der Standardkernel keinen Support für ReiserFS inkompiliert hat. Reiserfs muss also als Modul in die initrd. Der mkinitrd-Befehl funktioniert aber nicht mehr, sondern gibt folgende Fehlermeldungen:

Code: Alles auswählen

Root device:	/dev/hdb2 (mounted on / as reiserfs)
Module list:	reiserfs

Kernel image:	/boot/vmlinuz-2.6.11.4-20050321160257-default
Initrd image:	/boot/initrd-2.6.11.4-20050321160257-default
cp: cannot stat `/sbin/udevstart.static': No such file or directory
Shared libs:	ldd: /sbin/udevstart.static: No such file or directory
lib/ld-2.3.3.so lib/libc.so.6 lib/libselinux.so.1 
pcilib: Cannot open /sys/bus/pci/devices
pcilib: Cannot open /sys/bus/pci/devices
Usage: hwinfo [options]
Probe for hardware.
  --short        just a short listing
  --log logfile  write info to logfile
  --debug level  set debuglevel
  --version      show libhd version
  --dump-db n    dump hardware data base, 0: external, 1: internal
  --hw_item      probe for hw_item
  hw_item is one of:
    cdrom, floppy, disk, network, gfxcard, framebuffer, monitor, camera,
    mouse, joystick, keyboard, chipcard, sound, isdn, modem, storage-ctrl,
    netcard, printer, tv, dvb, scanner, braille, sys, bios, cpu, partition,
    usb-ctrl, usb, pci, isapnp, ide, scsi, bridge, hub, memory, smp, pppoe,
    pcmcia, pcmcia-ctrl, wlan, zip, dsl, all, reallyall

  Note: debug info is shown only in the log file. (If you specify a
  log file the debug level is implicitly set to a reasonable value.)
/sbin/mkinitrd: line 1: /lib/modules/2.6.11.4-20050321160257-default/modules.pcimap: syntax error: operand expected (error token is "/lib/modules/2.6.11.4-20050321160257-default/modules.pcimap")

Modules:	kernel/drivers/scsi/scsi_mod.ko kernel/drivers/scsi/sd_mod.ko kernel/fs/reiserfs/reiserfs.ko kernel/drivers/pcmcia/pcmcia_core.ko kernel/drivers/pcmcia/rsrc_nonstatic.ko kernel/drivers/pcmcia/i82092.ko kernel/drivers/char/agp/agpgart.ko kernel/drivers/video/intelfb/intelfb.ko kernel/drivers/block/umem.ko kernel/drivers/scsi/megaraid/megaraid_mm.ko kernel/drivers/scsi/megaraid/megaraid_mbox.ko kernel/drivers/scsi/libata.ko kernel/drivers/scsi/ahci.ko kernel/drivers/scsi/ata_piix.ko kernel/drivers/scsi/megaraid.ko kernel/drivers/scsi/aic7xxx/aic79xx.ko kernel/drivers/scsi/gdth.ko kernel/drivers/scsi/sata_vsc.ko kernel/drivers/char/hw_random.ko kernel/drivers/char/watchdog/i8xx_tco.ko kernel/drivers/char/agp/intel-agp.ko kernel/drivers/mtd/chips/chipreg.ko kernel/drivers/mtd/mtdcore.ko kernel/drivers/mtd/maps/pci.ko kernel/drivers/mtd/maps/map_funcs.ko kernel/drivers/mtd/maps/ichxrom.ko kernel/drivers/net/mii.ko kernel/drivers/net/e100.ko kernel/drivers/net/eepro100.ko kernel/drivers/net/tulip/tulip.ko kernel/drivers/net/e1000/e1000.ko kernel/drivers/net/ixgb/ixgb.ko kernel/drivers/ide/ide-core.ko kernel/drivers/ide/pci/piix.ko kernel/drivers/i2c/i2c-core.ko kernel/drivers/i2c/busses/i2c-piix4.ko kernel/drivers/i2c/algos/i2c-algo-bit.ko kernel/drivers/i2c/busses/i2c-i810.ko kernel/drivers/i2c/busses/i2c-i801.ko kernel/sound/soundcore.ko kernel/sound/oss/ac97_codec.ko kernel/sound/oss/i810_audio.ko kernel/sound/core/snd-page-alloc.ko kernel/sound/core/snd.ko kernel/sound/core/snd-timer.ko kernel/sound/core/snd-pcm.ko kernel/sound/pci/ac97/snd-ac97-codec.ko kernel/sound/pci/snd-intel8x0.ko kernel/sound/pci/snd-intel8x0m.ko kernel/sound/pci/hda/snd-hda-codec.ko kernel/sound/pci/hda/snd-hda-intel.ko kernel/lib/crc-ccitt.ko extra/zaptel.ko extra/wcfxo.ko extra/ieee80211_crypt.ko extra/ieee80211.ko kernel/drivers/base/firmware_class.ko extra/ipw2200.ko extra/ipw2100.ko kernel/drivers/ide/ide-disk.ko kernel/drivers/ide/ide-floppy.ko kernel/drivers/cdrom/cdrom.ko kernel/drivers/ide/ide-cd.ko 
Including:	klibc udev
Bootsplash:	Linux-Stephan (1024x768)
chown: cannot dereference `/var/tmp/mkinitrd.t22274/mnt/sbin/udevstart': No such file or directory
Dieses udevstart.static gibt's bei mir nicht. In /sbin schaut's so aus:

Code: Alles auswählen

-rwxr-xr-x  1 root root 55208 Jul  1  2004 udev*
-rwxr-xr-x  1 root root 96256 Jul  1  2004 udev.debug*
-rwxr-xr-x  1 root root   467 Mar 13  2004 udev.get_input_lirc.sh*
-rwxr-xr-x  1 root root  1600 May  9  2004 udev.get_persistent_device_name.sh*
-rwxr-xr-x  1 root root  8035 Jun 25  2004 udev.get_unique_drive_id.sh*
-rwxr-xr-x  1 root root 10048 Jun 28  2004 udev.get_unique_hardware_path.sh*
-rwxr-xr-x  1 root root 53812 Jul  1  2004 udev.static*
-rwxr-xr-x  1 root root 90417 Jul  1  2004 udev.static.debug*
-rwxr-xr-x  1 root root 45492 Jul  1  2004 udevinfo.static*
-rwxr-xr-x  1 root root  5604 Jul  1  2004 udevstart*
Also irgendwann möchte ich schon wieder initrd's machen können.

jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Beitrag von jengelh » 24. Mär 2005, 11:23

Wie wär's, wenn du alle benötigten Module einkompilierst und dir den ganzen Ärger mit der initrd sparen kannst?

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 26. Mär 2005, 12:07

Ansich ne gute Idee. Hab nur noch nie einen Kernel selber kompiliert und finde eigentlich die automatischen Updates mit apt ganz praktisch. Werd mich da mal einlesen. Problem ist, dass ich ja im Moment keine richtig funktionierende Ausgangskonfiguration hab. Der Kernel-of-the-day lässt mich zwar Reiserfs booten, aber mein nvidia-Treiber geht noch nicht, die Soundkarte bleibt stumm und das DSL-Modem lässt sich manchmal (selten) nicht ansprechen.

Inzwischen versuche ich die initrd wieder hinzubekommen, kann ja wohl auch nicht so schwer sein. Ich bin auch schon einen kleinen Schritt weiter:

Code: Alles auswählen

ln -s /sbin/udev.static /sbin/udevstart.static
ln -s /sbin/hotplugeventrecorder /lib/klibc/bin/hotplugeventrecorder
beseitigt die ersten beiden Fehlermeldungen. Als nächstes kommt ein fehlerhafter Aufruf von hwinfo:

Code: Alles auswählen

hwinfo --kernel-version 2.6.5-7.151-default --db 'pci vendor=0x8086 
                         device=0x7111 
                         subvendor=0x0  
                         subdevice=0x0 
                         revision=0x1'
der zu folgender Ausgabe führt:

Code: Alles auswählen

Usage: hwinfo [options]
Probe for hardware.
  --short        just a short listing
...
... ich arbeite daran.

jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Beitrag von jengelh » 26. Mär 2005, 12:45

Also bei meiner Erstinstallation war's auch nicht gerade schwierig von der initrd wegzukommen. Defaultkonfiguration bringt SUSE auch mit, also no-prob:

# rpm2cpio kernel-source.i586.rpm | cpio -div
# cd usr/src/linux...
# make cloneconfig && make -j2 && make modules_install
# cp arch/i386/boot/bzImage /boot/GiveMeAName

/etc/lilo oder grub anpassen - fertig. Den alten lässt man (zusammen mit inird) einfach vergammeln und irgendwann löschen :p

Benutzeravatar
Neotron
Hacker
Hacker
Beiträge: 254
Registriert: 30. Jan 2005, 18:51
Wohnort: Aichach
Kontaktdaten:

Beitrag von Neotron » 26. Mär 2005, 14:19

Hallo,

mach mal ein Downgrade auf mkinitrd-1.2-4.
Nur so ne "Vermutung".

Mit mkinitrd hatte ich gestern schon großen Ärger und so richtig rund lief's mit der 1.2-4

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 27. Mär 2005, 18:03

Danke für die Hinweise.
Nach dem Downgrade auf mkinitrd-1.2-4 läuft der Befehl

Code: Alles auswählen

mkinitrd -k ... -i ...
zwar fehlerlos durch, aber der PC bootet immer noch nicht richtig (Fehlermeldung jetzt

Code: Alles auswählen

Waiting for /dev/hdb2 to appear ...
und dann kommt eine abgespeckte Shell).
Gerade läuft das make für einen eigenen Kernel, basierend auf SuSE's 2.6.5-7.151-default.

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

[gelöst] Kernel panic: VFS: Unable to mount root fs on hdb2

Beitrag von StephanS » 28. Mär 2005, 14:44

Neuester Stand: Ich habe drei Kernel installiert.
1. 2.6.5 von SuSE
2. 2.6.5 selbstgebaut mit reiserfs fest einkompiliert (danke jengelh)
3. 2.6.11 kernel-of-the-day rpm

Nr. 3 bootet ordentlich hoch, aber hat ein paar Macken mit Sound und USB.

Nrn. 1 und 2 haben eine Initrd (erstellt mit mkinitrd-1.2-4 - danke Neotron). Der Bootvorgang ist leider unterbrochen:

Code: Alles auswählen

RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).    <-- das ist wohl das initrd-FS
Starting udev
Creating devices
Loading kernel/fs/reiserfs/reiserfs.ko
Waiting for device /dev/hdb2 to appear: ... not found -- device nodes:
console fb0 null ram0 ram1 ram2 shm tty1 tty2 zero
No root device found: exiting to /bin/sh
Diese initrd-Shell beendet man mit Strg-D und dann bootet er anstandslos weiter, wobei er als erstes /dev/hdb2 mit ReiserFS 3.6 mountet.
Irgendwas ist also noch nicht ganz perfekt mit der initrd, aber damit kann ich gut leben. Sound, USB, DSL-Modem, subfs, nVidia-Treiber funktionieren.
Jetzt hab ich ja ein laufendes System, der Kernel und seine initrd sind sicherheitshalber kopiert, und die ganze /boot-Partition ist in mein tägliches Backup eingeschlossen. Und wenn ich mal Zeit hab, dann kümmere ich mich um einen aktuellen, selbstgebauten Kernel, der die initrd nicht mehr braucht.

Benutzeravatar
Neotron
Hacker
Hacker
Beiträge: 254
Registriert: 30. Jan 2005, 18:51
Wohnort: Aichach
Kontaktdaten:

Beitrag von Neotron » 28. Mär 2005, 14:49

Führ' doch mkinitrd mal ohne Parameter aus.
Gruß
Neotron

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 1. Apr 2005, 10:48

Inzwischen habe ich deinen Vorschlag befolgt und mkinitrd auf verschiedene Arten ausgefuehrt: manuell ohne Argumente, manuell mit -k und -i, automatisch ueber apt/SuSEconfig. In allen Faellen komme ich nur mit Strg-D weiter.
Ich hab auch mal ein bisschen nachgelesen. Da gibt es wohl in der initrd ein Skript linuxrc, das die Module laedt und sich dann beenden soll. Danach soll der Kernel das normale / Dateisystem von hdb2 mounten. Stattdessen startet linuxrc eine Shell, weil es ueberfluessigerweise auf irgendwas wartet. Da diese linuxrc nur ein Skript ist, werd' ich das schon von Hand so hinbiegen koennen, dass da keine Shell kommt. Irgendwo hab ich auch gelesen, wie ich in die initrd rein komm, also werd' ich das probieren. Muss dann halt nur dafuer sorgen, dass das von mkinitrd nicht wieder ueberschrieben wird.
Ist aber momentan nicht mehr ganz oben auf der Prioritaetenliste fuer meine Freizeit (die Bremsen an meiner Vespa sind mir wichtiger).

Benutzeravatar
StephanS
Member
Member
Beiträge: 61
Registriert: 24. Jan 2005, 22:04

Beitrag von StephanS » 10. Apr 2005, 22:00

Problem gelöst.

Das Skript "linuxrc" in der initrd enthält folgende Passage:

Code: Alles auswählen


udev_discover_root() {
    local root
    case "$rootdev" in
	/dev/nfs) root= ;;
	/dev/*)	root=${rootdev#/dev/} ;;
    esac
    # Waits for the resume device to appear
    if [ -n "$resume_mode" ]; then
	resume=${resumedev#/dev/}
	if udev_wait_for_device $resume; then
	    path=$(udevinfo -q path -n $resume)
	    set -- $(udev_read_devn $path)
	    if [ -n "$1" ]; then
		devn=$1
		major=$2
		minor=$3
		echo "$major:$minor" > /sys/power/resume
		devn=
	    fi
	    path=
	else
	    echo " not found (ignoring)"
	fi
    fi
    if udev_wait_for_device $root; then
	path=$(udevinfo -q path -n $root)
	set -- $(udev_read_devn $path)
	if [ -n "$1" ]; then
	    devn=$1
	    major=$2
	    minor=$3
	else
	    echo " not found"
	fi
    fi
    if [ -n "$devn" ]; then
	echo "rootfs: $entry major=$major minor=$minor" \
	    "devn=$devn"
	echo $devn > /proc/sys/kernel/real-root-dev
	return 0
    else
	return 1
    fi
}

# Default timeout is 5 seconds
udev_timeout=5
# Override timeout from commandline
for o in $(cat /proc/cmdline); do
    case $o in
    udev_timeout=*)
	set -- $(IFS== ; echo $o)
	udev_timeout=$2
	;;
    esac
done

if ! udev_discover_root ; then
    echo "not found -- device nodes:"
    cd /dev
    for dev in *; do
	if [ -e "$dev" ]; then
	    echo -n "$dev "
	fi
    done
    echo ""
    echo "No root device found; exiting to /bin/sh"
    cd /
    PATH=$PATH PS1='$ ' /bin/sh
fi

die 0
Ich habe einfach die Zeile mit /bin/sh auskommentiert. Jetzt geht's. Wie gesagt kompilier ich mir demnächst in Ruhe einen 2.6.11-Kernel laut Anleitung im Forum, der ReiserFS fest eingebaut hat, sodass ich keine initrd mehr brauche.

Danke an alle.

Thema kann als "gelöst" markiert werden.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste