我最近在 CentOS 6.7 上更新了内核。这也清理了所有旧版本,也更新了我的 /boot/grub/grub.conf,它只有一个条目(新内核)。现在,当我重新启动时,启动失败并出现错误“文件未找到”,原因是它仍在尝试使用旧内核进行启动,而旧内核不再位于 /boot 下。当我转到内核列表页面时,它仅列出旧内核(它再次不再存在),此列表中没有新内核的迹象。最后,我不得不使用 grub 命令行进行启动,它工作正常。我已经验证了 /etc/grub.conf,它是 /boot/grub/grub.conf 的符号链接。/boot/efi/EFI/redhat/ 下还有一个 grub.conf,但它也与 /boot/grub/grub.conf 相同。我搜索了内核版本字符串以检查它是否仍在某处引用,但没有。然后我发现这超出了我的能力范围,仍然有些不对劲。请给我建议。
更新 这可能与最新的 BIOS 更新有关,其中现在启用了 uefi 启动。当我手动选择启动驱动器时,我看到 2 个选项,一个以 UEFI aaaaaa OS Bootloader 开头,另一个以 SATA aaaaaaaa Boot Drive 开头。当我选择启动驱动器时,它会使用最新内核启动。BIOS 更新后我应该修改什么吗?
答案1
您可以通过 grub 命令行启动吗?只需编辑 grub.conf 以匹配您为一次性启动所做的修复,进行备份,然后参阅下面有关 grub-mkconfig 的内容。
---- 我重新阅读并发现了更多细节;以下部分假设您无法启动 ----
由于您无法启动,您可以尝试两件事:手动编辑 boot.cfg,或者启动救援盘/live-cd 并运行 grub-mkconfig。
第一个选项要求您知道新内核文件的名称或可以找到它(例如使用救援盘/live-cd)。编辑 /boot/grub/grub.cfg(或按下 grub 菜单上的热键以编辑一次启动的启动行)并找到包含“linux [...] vmlinuz[...]”的行。您需要更改行的 vmlinuz 部分以匹配新文件名。如果适用,您还需要将 initramfs 部分更改为适当的新文件名。保存它并查看是否可以启动(或在 grub 中进行编辑并查看它是否启动,然后在进入后对其进行编辑。)
但是,如果 grub-mkconfig 无法正常工作,它将会消除这些更改,因此,如果您自己努力进行启动,请将正常工作的 grub.cfg 保存为备份。
最后一步是确保 (sudo) grub-mkconfig -o /boot/grub/grub.cfg 能够正确生成正确的启动行。如果您使用的是 Live CD 并且尚未成功启动操作系统,请使用 chroot 将根目录更改为您的实际磁盘,以便它获取正确的启动文件(如果 /boot 是单独的分区,请不要忘记挂载它)。运行该命令并查看它是否启动。
如果您设法使其成为可启动系统,则 grub-mkconfig 步骤并不是必需的,但它是最佳做法,如果 grub-mkconfig 不起作用,更新可能会再次破坏您的启动。
如果 grub-mkconfig 无法正常工作,您需要深入研究 /etc/grub(.d) 以找出哪个配置文件运行不正常。这些配置文件非常复杂,无法处理许多情况,因此您可以简化、注释掉并硬编码您自己的内容,使其再次为您工作。
祝你好运。
答案2
我的环境仍然使用旧版 grub (0.97),因此没有执行 grub-mkconfig 的选项。
您是否同意从 grub legacy 更新至 grub2?
然后你可以用 apt-get 来更新它,然后:
sudo grub-install /dev/sdX --boot-directory=/your_boot_folder.
然后,执行已经讨论过的命令:sudo grub-update (grub-mkconfig...)