内核升级 - Grub 默认

Ada*_*ins 2 linux kernel grub

我正计划编译我自己的内核,我以前已经做过很多次了,但一如既往,这仍然有可能出错,机器可能无法重新启动。

这台机器位于我无法物理访问的远程数据中心内,因此如果机器无法正确启动,有人亲自前往服务器修复它会花费我很多钱。

有没有一种方法可以将 grub 设置为仅在单次启动时使用新内核,但在再次启动时回退到旧内核。因此,如果计算机无法使用新内核正确启动,我可以使用远程电源管理控制台重新启动计算机,然后它会回退到旧内核。

我知道使用 lilo 可以使用该lilo -r kernel命令,是否有等效的 grub?

sys*_*138 5

引用GRUB 手册中的一些内容,它为 katriel 的答案添加了一些额外的检查。

您可以教 GRUB 仅在下次引导时引导条目。假设您有一个旧内核 old_kernel 和一个新内核 new_kernel。您知道 old_kernel 可以正确引导您的系统,并且您想测试 new_kernel。

为确保即使新内核出现故障(例如,它崩溃),您的系统也能返回到旧内核,您可以指定 GRUB 应仅尝试新内核一次,然后再启动旧内核。

首先,修改您的配置文件。下面是一个例子:

 default saved        # This is important!!!
 timeout 10

 title the old kernel
 root (hd0,0)
 kernel /old_kernel
 savedefault

 title the new kernel
 root (hd0,0)
 kernel /new_kernel
 savedefault 0         # This is important!!!
Run Code Online (Sandbox Code Playgroud)

请注意,此配置文件default saved' (see default) at the head and在新内核的条目中使用savedefault 0'(请参阅 savedefault)。这意味着默认情况下 GRUB 会引导一个已保存的条目,并且为新内核引导该条目会将“0”保存为已保存的条目。

毕竟,有了这个配置文件,GRUB 总是在引导新内核后尝试引导旧内核,因为“0”是旧内核的入口。

下一步是告诉 GRUB 在下次引导时引导新内核。为此,执行 grub-set-default(请参阅调用 grub-set-default):

 # grub-set-default 1
Run Code Online (Sandbox Code Playgroud)

此命令将保存的条目设置为“1”,即新内核。

这种方法很有用,但仍然不是很健壮,因为如果引导项有任何错误,GRUB 会停止引导,从而导致新内核具有无效的可执行格式。因此,最好使用 GRUB 的回退机制。请查看此功能的下一小节。