我配置了一个gentoo内核(kernel-2.6.36-gentoo-r5),但是当我启动时它无法安装/dev/sda1
:
ALERT! /dev/sda1 does not exist . Dropping to a shell .
我用shell进入该/dev
目录,发现没有sda*
或hd*
文件。但是,当我启动到 Debian 内核 (vmlinuz-2.6.32-5-686) 时,它可以找到并挂载该/dev/sda1
分区。
有什么问题?我该如何修复它?我没有向/etc/modules.autoload.d/kernel-2.6
文件添加任何模块名称以让它们在启动期间自动加载 - 这是问题的原因吗?
答案1
您没有准确提及如何重建内核。这是一个相当复杂的过程,您应该遵循您的发行版的建议。事实上,您应该使用您的发行版的内核,除非您需要某些无法预编译的功能(例如一组更新的驱动程序来支持您的硬件)。
有两个常见的陷阱,其中任何一个都可能导致您观察到的症状。
- 也许您忘记编译必要的驱动程序。内核配置是一个艰巨的过程,而且很容易忘记一个关键的设置。特别是,请确保您已包含到达根文件系统所需的驱动程序:磁盘控制器、分区方案、文件系统以及相关的卷管理。这些驱动程序必须内置到内核中(即不是模块),或者您必须有一个 initrd(在这种情况下,initrd 驱动程序和相关文件系统必须是内置的)。
.config
建议从您的发行版开始,仅更改您必须更改的内容。 - 如果您使用 initrd,也许您忘记重新生成它,或者安装它,或者告诉您的引导加载程序。
答案2
您不需要访问根设备所需的某些驱动程序。也许是 SATA,或者它所使用的 SCSI 模块之一。要么您没有构建驱动程序,要么您没有将其放入 initrd 中。
答案3
您需要确保在配置内核时选择正确的 SATA 驱动程序。我不知道您的硬件是什么,因此您需要自己找出哪些驱动程序适合您。
我总是将 SATA 驱动程序构建到内核中而不是作为模块,这样更容易处理。
答案4
运行时make && make modules_install && make install
不仅应该构建内核,还应该安装内核映像 (bzImage) 并将其复制到 /boot/、创建 initrd 并为两者创建 grub 条目。
如果这不是您使用的命令和/或语法,我建议尝试此过程。如果这是您遵循的过程,我建议您重建 initrdmkinitrd
并验证 grub 配置中的根设备是否准确代表系统配置。