Linux切換內核版本

Linux切換內核版本

有些軟件會對Linux內核的版本有要求。爲此我們需要安裝並切換到指定的內核版本。本文以5.4.0-26-generic爲例。

參考:LayerStack Tutorials - LayerStack - How to change the default Boot Kernel on Linux Cloud Servers

  • 下載指定版本
sudo apt-get install -y linux-image-${_target_kernel_}
sudo apt-get install -y linux-headers-${_target_kernel_}
  • 然後查看可用的內核版本
cat /boot/grub/grub.cfg | grep -E 'menuentry.+class.+class.+menuentry_id_option'

結果:

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-69-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-69-generic-advanced-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-69-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-69-generic-recovery-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-60-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-60-generic-advanced-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-60-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-60-generic-recovery-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-58-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-58-generic-advanced-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.15.0-58-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-58-generic-recovery-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.4.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-advanced-53b6e16f-1415-457e-85fe-9805a4c3e773' {
        menuentry 'Ubuntu, with Linux 5.4.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-recovery-53b6e16f-1415-457e-85fe-9805a4c3e773' {

可以看到,裏面一共包含兩個帶5.4.0-26-generic的版本。其中一個是recovery mode。我們不要選擇recovery mode,選擇正常的那個。

  • 然後修改系統的默認內核版本
sudo vi /etc/default/grub

可以看到其中的

GRUB_DEFAULT="1> 4"

我們把1> x中的x改爲我們想要的版本。x就是在上面那個大表中你想要的版本是第幾個。這裏注意千萬不要弄錯!這裏我具體地列出每個版本對應的編號

0 Ubuntu, with Linux 5.15.0-69-generic
1 Ubuntu, with Linux 5.15.0-69-generic (recovery mode)
2 Ubuntu, with Linux 5.15.0-60-generic
3 Ubuntu, with Linux 5.15.0-60-generic (recovery mode)
4 Ubuntu, with Linux 5.15.0-58-generic
5 Ubuntu, with Linux 5.15.0-58-generic (recovery mode)
6 Ubuntu, with Linux 5.4.0-26-generic
7 Ubuntu, with Linux 5.4.0-26-generic (recovery mode)

既然我想要的版本是5.4.0,那麼這裏就應該改成

GRUB_DEFAULT="1> 6"
  • 最後,更新配置並重啓
sudo update-grub
sudo reboot

如果配置錯了怎麼辦?

很不巧,我在配置默認內核版本的時候犯傻了。我把x改成了5,導致系統以一個recovery mode重啓了。

由於我使用的是遠程服務器,而recovery mode中並沒有ssh服務,導致重啓之後我就再也無法從遠程訪問服務器了。

於是沒辦法只能拜託師兄去機房手動重啓服務器。我不知道具體的過程,但應該與grub2 - How can I boot with an older kernel version? - Ask Ubuntu差不多。

大致就是重啓的時候,按住shift鍵,進入grub界面,在裏面手動選擇想要進入的內核版本即可。

但是手動啓動後,默認的內核版本還是錯的,此時仍然需要執行上面的流程,將默認版本改對,再次重啓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章