请按照以下内容给我提供信息好帮你修复 grub2:
第负二步:
BIOS 里确定你开了 UEFI,SecureBoot 开关都无所谓。FastBoot 关上(不然进完 Windows 10 回来 openSUSE 启动不了,因为 Windows 10 依然占用硬盘)。
第负一步:
准备 chroot(假设你的 root 是 sda8, efi 装在 sda7,因为我看到你 sda2 也是个 efi 分区,你自己确定就好):
vgchange -a y system
mount /dev/mapper/system-root /mnt
mountt /dev/sda7 /mnt/boot
mount -B /dev /mnt/dev
mount -B /dev/pts /mnt/dev/pts
mount -B /proc /mnt/proc
mount -B /sys /mnt/sys
mount -B /run /mnt/run
chroot /mnt
退出 chroot 就输入 exit 就可以。下面你要分好几步检查,所以你可能要弄好多次这个 chroot。
第零步:
验证 SecureBoot 是否关闭:
od -An -t u1 /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
要是 0 的话,就是关闭着,或者根本没有 SecureBoot。要是这个命令失败了,你就不是 UEFI mode 引导的。
第一步:
查找一下 grubx64.efi:
find . -name 'grubx64.efi'
如果找到了:
cat /path/to/grubx64.efi
让我看一下内容。
然后同样方法查找一下 grub.cfg,让我看一下内容。
第二步:
要是内容都没问题的话:
zypper se -v grub2
看看 grub2 装没装。
zypper up grub2
升级 grub2(在搞定了网络的情况下)。
然后查找一下这些值,让我看看:
cat /etc/default/grub | grep "GRUB_USE_LINUXEFI"
cat /etc/default/grub | grep "GRUB_DISABLE_OS_PROBER"
cat /etc/default/grub | grep "GRUB_CMDLINE_LINUX_DEFAULT"
cat /etc/default/grub | grep "GRUB_CMDLINE_LINUX"
第一个 USE_LINUXEFI 应该是 true,第二个是 false,剩下的要是有 resume=/dev/disk/by-uuid/XXX 之类的,用
blkid
确认下那个 uuid 是不是 sda8.
然后检查 /etc/fstab:
cat /etc/fstab | grep boot
给我看下结果。里面的 UUID 也要是 sda8 的 UUID。
第三步:
efibootmgr -v
的结果我也要看一下。如果里面没有 opensuse 的项的话,加上:
gdisk -l /dev/sda7
efibootmgr --create --disk /dev/sda7 --part N --label "opensuse" --load \\EFI\\opensuse\\grubx64.efi
那个 part 的 N 是由 gdisk -l /dev/sda7 得到的。
假如说你的 openSUSE 在 efibootmgr -v 里显示的是 Boot0004 的话,把它的启动顺序变成第一个:
efibootmgr -b 0004 -B
第四步:
要是以上都不行,就重装 grub2
grub2-install --target=x86_64-efi /dev/sda7
grub2-mkconfig -o /boot/grub2/grub.cfg