Manjaro 与 Win10 在不同的驱动器上双启动 - Manjaro 的 EFI 分区类型列为 BitLocker。不会加载 grub

Manjaro 与 Win10 在不同的驱动器上双启动 - Manjaro 的 EFI 分区类型列为 BitLocker。不会加载 grub

系统:

Manjaro 在 m.2 nvme 驱动器上运行,Windows 10 在单独的 HDD 上运行

问题:

假期期间,我似乎把我的系统弄得一团糟。几个月来,我的系统一直很稳定,但我想要 SecureBoot 的安全功能,所以我在 BIOS 中启用了它。从那时起,我的系统就无法启动 Manjaro,只能加载 Win10。我重置了安全启动设置,但问题仍然存在。

目前,我能够启动使用 Rufus 以 dd 模式制作的实时 Manjaro 磁盘。我曾经mhwd-chroot访问过 上的现有安装nvme0n1p2,因此可以备份我的文件。我尝试运行grub-install /dev/nvme0n1,并得到:

grub-install: error: cannot fine EFI directory.

经过一番查找,我发现我的 Manjaro 的 EFI 目录似乎在nvme0n1p1。所以我尝试挂载它:

# mount /dev/nvme0n1p1 /boot/efi
mount: /boot/efi: unknown filesystem type 'BitLocker'

查看lsblk -f,我可以看到该分区确实被列为 BitLocker(即/dev/sda3Windows 文件系统分区)。我是否可以正确地假设这看起来像是 Win10 加密了我的 EFI 分区?我的下一步恢复步骤是什么?我可以使用 GParted 重新格式化该分区,然后将其挂载到/boot/efi,然后运行grub-install吗?

有关更多信息,我确实尝试使用启动恢复工具,但显然它只适用于 Ubuntu 发行版。无论如何,这里是它的分析的 pastebin,它可能有用也可能没用:http://paste.ubuntu.com/p/PkmfdtxHjq/

答案1

所以,在经历了许多痛苦和折磨之后,我终于解决了我的问题。我认为我之前的直觉是正确的——打开安全启动然后启动到 Windows 的操作不知何故加密了我的 Linux EFI 分区nvme0n1p1。我会可能我一直按照自己的直觉清除该分区,但由于它只有 300MiB,不值得占用空间,所以为了以防万一我创建了一个新分区。以下是我解决此问题的步骤:

  1. 启动 Manjaro live usb
  2. 运行 GParted
  3. 通过从左侧缩小,在 BitLockernvme0n1p1和我所运行的文件系统之间创建一个新的 300MiB 分区。新分区应为 fat32nvme0n1p2nvme0n1p2
  4. 在 GParted 中应用更改
  5. 通过 GParted将bootesp标志应用于新分区( )nvme0n1p4
  6. 我们mhwd-chroot-shellchroot进入您的系统 ( nvme0n1p2)
  7. 更改/etc/fstab为使用新分区,而不是旧分区。
  8. 更新 GRUB

更新 grub:

$ sudo su
# grub-install /dev/nvme0n1
# update-grub

fstab 更改:

- UUID=319a7d84-9d20-4f5f87f3-10948da50d73  /boot/efi   /dev/nvme0n1p4: PARTUUID=   defaults    0   1
+ UUID=C410-9DC8    /boot/efi   vfat    defaults    0   2

我不确定为什么那里的原始行有不同的格式。最初我的新行遵循相同的格式,但那也行不通。经过更多阅读后,我似乎清楚它应该在末尾有一个2,而不是一个1,并且额外的细节不属于这里。

此时,我重启了机器,没有插入 USB 线,以为已经解决了问题,但问题仍然存在。因此还需要执行几个步骤:

  1. 插入 Live USB 并重启,直到进入 Live USB 的引导加载程序菜单。底部有一个“检测 EFI 引导加载程序”选项。
  2. 选择设备的引导程序。在我的例子中,选择 (hd1,4)
  3. 此时,我的原始 GRUB 已加载,我能够登录系统。登录后,我再次更新 grub(与之前相同的命令)。我现在可以正常启动系统了!无需 Live USB!

这对我来说都是新事物,因为我以前从未遇到过此类问题。希望其他人可以使用这些信息。

最后说明mhwd-chroot-shell:我遇到了一些麻烦,因为它无法检测/etc/到我nvme0n1p2分区中的目录,因此无法识别任何 Linux 系统。为了解决这个问题,我最终调整了 shell 脚本。就在它抛出“未找到 Linux 系统!”的错误之前,我添加了一个检查,如果它无法检测到任何 Linux 系统,则手动将我的分区注入其中:

if [ $nbpart -eq 0 ]; then
    list[$nbpart]=/dev/nvme0n1p2
    ((nbpart++))
fi

相关内容