Linux

核心升級 - Grub 預設

  • February 26, 2012

我正計劃編譯我自己的核心,我之前已經做過很多次了,但一如既往,這仍然有可能出錯並且機器可能無法重新啟動。

這台機器位於我無法物理訪問的遠端數據中心內,因此如果機器無法正確啟動,我將花費大量費用讓某人親自前往伺服器修復它。

有沒有辦法可以將 grub 設置為僅在一次啟動時使用新核心,但在再次重新啟動時回退到舊核心。所以我可以使用我的遠端電源管理控制台重新啟動機器,如果它無法使用新核心正確啟動,它會回退到舊核心。

我知道使用lilo -r kernel命令 lilo 可以做到這一點,是否有 grub 等價物?

引用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!!!

請注意,此配置文件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

此命令將保存的條目設置為“1”,即設置為新核心。

這種方法很有用,但仍然不是很健壯,因為 GRUB 會停止引導,如果引導條目中有任何錯誤,那麼新核心的可執行格式就會無效。因此,最好使用 GRUB 的回退機制。查看下一小節了解此功能。

引用自:https://serverfault.com/questions/21297