首页 技术 正文
技术 2022年11月12日
0 收藏 794 点赞 4,366 浏览 3041 个字

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,493
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297