如何在 GRUB2 中安全地變更 Linux 核心版本

最後更新: 31/03/2026
作者: 艾薩克
  • GRUB2 可讓您使用選單索引或確切的項目名稱靈活地選擇預設啟動的核心版本。
  • 使用 linux-generic、HWE 和 edge 分支時,需要控制 GRUB,以避免在安裝較新的核心時出現不穩定情況。
  • 編輯 /etc/default/grub 並使用 update-grub 重新產生配置是修復或恢復預設核心的基礎。
  • 卸載衝突的核心並保留至少一個穩定的分支,可確保系統保持可啟動性和安全性。

在 GRUB2 中更改 Linux 核心版本

在 Linux 中選擇預設啟動的核心版本 這並非只是細心管理員的個人習慣:在許多情況下,這決定了系統能否穩定運行,避免崩潰、顯示卡驅動不相容或新硬體故障等問題。在 Ubuntu 和其他基於 Debian 的發行版中尤其如此,因為這些發行版中通用分支、HWE 和其他發行版並存。 實驗版本控制 GRUB2 幾乎是必須的。

當您並行安裝多個核心時, GRUB2 總是嘗試啟動最新的可用核心。大多數情況下都沒問題,但如果您因為程式錯誤或驅動程式故障而被迫回滾到先前的版本,則需要告訴 GRUB 使用哪個條目作為預設啟動項目。本文將詳細介紹如何安全且永久地完成此操作,並說明您在使用新的 HWE 分支時需要注意的細微差別,以及如何將其與其他有用的 GRUB2 相關技巧結合使用。

Ubuntu 支援哪些核心版本?您為什麼想更改它們?

Ubuntu 並行維護多個核心分支。GRUB2 的設計旨在應對不同的使用情境。在對 GRUB2 進行任何操作之前,首先要了解已安裝的軟體,因為這將決定啟動選單中顯示哪些項目以及您希望將哪些項目設為預設值。

一方面是古典分支 linux-generic這種核心通常預先安裝在伺服器和對穩定性要求極高的系統中。它們是經過長期測試和全面維護的內核,在像 Ubuntu 22.04 這樣的長期支援版本 (LTS) 中,通常對應於 5.15.x 等版本號。它們的概念很明確:減少意外情況,降低更新後故障的可能性。

Ubuntu 桌面電腦也提供 硬體使能 (HWE) 內核例如,可以使用以下命令安裝這些分支: sudo apt install linux-generic-hwe-22.04 它們的目標是更新的核心版本,例如 Ubuntu 22.04 LTS 的 6.5.x 系列,目的是支援在最初發布 LTS 時還不存在的現代硬體。

如果你需要更進一步,還有另一個選擇。 hwe-邊緣設計為 「先鋒」分支 o 出血邊緣它可以透過類似這樣的命令進行安裝: sudo apt install linux-generic-hwe-22.04-edge 它通常包含更新的核心(例如,Ubuntu 22.04 本身就包含 6.7.x 核心)。它支援最新的硬件,但代價是增加了遇到錯誤、不穩定或異常行為的可能性。

雖然該系統一次只能運行一個核心。古代岩芯的圖像被保存下來 /boot 這就像一份人壽保險。如果系統更新導致電腦無法使用,能夠啟動到舊版就能救你一命。問題在於,一旦安裝了新內核,Ubuntu 往往每次都會預設啟動到新內核,而如果無法啟動到其他內核,卸載新內核會非常麻煩。

GRUB2 進階選項

暫時從 GRUB2 選單中選擇不同的內核

在開始編輯文件之前,值得注意的是: GRUB2 已經允許用戶在啟動時手動選擇另一個核心。如果你可以實際接觸電腦和連接的鍵盤,通常不需要其他任何東西來試用預覽版。

在Ubuntu系統中,啟動機器時, 按住Shift鍵可以顯示GRUB2選單。 在初始啟動階段。在傳統的BIOS系統中,這種方法效果很好;在UEFI中,通常GRUB顯示預設選單就足夠了,但原理是一樣的:檢視系統和選項清單。

在該選單中,您通常會看到第一個條目,類型為 Ubuntu它會啟動最後安裝的內核,然後會顯示一個名為 的子選單。 Ubuntu 進階選項 (進階選項)。此子選單列出了所有可用的核心版本,每個版本都有其正常模式和復原模式。

  如何使用磁碟管理調整 Windows 11 中的分割區大小

