侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 149 篇文章
  • 累计创建 62 个标签
  • 累计收到 2 条评论

修复Linux无法正常进入系统

liveJQ
2021-08-30 / 0 评论 / 3 点赞 / 807 阅读 / 2,318 字 / 正在检测是否收录...
广告 广告

这里以Ubuntu18.04 桌面版为例

车祸现场

哎,这样的情况对我来说已经是司空见惯的事情了。很早之前就想记录下修复过程,只可惜前几次真的以为是没救了,直接用了最简单粗暴的办法【重装】😖,能依稀记得的几次有:

  1. 使用命令'sudo apt-get update && sudo apt-get dist-upgrade'更新时突然断电了。当时在大一宿舍,用的是笔记本,忘了插电源线电量耗尽了。
  2. 用sudo执行了某个不知名脚本升级了内核导致内核被替换。在一个百无聊赖的午后,接触到了BBR加速这个东西,然后我就再一次验证了好奇害死喵的传说 🤡 ,就像执行'sudo rm -rf /'一样有趣,本文后面有脚本链接,可以执行试试 😶
  3. 存在多系统的情况。当你不需要其中一个系统并将其删除或者覆盖时,你的默认引导系统就会因为找不到这个系统的启动位置而无法正常进入系统了。
  4. 存在多个主分区的情况。我们安装系统时,如果没有特殊需求,都会将整块分区分配给根目录使用。而如果后续要增加磁盘空间时,只需将另一个分区挂载到根目录下即可使用。而当删除了这个挂载的分区,或者是增加了一个系统,又或者是迁移系统而导致盘符名称变动的情况。倘若影响到了系统分区的盘符,则可能会因为无法找到系统盘导致无法正常引导系统;而另一种情况是可以正常进入系统的,只不过会在初始化'fstab'文件时因无法挂载磁盘而出现错误警告,最明显的特征就是在系统初始化时会有1分30秒的等待时间啦。
  5. 装好系统之后,非特殊情况不要修改BIOS设置或者是分区相关的设置。这类故障最明显的情况是黑屏,或者只输出几句信息。

故障分析

上面举出来的例子都是十分常见的故障类型了,简单概括出如下几点:

  • 内核损坏/丢失/不适配
  • Grub引导损坏/丢失/未更新
  • fstab文件损坏/丢失/未更新
  • 更改了BIOS启动方式,UEFI/Legency
  • 更改了分区类型,GPT/MBR

解决办法

这些情况可能会多个同时发生,根据故障现象来加以判断。这里按从上到下,故障影响范围逐级递减。

还原BIOS启动方式

开机后狂按 F2/Delete/F12(无效则找下相关文档),进入 BIOS。在菜单中找到与 Boot 有关的栏目,进入后找带 Boot type 类似关键字意义的选项。一般选 UEFI First,不要选Legency Only。

还原分区类型

制作PE系统,进入后通过 Diskgenius 选中该系统分区,然后在菜单栏中点击编辑,下拉菜单选转成***。

修复fstab文件

sudo lsblk -f && sudo fdisk -l
sudo vim /etc/fstab

主要是根据第一行命令的输出信息,来修复fstab文件。大致可以分两种情况:

情况一

系统能正常启动,但需要等待1分30秒,且仍然显示Error,这种情况一般是有分区没有正常挂载。按照第一行的命令输出信息,在fstab文件中找到对应的挂载点,核对UUID或者是文件系统名称是否与第一行的命令输出信息相符。

情况二

修复方法与上述相同,但需要通过制作U盘启动盘的方式进入系统(参见下方的修复Grub引导),因为没有正常挂载的分区刚好是系统的跟分区或者是 boot 引导分区,导致系统无法正常启动。

修复内核

20210830_ubuntu_kernel_error.jpg

制作U盘启动盘的方式进入系统后,打开终端操作:

sudo mount /dev/sda3 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /sys /mnt/sys
sudo mount --bind /proc /mnt/proc
sudo chroot /mnt
sudo apt-get install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04

注意:版本号根据自己系统实际的LTS发行版本号进行修改,Server 版不需要安装 xserver-xorg-hwe 。

HWE (hardware enablement stack),用于支持不断更新的硬件技术,能够为现存的 Ubuntu LTS 提供更新的内核与图形支持。

修复Grub引导

首先需要制作一个 Ubuntu 的 U 盘启动盘(其他 Linux 发行版也行,最好跟你要修复的系统一致,必要条件是该系统可以在不安装的情况下运行起来),插上电脑后启动,狂按相关快捷键进入 BIOS,在 Boot 下的 EFI 中可以找到带 USB 字样的一行,按 F5/F6 调整启动顺序,将其置顶。按 ESC 后选 yes 保存退出并正常进入 USB 系统,打开终端操作:

sudo mount /dev/sda3 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
sudo chroot /mnt
grub-install
grub-mkconfig -o /boot/grub/grub.cfg
exit
sudo reboot

20210830_grub_have_repaired.png

/dev/sda3 是我的系统盘,/dev/sda1 是我的引导分区。grub-install 后面没有添加设备,默认是安装到我当前根目录对应的设备上。需要注意的是,此命令使用前,根目录必须先挂载并将挂载点设置为命令执行的默认根目录,因为这条命令涉及到 /usr/lib/grub/[platform] 和 /boot/grub 这两个目录。之后就是根据引导分区 /boot/efi 生成 grub.cfg 引导文件,重启后拔掉U盘即可。

@lenovo ➜ ~ grub-install --version 
grub-install (GRUB) 2.02-2ubuntu8.20
@lenovo ➜ ~ grub-mkconfig --version
grub-mkconfig (GRUB) 2.02-2ubuntu8.20

相关资料

  1. BBR安装脚本
3

评论区