我的硬盘使用 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/efi
grub 。一切工作正常,当我将其设置为启动优先级顺序中的第一个时,我可以从 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:
- 使用实时 USB/CD 启动 Linux
- chroot 到你的 Linux 根分区(我假设是 /dev/sda2)
将 /dev/sda1 挂载到 /boot/efi
运行 sudo grub 安装
如果你尝试这样做会发生什么?
(注意:我建议您首先确保您的关键数据已备份)