切换发行版;破烂的幼虫

切换发行版;破烂的幼虫

我的硬盘使用 GPT。我已将启动模式设置为仅 UEFI。我的分区是:

/dev/sda

/dev/sda1 Grub 300MiB FAT32
/dev/sda2 Linux 97.66GiB ext4
/dev/sda3 Windows 97.66GiB NTFS
/dev/sda4 Microsoft_Reserved 16MiB unknown
/dev/sda5 Data 726.13GiB NTFS 
/dev/sda6 Swap 9.76GiB linux-swap 

我在 上安装 Sparky linux 的过程中已经设置了/boot/efigrub 。一切工作正常,当我将其设置为启动优先级顺序中的第一个时,我可以从 grub 菜单中在 Linux、其恢复、Windows 10 和 BIOS 之间进行选择。/dev/sda1/dev/sda2

我现在用 Solus Linux 替换了 Sparky Linux。但问题是 grub 不再起作用了。从 grub 分区启动时出现以下错误:

error: file `/boot/grub/x64_86-efi/normal.mod` not found.
Entering rescue mode
grub rescue>

启动 Linux 并执行后,sudo update-grub我得到了:

$ sudo update-grub
Generating grub configuration file ...
Found background: /usr/share/backgrounds/splash.tga
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
done

但这似乎并没有解决问题。我认为我的 HDD 目前有 3 个引导加载程序:Linux、Windows 和 grub,至少 BIOS 中的引导优先级菜单中显示的是这些内容。

编辑: 我尝试重新安装 grub,现在我可以了grub 引导加载程序,它们都不起作用。

输出lsblk

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0   300M  0 part 
├─sda2   8:2    0  97.7G  0 part /
├─sda3   8:3    0  97.7G  0 part 
├─sda5   8:5    0    16M  0 part 
├─sda6   8:6    0 726.1G  0 part 
└─sda7   8:7    0   9.8G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  

我不知道该怎么做才能修复它。我只想在启动时可以选择我的操作系统。

答案1

这个 linux.com 链接将解释如何通过 grub-rescue 从损坏的 grub 中恢复。

基本上你需要

ls (hd0,1)/
ls (hd0,2)/

依此类推,直到找到 /boot/grub 目录以及 vmlinuz 和 initrd.img 文件。尽管该链接期望这些文件位于 /boot/vmlinuz-xyzblah 中,但您可能会将它们视为 / 中的链接,仅指向当前内核和 initrd。如果不这样做,则只需查看 /boot/ 并相应修改以下内容。

从您的 lsblk /boot/grub 来看,可能位于 (hd0,1),而您的 linux 操作系统的其余部分位于 (hd0,2)。

一旦找到操作系统的分区,您可以使用以下命令进行验证

cat (hd0,2)/etc/fstab

如果这些假设是正确的那么

set prefix=(hd0,1)/boot/grub  #tells grub where it can find insmod etc
set root=(hd0,2)              #tells grub where to find / 
insmod normal                 #loads normal module
normal                        #executes normal
insmod linux                  #loads the linux module
linux /vmlinuz root=/dev/sda2 #executes linux, loads the kernel and tells it where to find /
initrd /initrd.img            #loads the initrd
boot

请注意 root=/dev/sdx 命令。如果您忽略此选项或将其指向错误的分区,那么您将遇到内核恐慌。如果是这样那么就瑞斯并重新开始。

如果上述方法不起作用,请再次尝试将第一行更改为

set prefix=(hd0,2)/boot/grub

进入后即可重新安装 grub。

我喜欢在修复 grub 时使用 grub-customizer,因为它可以让我在 Linux 中查看启动选项和 grub 中的设置,并在重新启动之前修复任何问题。

答案2

您应该能够通过执行以下操作来重新安装 GRUB:

  1. 使用实时 USB/CD 启动 Linux
  2. chroot 到你的 Linux 根分区(我假设是 /dev/sda2)
  3. 将 /dev/sda1 挂载到 /boot/efi

  4. 运行 sudo grub 安装

如果你尝试这样做会发生什么?

(注意:我建议您首先确保您的关键数据已备份)

相关内容