如果您在使用最新核心時遇到問題, 通常的做法是進入“Ubuntu 高級選項”。 並選擇舊版本(例如, Ubuntu, with Linux 5.15.0-94-generic使用舊版核心(而非最新的 6.x 版本)啟動成功後,即可卸載衝突的核心並重新產生配置。 sudo update-grub.

當然,這種手動解決方案也有其缺陷: 只有在能夠與 GRUB 互動的情況下才能正常運作。在沒有鍵盤的伺服器、遠端機器或看不到啟動控制台的環境中,你需要一種持久的方法,告訴 GRUB 始終使用哪個輸入,而無需每次啟動時都詢問你。

列出 GRUB2 已知的所有內核

為了可靠地設定預設內核, 首先,您需要了解 GRUB2 實際配置了哪些選單項目。僅僅查看已安裝的軟體包是不夠的,因為當核心被添加或刪除時,選單中的位置可能會發生變化。

GRUB2 在文件中產生其主選單 /boot/grub/grub.cfg雖然不建議手動編輯(運行後會被覆蓋), 更新GRUB是的,您可以讀取它以提取資訊。一個非常實用的列出條目的命令是:

grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re «s/(.? )'(+)'.*/\1 \2/»

這個命令 它將傳回所有條目和子選單的清單。 啟動時出現的內容,類似:

menuentry Ubuntu
submenu Advanced options for Ubuntu
menuentry Ubuntu, with Linux 6.7.0-15-generic
menuentry Ubuntu, with Linux 6.7.0-15-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-94-generic
menuentry Ubuntu, with Linux 5.15.0-94-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-92-generic
menuentry Ubuntu, with Linux 5.15.0-92-generic (recovery mode)
menuentry Memory test (memtest86+.elf)
menuentry Memory test (memtest86+.bin, serial console)
menuentry MS-DOS 5.x/6.x/Win3.1 (on /dev/sdf1)

第一個條目通常是“Ubuntu”,它擁有最新的核心。在「進階選項」子選單中,會顯示所有已安裝的版本,並依照從新到舊的順序排列。在我們的範例中,如果您希望始終以最新版本啟動,則可以選擇「始終使用最新版本」。 Ubuntu, with Linux 5.15.0-94-generic此選項位於進階子選單中,而不是主選單中。

GRUB2 條目列表

透過選單中的位置(GRUB_DEFAULT 索引)設定特定內核

一種經典形式 指定 GRUB2 預設要啟動的核心。 它涉及指示條目的索引(位置),或當所需版本位於“Ubuntu 高級選項”中時,甚至是“子選單 > 條目”組合。

控制這一過程的文件是 在/ etc /默認/蠐螬在進行任何更改之前,強烈建議您建立快速備份,以便在需要時輕鬆恢復到先前的狀態。您可以使用以下命令進行備份:

須藤cp / etc / default / grub /etc/default/grub.bak

接下來,使用你喜歡的編輯器進行編輯,例如 Nano:

sudo nano / etc / default / grub

裡面你會看到這樣一行線。 GRUB_DEFAULT=0這表示將使用主選單中的第一個條目(索引為零)。 如果您所需的核心位於「進階選項」子選單中你可以使用以下符號告訴 GRUB 進入該子選單並選擇特定位置: submenú>entrada.

沿用前面的例子,如果主選單中的第一個選項是“Ubuntu 高級選項”,而該子選單中的第三個選項是“Ubuntu,Linux 版本 5.15.0-94-generic”(從零開始計數,跳過恢復模式),那麼你可以這樣寫:

GRUB_DEFAULT="1>3"

邏輯很簡單,但你需要注意索引。第一層指的是子選單在主選單中的位置,第二級指的是該選項在該子選單中的位置。另外,請記住,「恢復模式」選項通常是交錯排列的,因此普通選項使用奇數編號,恢復模式選項使用偶數編號。

一旦你改變了 GRUB_DEFAULT儲存檔案(在 Nano 編輯器中, 按Ctrl + O 進而 按Ctrl + X然後透過以下命令重新產生 GRUB 配置來套用變更:

sudo update-grub

在這之後 重啟系統 sudo重啟 啟動後,它會檢查載入了哪個核心:

uname -a

結果應該顯示,例如: Linux ... 5.15.0-94-generic ... 這表明您現在正在使用您透過索引設定的版本。 GRUB_DEFAULT.

使用選單項目名稱而不是索引(“已儲存”模式)

索引法存在一個重大問題: 安裝或卸載核心時,這些位置會發生變化。這意味著核心更新可能會影響您的系統。 1>3 停止針對正確的內核,這正是如果您追求長期穩定性時想要避免的。

  Windows 中 System32 與 SysWOW64 之間的差異:完整指南

GRUB2 提供了更強大的替代方案: 使用選單項目的確切名稱作為預設項這樣,只要該條目存在於… grub.cfg即使清單中在其上方或下方新增了新版本,它仍將繼續被選中。

整體思路是這樣的:首先 您找到想要的選單項目的全名。,正如它所呈現的那樣 /boot/grub/grub.cfg (例如 Ubuntu, with Linux 6.8.0-60-generic然後配置 GRUB 以使用它作為 已儲存條目 默認。

要查找確切名稱,您可以使用編輯器或檢視器開啟設定文件,例如:

須藤納米/boot/grub/grub.cfg

一進去 在 Nano 編輯器中使用 Ctrl+W 搜尋與核心版本對應的字串 您感興趣的(例如,“6.8.0-60-generic”)。類似這樣的 menuentry 你會看到完整的標題,類似:

menuentry 'Ubuntu, with Linux 6.8.0-60-generic' ...

現在,我們不再擺弄指數, 你可以告訴 GRUB 使用該名稱作為已儲存的選擇項目。典型的操作流程包括執行以下命令:

sudo grub-set-default «Ubuntu,Linux 6.8.0-60-generic»

此命令將指定的條目定義為「已儲存的預設值」。若要確認是否已正確套用,您可以檢查 GRUB 環境變數檔:

sudo grub-editenv list

你應該會看到類似這樣的線條:

saved_entry=Ubuntu, with Linux 6.8.0-60-generic

根據先前的配置,也有可能出現以下情況: 已使用 GRUB_DEFAULT=saved 選項。 en /etc/default/grub這會告訴 GRUB 要永遠使用最後一個 已儲存條目 已確立。無論如何,儘管 saved_entry 如果它與您所需的核心版本匹配,您將繼續自動啟動該版本。

應用這些變更後, 使用以下命令重新產生設定檔 sudo update-grub重新啟動系統並再次確認 uname -a 您最初使用的是預設版本。

使用已儲存的核心設定 GRUB2

在Ubuntu中將核心更改為特定版本(安裝和降級)

很多情況下,你想要的不僅僅是一個預裝內核,而是… 從目前版本切換到特定版本這可能是因為您的應用程式需要它,或者因為驅動程式只支援某個系列,又或者因為最近的更新破壞了您系統的一半。

第一步永遠是 知道你目前正在運行哪個核心。為此,您可以使用以下命令:

使用uname-r

好吧:

uname -a

回傳的結果類似這樣:

Linux web 6.8.0-85-generic #85~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux

一旦你知道自己身在何處,下一步就是 查看軟體倉庫中有哪些核心可用在 Ubuntu/Debian 環境中,這通常是透過查詢軟體包來實現的。 linux-image 從軟體倉庫中,按您感興趣的版本進行篩選。找到特定版本後,您可以直接使用 apt 安裝,也可以自行編譯(請參閱)。 如何在 `make menuconfig` 中搜尋配置),如您所願。

例如,如果你想從…向下走 6.8.0-85泛型 a 6.8.0-60泛型您可以使用對應的命令安裝對應的軟體包,並在安裝完成後按「S」確認。 易於 它會詢問您是否要繼續安裝。安裝完成後, 這樣您就可以使用該核心版本進行啟動了。但是,除非您按照說明更改設置,否則 GRUB 將繼續選擇最新的文件。

安裝完所需的核心後, 重新啟動計算機 可以使用上述方法之一(按索引或按名稱)將其指定為預設值,選擇對您而言更方便、更穩健的方法。

在「進階選項」子選單中將特定內核設定為預設內核

在 Ubuntu 22 和 24 等發行版中,當添加低於當前核心版本的核心時, 此版本未被設定為主入口。但已新增至子選單中 Ubuntu 進階選項因此,即使您安裝了低於 6.8.0-85 的 6.8.0-60 版本,重新啟動後您仍然會以 85 版本啟動。

GRUB2 會自動從子選單中選擇您想要的版本。你需要知道它的確切位置。再次強調,列出該位置的命令是… menuentry y submenu 它可以幫助您了解 GRUB 將使用的結構和數字順序。

  如何在三星 Galaxy Tab 上更新 Android |指導

假設執行清單命令後,您發現目標核心(例如,「Ubuntu,Linux 6.8.0-60-generic」)出現在「進階選項」子選單的第四位,並且該子選單是主選單之後的第一個子選單。在這種情況下,從零開始的索引組合將是… 1> 2 (子選單位於位置 1,此子選單內條目位於位置 2)。

在檔案中 /etc/default/grub然後你需要修改這行程式碼:

GRUB_DEFAULT=0

POR:

GRUB_DEFAULT="1>2"

儲存變更並運行 sudo update-grub, 下次啟動時,系統會自動選擇該核心。 在「進階選項」中,無需每次都手動進入子選單。

重啟後,您可以驗證一切是否正常。 使用uname-r o uname -a驗證目前活動的核心版本是否是您透過以下方式設定的版本: GRUB_DEFAULT.

GRUB2 設定編輯

卸載 HWE 和 edge 內核,並回滾到穩定分支

一旦你實現了 使用來自 linux-generic 分支的穩定核心啟動系統 (例如,Ubuntu 22.04 LTS 上的 5.15.x 系列),如果 HWE 或 edge 核心給您帶來了問題,那麼下一個合乎邏輯的步驟就是清理系統的這些分支。

要卸載 HWE 元軟體包,您可以使用 清洗 使用覆蓋整個分支的通配符,例如:

sudo apt purge linux-generic-hwe-22.04*

移除這些元軟體包後,您可能需要… 同時刪除不再需要的現代核心鏡像。例如,如果您想棄用所有高於 6.x 的內核,而改用 5.x 系列內核,可以使用以下命令:

sudo apt purge linux-image-6*

這種類型的清除操作會移除名稱以「linux-image-6」開頭的核心鏡像軟體包,因此建議您在確認卸載之前仔細檢查要卸載的內容。請記住這一點。 你必須至少保留一個穩定、功能正常的支路。, 通常 linux-generic因為如果沒有它,系統可能會耗盡可啟動核心。

在任何核心清理操作之後,這一點至關重要。 更新 GRUB 配置,使其停止引用已不存在的條目。否則,您可能會遇到指向已刪除核心的選單選項。若要重新產生設定文件,請使用:

sudo update-grub

如果您想確保通用分支保持安裝狀態,可以使用以下命令強制安裝:

sudo apt install linux-generic

大多數情況下,它會告訴你它已經安裝了,但透過這種方式,你可以驗證元軟體包是否存在,以及你是否會繼續收到該穩定係列的安全更新和修復程式。

最後一步,如果你已經改變了 GRUB_DEFAULT 為了避免 HWE/edge 的問題,需要使用索引或特定名稱。 您可以將其恢復為預設值 (通常 0再次編輯 /etc/default/grub:

sudo nano / etc / default / grub

並將該行保留為:

GRUB_DEFAULT="0"

然後保存並運行 sudo update-grub 並重新啟動 sudo重啟 這樣系統就可以使用該分支的最新核心正常啟動。 linux-generic 你已經安裝了

最終,對於任何不想受制於最新更新的 Ubuntu、Debian 或其衍生發行版的用戶來說,使用 GRUB2 控制哪個核心啟動都成為了一個基本工具。 透過結合安裝特定版本、使用「進階選項」、按索引或選單名稱選擇以及清理問題分支,可以解決此問題。您可以根據實際需求調整系統核心:在伺服器上實現堅如磐石的穩定性,在現代設備上實現最大兼容性,或者在桌面環境中實現兩者的合理結合,因為您不想在日常使用中冒險使用實驗性內核。

更改 GRUB_TIMEOUT= 時不顯示 GRUB 選單
相關文章:
更改 GRUB_TIMEOUT 後 GRUB 不顯示選單:原因和最終解決方案