每当我尝试使用 Linux 内核 3.0.0.13(通过升级安装的内核)进行启动时,都会出现内核恐慌错误:
VFS:无法打开根设备“sda1”或未知块(0,0)请附加正确的“root=”启动选项;
幸运的是,如果我使用以前的版本启动,就不会出现任何问题。我该如何解决这个问题?我应该在哪里添加正确的root= option
?如果我无法让这个内核工作,我该如何将其从默认内核中删除并坚持使用旧版本?
答案1
您没有提供太多日志等信息来继续操作,但我猜您遇到的这个错误很可能是因为内核被 IDE/SATA 驱动器混淆了。快速谷歌搜索让我找到了链接1,链接2,链接 3
最有可能是最常发生的问题之一(但一旦你解决了它,你很可能永远不会再看到它):
Unable to mount root fs on unknown-block(0,0)
或者
VFS: Cannot open root device "sda3" or unknown-block(8,3) Please append a correct "root=" boot option; here are the available partitions: sda driver: sd sda1 sda2
根据您的情况,数字
0,0
或8,3
可能有所不同 - 它指的是内核尝试访问(但失败)的设备。一般来说,如果第一个数字是 0,则内核无法识别硬件。如果是其他数字(例如 8),则无法识别文件系统(但可以访问硬件)。这里的问题是,您正在引导的内核无法将
root=/dev/...
您提供的参数(在引导加载程序配置中)转换为真实的可访问文件系统。有多种原因可能导致此类故障:
- 内核配置缺少 HDD 控制器的驱动程序(情况 1、4、5)
- 内核配置缺少 HDD 控制器使用的总线的驱动程序
- 内核配置缺少您正在使用的文件系统的驱动程序
- 您的 root= 参数中设备识别错误(情况 2、3)
如果您知道原因,解决问题就很容易。您很可能不知道,因此下面是快速检查。
打开内核配置向导(制作菜单配置部分),以便您可以相应地更新内核配置。
- 检查您是否内置了(而不是作为模块)对硬盘控制器使用的总线/协议的支持。
- 最有可能的是 PCI 支持、SATA 支持(位于 SCSI 设备支持之下)...
- 检查您是否已内置(而非作为模块)支持您使用的 HDD 控制器。最常见的情况之一:您选择了对硬盘控制器协议(IDE、SATA、SCSI 等)的支持,但忘记选择 HDD 控制器
驱动程序本身(如 Intel PIIX)。尝试
运行以下 lscpi 命令,并将其输出粘贴到
http://kmuto.jp/debian/hcl/。该网站会向您显示您需要为您的系统选择哪些内核驱动程序。在 menuconfig 中,
您可以键入“/”以打开搜索功能,然后键入驱动程序
名称以查找其所在位置。# lspci -n
- 检查您是否已内置(而不是作为模块)对所使用的文件系统的支持。
- 假设您的根文件系统使用 btrfs(我绝对不推荐),但您没有选择它,或者选择将其构建为模块
,那么您将得到您看到的错误。确保文件系统
支持已在内核中构建。检查内核参数是否
root=
指向正确的分区。这并不像听起来那么愚蠢。当您使用一个内核启动时,它可能会将您的磁盘列为 /dev/sda,而您的(已配置的)内核则认为它是 /dev/hda。这并不是因为内核彼此不一致,而是因为所使用的驱动程序:较旧的驱动程序使用 hda 语法,较新的驱动程序使用 sda。
尝试将 hda 与 sda 切换(将 hdb 与 sdb 切换,等等)。
此外,最近的内核会概述它们在设备上找到的分区。如果是这样,它可能有助于您确定是否错误选择了分区(在本节开头给出的示例中,只找到了两个分区,而内核被指示启动第三个分区)。如果没有,很可能是因为内核不知道从哪个设备开始(因此它无法尝试显示分区)。
检查引导加载程序正在引导的内核是否正确。我见过有人在构建第一个内核(无法引导)后,忘记
/boot
在用新内核覆盖之前必须先挂载。结果,他们将内核复制到根文件系统(/
),而引导加载程序仍然希望内核映像位于/boot
分区上。
答案2
该错误可能与 initrd 映像过大有关。
可以通过更改压缩方法并从目标文件中删除调试符号来解决此问题:
# Strip unneeded symbols of object files
$ cd /lib/modules/5.4.5-rt3 # or your new kernel
$ sudo find . -name *.ko -exec strip --strip-unneeded {} +
# Change the compression format
$ sudo vi /etc/initramfs-tools/initramfs.conf
# Modify COMPRESS=lz4 to COMPRESS=xz (line 53)
COMPRESS=xz
答案3
阅读完此答案后,解释了发生了什么事情,请尝试使用 [Boot-Reapir CD][1][1]:https://help.ubuntu.com/community/Boot-Repair
非常成功地修复了“设备在您的 root= 参数中被错误识别(情况 2、3)”。