核心升級 - Grub 預設
我正計劃編譯我自己的核心,我之前已經做過很多次了,但一如既往,這仍然有可能出錯並且機器可能無法重新啟動。
這台機器位於我無法物理訪問的遠端數據中心內,因此如果機器無法正確啟動,我將花費大量費用讓某人親自前往伺服器修復它。
有沒有辦法可以將 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 的回退機制。查看下一小節了解此功能。