解決 UEFI+LVM 的 Linux Boot 畫面 Timeout 無法設定的問題

一切的起源

大約一個月前,因為覺得公司的筆電開機慢又容易發燙,所以自己另外買了一臺筆電想要在工作上使用
不過買了才發現電腦裝的是 Windows 11 Home
好傢伙,我連 WSL 沒辦法開

雖然有嘗試過找指令來開 Hyper V
結果就是 Windows 一直開機失敗……

因為不想再花錢升級成 Windows 11 Pro
所以開箱第一天,直接拿去重灌成 Linux Mint

目前用起來還算順手,缺點就是 Linux 好多軟體不支援 😢
偏偏公司用微軟套餐,非 Windows/Mac 就沒軟體用,只能乖乖用 PWA
最後就放棄在公司使用改在家裡當第二台電腦

每次 Mint 開機時都會遇到一個問題
那就是 boot 選單都需要等 30 秒
常常接上螢幕後蓋著發現怎麼還沒開機,打開來才知道倒數計時還沒結束
等個 10 秒就算了,偏偏要等 30 秒……

於是,我就開始查資料來解決這個問題

TL;DR

使用 UEFI + LVM 的朋友
/etc/default/grub 設定 GRUB_RECORDFAIL_TIMEOUT 變數
就可以逃離 30 秒等待時間的魔爪了

辛路歷程

設定 GRUB_TIMEOUT 變數 (失敗)

正常情況下
只要前往 /etc/grub/default 修改 GRUB_TIMEOUT 變數
然後下 update-grub 就可以套用了

實際上就是設定好變數後,產出新的 Grub 腳本在開機時運行

更改完之後重開機
結果一樣要等 30 秒…

之後又到處去找跟 Grub 相關的配置檔修改
但都無果
不論怎麼改 GRUB_TIMEOUT 都沒什麼用

透過 Grub Customizer 設定 (失敗)

實際上 GUI 跟下指令的效果是一樣的
但是我想說有沒有可能是我找錯變數,或是有什麼配置我沒使用到
所以想借助 GUI 進行配置與更新
結果仍然是 30 秒

最後不小心搞爆 boot 配置,用安裝碟來還原
然後突然就變 10 秒了 ???

不過安裝碟還原的配置就少了 Mint 的 Splash,感覺就怪怪的
所以從 VM 裝了 Mint 然後把設定檔拉回來
然後秒數又回到 30 秒了

從 Grub 配置查原因

在找了一些資料之後,最後被引導到 Grub 的配置產生腳本
從這邊去尋找可能的參數來設定秒數,或是自己寫設定

打開 /etc/grub.d/00_header 後,發現了這段:

# ...
if [ "$recordfail_brkoen" = 1 ]; then
cat << EOF
if [ \$grub_platform = efi ]; then
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
if [ x\$feature_timeout_style = xy ] ; then
set timeout_style = menu
fi
fi
EOF
fi
# ...

如果 recordfail 功能無法使用
那會在 grub 配置檔新增: uefi 開機時強制進入 boot 選單的腳本
等待時間預設 30 秒,可以透過 GRUB_RECORDFAIL_TIMEOUT 設定等待時間

於是我在 /etc/default/grub 加入 GRUB_RECORDFAIL_TIMEOUT=5
然後下 grub-update 套用

最終, boot 選單終於變成只會等待 5 秒

問題在哪裡?

由於已經知道程式會走哪一段
所以就比較好查原因
原來是因為我剛好使用 UEFI 開機加上使用 LVM 檔案系統

UEFI + LVM = 進不去 Boot 選單

2018 年的時候,Ubuntu 上有人回報了一個 Bug
因為 UEFI 沒辦法在開機時進行瞬時按鍵判斷,加上 Grub 無法將開機失敗紀錄寫入 LVM
這導致了透過 UEFI + LVM 開機會無法進入 boot 選單

可以直接到 /boot/grub/grub.cfg 尋找 function recordfail
不支援的檔案系統會寫成這個樣子:

function recordfail {
set recordfail=1
# GRUB lacks write support for lvm, so recordfail support is disabled
}

該 Bug 最後的修正方式就是:強制進入 boot 選單

只不過預設等待 30 秒有些折騰人就是了
雖然可以直接 Enter 開機,不過有時候按下開機就馬上離開,結果回來都還沒離開 boot 選單呢 🙃

後記

之前就有在虛擬機用 Linux Desktop 的關係
所以用起來不會說不順手
就是有些常用的的 Windows 軟體要去找替代軟體

現在的 Linux Desktop 跟以前比起來已經穩定很多
用來寫 Code 看影片已經非常充足
遊戲上也可以用 Wine 跟 Porton 遊玩一部分的 Windows 遊戲

少數不便的地方,就是沒辦法用微軟的軟體
因為限定 Windows ,少部份 MAC
然後 Office PWA 又難用