每当我尝试使用Linux内核3.0.0.13(由升级安装的内核)引导时,都会出现内核恐慌错误:
VFS:无法打开根设备“ sda1”或未知块(0,0),请附加正确的“ root =”引导选项;
幸运的是,如果我使用以前的版本启动,则没有任何问题。我该如何解决?我应该在哪里附加正确的root= option
?如果我无法使用此内核,如何将其作为默认内核删除并坚持使用较旧的内核?
每当我尝试使用Linux内核3.0.0.13(由升级安装的内核)引导时,都会出现内核恐慌错误:
VFS:无法打开根设备“ sda1”或未知块(0,0),请附加正确的“ root =”引导选项;
幸运的是,如果我使用以前的版本启动,则没有任何问题。我该如何解决?我应该在哪里附加正确的root= option
?如果我无法使用此内核,如何将其作为默认内核删除并坚持使用较旧的内核?
Answers:
您没有提供太多的日志信息,可以继续进行下去,但我猜您最有可能遇到此错误,这是因为内核被IDE / SATA驱动器弄糊涂了。快速Google搜索使我链接到链接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)
如果您知道原因是什么,则解决问题很容易。您很可能不会,因此这里有一个快速检查。
打开内核配置向导(make menuconfig部分),以便您可以相应地更新内核配置。
- 检查您是否已内置(而非作为模块)对硬盘控制器使用的总线/协议的支持。
- 最有可能的是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。
尝试使用sda切换hda(使用sdb切换hdb,然后...)。
同样,最近的内核概述了它们在所告知的设备上找到的分区。如果是这样,它可能会帮助您确定是否选择了一个分区(在本节开头给出的示例中,仅找到两个分区,而指示内核引导第三个分区)。如果不是,则很可能是因为内核不知道该设备以什么开头(因此它无法尝试显示分区)。
检查由引导加载程序引导的内核是否为正确的内核。我见过那些在构建第一个内核(无法启动)之后忘记安装
/boot
新内核之前必须挂载的人。结果,他们将内核复制到根文件系统(/
),而引导加载程序仍希望内核映像位于/boot
分区上。