如何在 CHROOT 中“更新 GRUB”

如何在 CHROOT 中“更新 GRUB”

我正在双启动 Windows 10 和 Ubuntu 18.04。我最近更新了 Windows 10,从那时起我就无法启动 Linux。偶尔,更新会搞乱 Linux 分区启动,但我总是能够通过 grub 命令行修复该问题。这似乎是一个完全不同的问题。

如果这是重复的,我深感抱歉——在我见过的所有相关问题中,提问者通常能够进入恢复菜单,或者可以正常启动但不能进入恢复模式。

我可以从 grub 成功启动引导过程,但此后,我无法进入 Ubuntu 的登录屏幕。进入 grub (2.02) 后,我导航到“Ubuntu”或“Ubuntu 高级选项”,那里有四个选项:

Ubuntu, with Linux  4.18.0-21-generic
Ubuntu, with Linux  4.18.0-21-generic (recovery mode)
Ubuntu, with Linux  4.18.0-20-generic
Ubuntu, with Linux  4.18.0-20-generic (recovery mode)

成功启动这四个中的任何一个都会退出 grub 并启动一系列屏幕输出。但是,我从未进入图形登录窗口、登录提示符或任何交互。我将在此处输入通常的最后五行:

[   OK   ] Reached target Local Encrypted Volumes.
[   OK   ] Reached target Local File Systems (Pre).
[   OK   ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch
[   OK   ] Reached target Sound Card.
[   OK   ] Found device WDC_WDBNCE5000PNC SSD.

然后,什么都没发生。我必须按住电源按钮六秒钟才能重新启动计算机。除了全新安装,有人有什么想法吗?

如果有人想知道之前的台词,我很乐意在这里抄录下来。我很感激能得到的任何帮助。

编辑:以下是我按照@K9spud 的建议操作后发生的情况。 fsck结果一切正常,这让我松了一口气。我以前chroot使用 Linux 安装作为根目录,发现 /var/boot.log 比最初列出的进度要远得多。我注意到的一件事是,我发布日志时日志末尾的设备无法挂载,可能是因为我设置错误/etc/fstab。日志中的最后一条消息是

[  OK   ] Started Show Plymouth Boot Screen

从 /etc/fstab 中删除有问题的行后,系统可以正常启动。

TL;DR:配置不正确/etc/fstab会导致登录屏幕无法显示。

答案1

这可能是一个难以回答的问题。最简单的答案是全新安装,但如果您在旧安装中已经投入了大量数据/自定义,那就很糟糕了。

如果这是我的电脑,我会从我的 Ubuntu USB 安装拇指驱动器以实时模式启动 Ubuntu,并开始检查硬盘,试图找出问题所在并尝试修复它。

您要做的第一件事就是备份所有内容,因为您第一次尝试修复问题时可能会让事情变得更糟。

接下来,我会在 Linux 分区上运行 fsck,以确保分区没有被损坏。如果 fsck 返回的结果没有问题,那太好了,您的所有数据都还在,如果需要,可以通过某种方式恢复。如果 fsck 返回的结果有一堆错误,我会说安装失败了,分区已损坏,除了在全新安装之前可以检索的任何自定义数据外,不值得挽救。

fsck 通过后,我可能会挂载 Linux 分区并使用“chroot”从 Linux 安装中开始工作,就像我从 Linux 安装中启动一样。您必须在 chroot 环境中摆弄安装 dev、sys、proc 等,然后可以运行“update-grub”尝试重新安装 grub。运行“update-grub”可能会发现一些错误,这些错误可以解释您无法启动的原因。

如果“update-grub”起作用而没有显示任何重要信息,也许可以尝试在 /var/log 下查看是否有任何日志文件显示任何错误,从而可以表明系统启动失败的原因。

除此之外,如果没有亲眼看到所有的错误消息并尝试评估哪些地方出了问题、哪些地方没有问题,我不确定还能提出什么建议。

令人沮丧的是,Windows 如此不重视 Linux 安装,以至于它有时会使 Linux 无法启动——这让我想完全避免使用 Windows 双启动系统。希望微软将来能有所改进,并开始更加小心,避免搞砸 Linux 安装。

答案2

如何在 CHROOT 中“更新 GRUB”

  1. 在 Linux Live 模式下从 Ubuntu USB 拇指驱动器启动。确保您的 BIOS 以适合您系统的正确模式(UEFI 与 Legacy/MBR)启动 USB 驱动器,否则您将在使 update-grub 正常工作时遇到重大问题。

  2. 一旦启动到实时 Linux,打开终端并开始执行以下命令:

mkdir linux

sudo mount /dev/sdXX linux

(将“/dev/sdXX”替换为您硬盘上的 Linux 分区的正确设备/分区号。您可能需要运行“gparted”来查看您的分区表,以查明具体是什么)

sudo chroot linux /bin/bash

mount -t devtmpfs udev /dev

mount -t proc proc /proc

mount -t sysfs sysfs /sys

update-grub

(某些系统可能需要一些额外的 /boot 和/或 /boot/efi “mount” 命令 - 请参阅系统的 /etc/fstab 文件以获取帮助以确定如何在需要时挂载这些命令)

如果一切正常,“update-grub”应该会显示类似以下内容的内容:

Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-48-generic
Found initrd image: /boot/initrd.img-4.15.0-48-generic
Adding boot menu entry for EFI firmware configuration
done

对我来说,update-grub 就是让我的系统重新启动所需要的全部内容,但是对于某些人来说,如果 grub 已经完全从 MBR 或 UEFI 使用的内容中消失,则可能也需要使用“grub-install”。

一旦所有操作均无错误完成,您必须在退出之前卸载我们之前在 chroot 环境中安装的所有内容。否则,Ubuntu 在关机时将很难彻底卸载 Linux 分区。

umount /sys

umount /proc

umount /dev

exit

sudo umount linux

sync

相关内容