[...] Kernel panic - not syncing : VFS : Unable to mount root fs on unknow-block (0,0)
Witam.
Nie wiem czy problem wciąż aktualny, ale ja sam męczyłem się z takim samym komunikatem po kompilacji i instalacji nowego jajka. Właśnie znalazłem przyczynę, więc opiszę jak jest u mnie (na Debianie w dystrubucji testing 'squeeze').
Wyjaśnilo się w końcu, to był bug (albo celowe działanie jego twórców, którego ja niestety nie rozumiem :/) w skrypcie postinstalacyjnym.
Po instalacji paczki z jajkiem, np.:
Kod: Zaznacz cały
dpkg -i linux-image-2.6.32-3-686-se-c510_2.6.32-9_i386.deb
na koniec powinny się automatycznie odpalić skrypty generujace m.in. initrd.img-(...) i aktualizujące konfig gruba.
Winny problemów okazał się skrypt (u mnie w wersji: 0.93.4):
Kod: Zaznacz cały
#!/bin/sh
# passing the kernel version is required
[ -z "$1" ] && exit 0
# kernel-package passes an extra arg; hack to not run under kernel-package
[color="red"][ -z "$2" ] || exit 0[/color]
# we're good - create initramfs. update runs do_bootloader
update-initramfs -c -t -k "$1"
który miał ten dziwny warunek (na czerwono), powodujący natychmiastowe zakończenie skryptu jeśli wywołało się go z drugim argumentem. A że przy debianowej metodzie budowania paczki z jajkiem ten skrypt jest wywoływany z dwoma parametrami, np.:
Kod: Zaznacz cały
/etc/kernel/postinst.d/initramfs-tools 2.6.32-3-686-se-c510 /boot/vmlinuz-2.6.32-3-686-se-c510
to skrypt zamiast wygenerować /boot/initrd.img-2.6.32-3-686-se-c510, po prostu kończył działanie bez żadnego komunikatu :/.
---
Aby szybko rozwiązać ten problem wystarczy więc:
1. albo wykomentować linię z tym warunkiem w skrypcie initramfs-tools:Kod: Zaznacz cały
# kernel-package passes an extra arg; hack to not run under kernel-package
[color="red"]#[/color] [ -z "$2" ] || exit 0
2. albo
ręcznie wygenerować obraz ramdysku, np.:
Kod: Zaznacz cały
update-initramfs -c -t -k "2.6.32-3-686-se-c510"
[/color]---
PS.
W nowej wersji pakietu initramfs-tools (
0.94.4, który na razie jest w dystrybucji niestabilnej 'sid') problem ten jest już
rozwiązany [
szczegóły - klik]:
Kod: Zaznacz cały
#!/bin/sh
version="$1"
bootopt=""
# passing the kernel version is required
[ -z "${version}" ] && exit 0
[color="navy"]# kernel-package passes an extra arg
if [ -n "$2" ]; then
if [ -n "${KERNEL_PACKAGE_VERSION}" ]; then
bootdir=$(dirname "$2")
bootopt="-b ${bootdir}"
else
# official Debian linux-images take care themself
exit 0
fi
fi[/color]
# avoid running multiple times
if [ -n "$DEB_MAINT_PARAMS" ]; then
eval set -- "$DEB_MAINT_PARAMS"
if [ -z "$1" ] || [ "$1" != "configure" ]; then
exit 0
fi
fi
# we're good - create initramfs. update runs do_bootloader
update-initramfs -c -t -k "${version}" ${bootopt}
Można więc rozwiązać ten problem jeszcze jedną metodą:
3. przez zwykłą podmianę starego skryptu na jego nową wersję (do czasu, aż nowa wersja pakietu oficjalnie nie przejdzie do dystrybucji której używamy).