内核恐慌 - 不同步:VFS:新内核编译后无法安装 root fs

内核恐慌 - 不同步:VFS:新内核编译后无法安装 root fs

所以我已经研究这个问题有一段时间了,几天来一直在寻找答案,并且认为是时候寻求帮助了。我在 VMWare Fusion 中运行 Ubuntu 10.10,并下载了 3.2 内核的副本并使用所有默认设置构建它。当我在调用 make install 后尝试引导到新内核时,收到以下消息:

[    1.581916] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.582260] Pid: 1, comm: swapper/0 Not tainted 3.2.4 #1
[    1.582444] Call Trace:
[    1.582552]  [<ffffffff815e7447>] panic+0x91/0x1a7
[    1.582666]  [<ffffffff815e75c5>] ? printk+0x68/0x6b
[    1.582799]  [<ffffffff81ad2152>] mount_block_root+0x1ea/0x29e
[    1.582929]  [<ffffffff81ad225c>] mount_root+0x56/0x5a
[    1.583047]  [<ffffffff81ad23d0>] prepare_namespace+0x170/0x1a9
[    1.583178]  [<ffffffff81ad16f7>] kernel_init+0x144/0x153
[    1.583304]  [<ffffffff815f45f4>] kernel_thread_helper+0x4/0x10
[    1.583436]  [<ffffffff81ad15b3>] ? parse_early_options+0x20/0x20
[    1.583570]  [<ffffffff815f45f0>] ? gs_change+0x13/0x13

过去每次重新启动时都会出现。我发现如果我更改了虚拟机的硬盘驱动器类型,我至少可以让 GRUB 启动,但是如果我尝试加载新编译的内核,则会出现上面的消息。旧内核像以前一样工作。我已经检查并编译了对 ext4 的支持,这是我的 root 正在运行的文件系统。我还尝试通过调用“sudo update-initramfs -c -k 3.2.4”来生成 initrd 文件,但无济于事。

我认为编译是相当标准的:

make menuconfig
make
make modules_install
make install
update-grub
reboot

是一般步骤。在选项方面,我基本上都采用了默认值。如果相关的话,我的 fstab 看起来像这样:

proc            /proc           proc    nodev,noexec,nosuid 0       0
#UUID=c75eddd9-f4fa-49be-927b-8c2da7074135 /               ext4    errors=remount-ro 0       1                                                                                                                                                                                                                                                  
/dev/sda1                                  /               ext4    defaults          0       1
#UUID=5bc6915e-fdfa-479a-885f-ea03cb14f9cd none            swap    sw              0       0                                                                                                                                                                                                                                                    
/dev/sda5                                  none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

我用 UUID 和 /dev/sd* 表示法尝试过。任何帮助或建议将不胜感激,因为它变得非常令人沮丧。

谢谢。

答案1

您忘记构建与内核一起使用的 initrd。运行update-initramfs -c -k kernelversion然后update-grub找到它并将其添加到 grub 菜单中。

答案2

您是否内置了挂载根分区所需的所有驱动程序?我的意思是,I/O 控制器驱动程序、文件系统驱动程序等等?

该错误的含义是,内核无法挂载根文件系统。

我不记得到底应该unknown block是什么,但我猜这意味着它缺少 I/O 控制器驱动程序。

请注意,驱动程序必须内置到内核中,模块将无法工作(因为您需要安装文件系统才能访问模块)。

相关内容