Ubuntu 引導修復


Ubuntu 引導修復

前言

最近還在看 Docker 的教程,看到了“跨宿主機網絡通信”的一節,於是想到去 Ubuntu 中 實踐一番。結果發現 Ubuntu 進不去了。由於考慮到最近更新了 BIOS 以及在 Ubuntu 中執行了 apt-get upgrade 命令,聯想到是引導出問題了,一氣之下在 Windows 中使用 DiskGenius 刪除了 EFI 分區中的 Ubuntu文件夾,再制作 Ubuntu 啟動盤進入應急模式修復。

主要參考了ubuntu重建ESP引導。其中的主要思路是:設置根目錄選擇內核和設備選擇鏡像重啟

實際操作

之前幾步做的比較順利,可以 按一下 Tab 補全 或者 按兩下 Tab 提示所有的可能。需要注意的是,不要隨意加空格,比如“set root=(hd2,gpt5)”中的等號兩邊;由於也懷疑是內核更新的鍋,於是使用舊的內核。根據教程的提示,很快猜測出我的設備為 /dev/sdb5

grub> set root=(hd2,gpt5)
grub> linxu /boot/vmlinuz-5.0.0-37-generic ro root=/dev/sdb5 # 錯誤的設備
grub> initrd /initrd.img
grub> reboot

然后會發現錯誤,找不到設備。

而且在之前的界面中,/dev下面沒有我們的硬盤設備。此處猜測可能是進入內核后才會加載設備。然鵝情況不算太壞,啟動程序“扔”給了我們一個 busybox,在此處查看 /dev 中,發現了我們的設備(不僅有 sda,sdb,還有 nvme 設備,由於我電腦的主硬盤是 nvme 的,因此猜測大概率就是它了)

再按兩下 Tab 鍵查看所有可以使用的命令,發現了 mount 和 umount。

因此想到可以將設備掛載起來查看文件系統,於是新建文件夾並將設備 /dev/nvme0n1p5 掛載在其上。執行后,果然看到了熟悉的目錄(此處我也嘗試掛載其它分區,發現只有掛載 efi 形式的分區可以成功,不可以掛載 ntfs 類型的分區)。

輸入 reboot 重啟后再次執行上面的一套命令:

grub> set root=(hd2,gpt5)
grub> linxu /boot/vmlinuz-5.0.0-37-generic ro root=/dev/nvme0n1p5
grub> initrd /initrd.img
grub> reboot

此時可以成功進入系統,並且可以推測出是新內核的問題!在系統中使用 apt purge 命令刪除新的內核!

battor@battor-OMEN:~$ dpkg -l | grep linux
......
ii linux-headers-5.0.0-37 5.0.0-37.40~18.04.1 all Header files related to Linux kernel version 5.0.0
ii linux-headers-5.0.0-37-generic 5.0.0-37.40~18.04.1 amd64 Linux kernel headers for version 5.0.0 on 64 bit x86 SMP
ii linux-headers-5.3.0-51 5.3.0-51.44~18.04.2 all Header files related to Linux kernel version 5.3.0
ii linux-headers-5.3.0-51-generic 5.3.0-51.44~18.04.2 amd64 Linux kernel headers for version 5.3.0 on 64 bit x86 SMP
rc linux-image-5.0.0-23-generic 5.0.0-23.24~18.04.1 amd64 Signed kernel image generic
ii linux-image-5.0.0-37-generic 5.0.0-37.40~18.04.1 amd64 Signed kernel image generic
ii linux-image-unsigned-5.3.0-51-generic 5.3.0-51.44~18.04.2 amd64 Linux kernel image for version 5.3.0 on 64 bit x86 SMP
......

battor@battor-OMEN:~$ sudo apt-get purge linux-headers-5.3.0-51
......
正在卸載 linux-headers-5.3.0-51-generic (5.3.0-51.44~18.04.2) ...
正在卸載 linux-headers-5.3.0-51 (5.3.0-51.44~18.04.2) ...
battor@battor-OMEN:~$ sudo apt-get purge linux-image-unsigned-5.3.0-51-generic
......
正在卸載 linux-image-unsigned-5.3.0-51-generic (5.3.0-51.44~18.04.2) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.3.0-51-generic
/etc/kernel/postrm.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found background image: batman_bg.jpg
Found linux image: /boot/vmlinuz-5.0.0-37-generic
Found initrd image: /boot/initrd.img-5.0.0-37-generic
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
(正在讀取數據庫 ... 系統當前共安裝有 145181 個文件和目錄。)
正在清除 linux-image-unsigned-5.3.0-51-generic (5.3.0-51.44~18.04.2) 的配置文件 ...
rmdir: 刪除 '/lib/modules/5.3.0-51-generic' 失敗: 目錄非空

可以看到 apt 還自動幫我們重新生成了引導!

再次啟動后,一切恢復了正常XD。

TIPS:

如果是需要手動重新生成引導,需要執行命令:

sudo grub-install
sudo update-grub

后記

其實在進入 grub 的啟動菜單以后,可以使用“高級選項”指定內核。如果出現類似問題,可以直接重新啟動指定舊的內核,進入系統后刪除新內核即可,而不必重建引導。至於如何禁止內核更新,可以使用 apt-mark hold 和 apt-mark unhold 來禁用和恢復更新。

更新了的 BIOS 也具有一定的迷惑性,差點就提刀去找惠普的售后了。

最后,busybox 大法好!grub 大法好!Ubuntu 大法好!

參考

Ubuntu 啟動引導修復:

https://www.jianshu.com/p/ce60fe0e61e6
http://jacean.github.io/2016/06/30/ubuntu重建ESP引導/
https://www.cnblogs.com/linuxde/p/8719378.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM