巴巴适适 發表於 2020-9-8 21:30:00

Ubuntu 引导修复

<h2 id="ubuntu-引导修复">Ubuntu 引导修复</h2>
<h3 id="前言">前言</h3>
<p>最近还在看 Docker 的教程,看到了“跨宿主机网络通信”的一节,于是想到去 Ubuntu 中 实践一番。结果发现 Ubuntu 进不去了。由于考虑到最近更新了 BIOS 以及在 Ubuntu 中执行了 apt-get upgrade 命令,联想到是引导出问题了,一气之下在 Windows 中使用 DiskGenius 删除了 EFI 分区中的 Ubuntu文件夹,再制作 Ubuntu 启动盘进入应急模式修复。</p>
<p>主要参考了ubuntu重建ESP引导。其中的主要思路是:<strong>设置根目录</strong>,<strong>选择内核和设备</strong>,<strong>选择镜像</strong>,<strong>重启</strong>。</p>
<h3 id="实际操作">实际操作</h3>
<p>之前几步做的比较顺利,可以 <strong>按一下 Tab 补全</strong> 或者 <strong>按两下 Tab 提示所有的可能</strong>。需要注意的是,<strong>不要随意加空格</strong>,比如“set root=(hd2,gpt5)”中的等号两边;由于也怀疑是内核更新的锅,于是使用旧的内核。根据教程的提示,很快猜测出<del>我的设备为 /dev/sdb5</del>。</p>
<pre><code>grub&gt; set root=(hd2,gpt5)
grub&gt; linux /boot/vmlinuz-5.0.0-37-generic ro root=/dev/sdb5 # 错误的设备
grub&gt; initrd /initrd.img
grub&gt; reboot
</code></pre>
<p><img src="https://img2020.cnblogs.com/blog/1611896/202009/1611896-20200908212514105-1040161301.png" alt="" loading="lazy"></p>
<p>然后会发现错误,找不到设备。</p>
<p><img src="https://img2020.cnblogs.com/blog/1611896/202009/1611896-20200908212557403-485519949.png" alt="" loading="lazy"></p>
<p>而且在之前的界面中,/dev下面没有我们的硬盘设备。此处猜测<strong>可能是进入内核后才会加载设备</strong>。然鹅情况不算太坏,启动程序“扔”给了我们一个 busybox,在此处查看 /dev 中,发现了我们的设备(不仅有 sda,sdb,还有 nvme 设备,由于我电脑的主硬盘是 nvme 的,因此猜测大概率就是它了)</p>
<p><img src="https://img2020.cnblogs.com/blog/1611896/202009/1611896-20200908212637890-1599046878.png" alt="" loading="lazy"></p>
<p>再按两下 Tab 键查看所有可以使用的命令,发现了 mount 和 umount。</p>
<p><img src="https://img2020.cnblogs.com/blog/1611896/202009/1611896-20200908212836212-73042989.png" alt="" loading="lazy"></p>
<p>因此想到<strong>可以将设备挂载起来查看文件系统</strong>,于是新建文件夹并将设备 /dev/nvme0n1p5 挂载在其上。执行后,果然看到了熟悉的目录(此处我也尝试挂载其它分区,发现只有挂载 efi 形式的分区可以成功,不可以挂载 ntfs 类型的分区)。</p>
<p><img src="https://img2020.cnblogs.com/blog/1611896/202009/1611896-20200908212715314-1461160988.png" alt="" loading="lazy"></p>
<p>输入 reboot 重启后再次执行上面的一套命令:</p>
<pre><code>grub&gt; set root=(hd2,gpt5)
grub&gt; linux /boot/vmlinuz-5.0.0-37-generic ro root=/dev/nvme0n1p5
grub&gt; initrd /initrd.img
grub&gt; reboot
</code></pre>
<p>此时可以成功进入系统,并且可以推测出是新内核的问题!在系统中使用 apt purge 命令删除新的内核!</p>
<blockquote>
<p>battor@battor-OMEN:~$ dpkg -l | grep linux<br>
......<br>
iilinux-headers-5.0.0-37                     5.0.0-37.40~18.04.1                              all          Header files related to Linux kernel version 5.0.0<br>
iilinux-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<br>
iilinux-headers-5.3.0-51                     5.3.0-51.44~18.04.2                              all          Header files related to Linux kernel version 5.3.0<br>
iilinux-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<br>
rclinux-image-5.0.0-23-generic               5.0.0-23.24~18.04.1                              amd64      Signed kernel image generic<br>
iilinux-image-5.0.0-37-generic               5.0.0-37.40~18.04.1                              amd64      Signed kernel image generic<br>
iilinux-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<br>
......</p>
</blockquote>
<blockquote>
<p>battor@battor-OMEN:~$ sudo apt-get purge linux-headers-5.3.0-51<br>
......<br>
正在卸载 linux-headers-5.3.0-51-generic (5.3.0-51.44~18.04.2) ...<br>
正在卸载 linux-headers-5.3.0-51 (5.3.0-51.44~18.04.2) ...<br>
battor@battor-OMEN:~$ sudo apt-get purge linux-image-unsigned-5.3.0-51-generic<br>
......<br>
正在卸载 linux-image-unsigned-5.3.0-51-generic (5.3.0-51.44~18.04.2) ...<br>
/etc/kernel/postrm.d/initramfs-tools:<br>
update-initramfs: Deleting /boot/initrd.img-5.3.0-51-generic<br>
/etc/kernel/postrm.d/zz-update-grub:<br>
Sourcing file `/etc/default/grub'<br>
Generating grub configuration file ...<br>
Found background image: batman_bg.jpg<br>
Found linux image: /boot/vmlinuz-5.0.0-37-generic<br>
Found initrd image: /boot/initrd.img-5.0.0-37-generic<br>
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi<br>
Adding boot menu entry for EFI firmware configuration<br>
done<br>
(正在读取数据库 ... 系统当前共安装有 145181 个文件和目录。)<br>
正在清除 linux-image-unsigned-5.3.0-51-generic (5.3.0-51.44~18.04.2) 的配置文件 ...<br>
rmdir: 删除 '/lib/modules/5.3.0-51-generic' 失败: 目录非空</p>
</blockquote>
<p>可以看到 apt 还自动帮我们重新生成了引导!</p>
<p>再次启动后,一切恢复了正常XD。</p>
<p><strong>TIPS:</strong></p>
<p>如果是需要手动重新生成引导,需要执行命令:</p>
<pre><code>sudo grub-install
sudo update-grub
</code></pre>
<h3 id="后记">后记</h3>
<p>其实<strong>在进入 grub 的启动菜单以后,可以使用“高级选项”指定内核</strong>。如果出现类似问题,可以直接重新启动指定旧的内核,进入系统后删除新内核即可,而不必重建引导。至于如何禁止内核更新,可以使用 apt-mark hold 和 apt-mark unhold 来禁用和恢复更新。</p>
<p>更新了的 BIOS 也具有一定的迷惑性,差点就提刀去找惠普的售后了。</p>
<p>最后,<strong>busybox 大法好!grub 大法好!Ubuntu 大法好!</strong></p>
<h3 id="参考">参考</h3>
<p>Ubuntu 启动引导修复:</p>
<p>https://www.jianshu.com/p/ce60fe0e61e6<br>
http://jacean.github.io/2016/06/30/ubuntu重建ESP引导/<br>
https://www.cnblogs.com/linuxde/p/8719378.html</p><br><br>
来源:https://www.cnblogs.com/battor/p/ubuntu_boot_repair.html
頁: [1]
查看完整版本: Ubuntu 引导修复