這兩日為了2.6 裡面的幾個核心的安全問題 (DSA-1494-2),包含 Multiple Memory Access Vulnerabilities 與影響 VServer 的 ‘/proc’ Local Memory Access Vulnerability 等,於是開始著手升級手上的一些伺服器。

由於許多伺服器都在機房中,大部分機器都沒有裝 HP Integrated Lights-OutIBM RSAIntelligent Platform Management Interface 之類的工具,遠端管理不易,萬一出了甚麼狀況只能去電請求機房人員協助處理。

最麻煩的是若是新核心開機失敗,還要拜託值班人員協助查看 console 錯誤訊息後,才能決定是否要換回原本的核心重新開機。比較簡單的作法是如果重新開機失敗,就請人按一下重開機鍵,自動載入舊版的核心即可。

新核心開機出錯的有兩種可能性,

  • 一個是 kernel image/ram disk image (initrd) 格式錯誤
  • 另一個則是 kernel modules, kernel 參數設定錯誤,以至於系統無法載入特定驅動程式或掛載檔案系統

為了排除這兩種可能發生的錯誤,在 GRUB (大部份新版的套件系統 都已經停止使用 LILO 而改用 GRUB) 中可以參考 How to make your system robust 中的設定修改 menu.lst。

首先,為了防止核心格式錯誤、核心參數或 menu.list 中的路徑設定問題造成 GRUB 根本無法載入新核心,可以使用 fallback 參數設定若預設開機設定失敗時,應採用那一組設定。

另外,若是核心載入後,才發生的驅動程式、核心模組錯誤,導致系統重新開機,就必須改採另外一個設定,因為系統重新開機後, GRUB 還是會使用預設的開機設定,因此系統就會陷入不停重新開機的無窮迴圈。因此,我們必須使系統只嘗試載入新核心一次,第二次重新開機則改為舊版核心,因此萬一出了意外,只要重新開機就可以透過舊版核心先行開機。

grub shell 中下達以下指令,就可以使系統使用新版核心重新開機一次

grub> savedefault --once --default=1
grub> quit

新的 GRUB 套件中亦提供了一個指令叫做 grub-reboot (8), 可以協助你完成以上的設定。這個指令只吃一個參數,就是 GRUB 開機設定序號。如上述設定,就是 grub-reboot 1,該指令執行後,會詢問你是否重新開機,如果重新開機後沒有問題,即可更改 menu.list 或利用 grub-set-default (1) 將新核心開機設定為永久預設開機設定。(你也可以透過修改 menu.list 的方式達到同一目的,唯手續較為繁複)

這是一篇 Tips.