如何为具有多个驱动器的 Windows MacOS 和 Linux 实现稳定的 rEFInd 或 grub 多重引导?

如何为具有多个驱动器的 Windows MacOS 和 Linux 实现稳定的 rEFInd 或 grub 多重引导?

我有一个 250GB SSD (sda),运行 Windows 10 NTFS。第二个 1TB SSD (sdb) 具有使用 apfs 的 MacOS 10.15.7、使用 btrfs 的 Linux Mint 20 和两个使用 ext4 的备用分区。我已经安装了 rEFInd 并且多重启动一切正常。也许我很幸运,但我读了很多罗德史密斯的文档,也许还不够。两个 SSD 都是 gpt 并具有 EFI 分区。发生了一些事情,我不确定到底是什么,但现在,我只能启动 MacOS;直接(按住 alt 键),以及来自 rEFInd。 rEFInd 仍然显示正确的 3 个操作系统图标。我可以启动 Linux 和 grub 的实时 USB。我根本无法从 SSD 启动 Windows 或 Mint,但它们仍然存在。我已经运行了 grub-repair,但这似乎并没有让事情变得更好。它将 rEFInd 移至引导顺序下方,我必须使用 efibootmgr 将其放回原处。

Q1.如果有两个 SSD,如何决定哪一个获得 /EFI/rEFInd 文件夹?

Q2。为什么我的两个 SSD 上都会出现 /EFI/ubuntu 文件夹?

Q3。鉴于我的两个 SSD 和下面的文件夹,每个操作系统的正确 grub 菜单项是什么?

Q4。该列表显示了 sda 和 sdb,我可以看到它们如何等同于 hd0 和 hd1。但 live grub2 指的是 hd8,gpt3(对于 WindowsOS)和 hd9,gpt3(对于 btfrs (mint))。 8和9从哪里来?

谢谢

mint@mint:~$ sudo fdisk -l

Disk /dev/sda: 233.78 GiB, 251000193024 bytes, 490234752 sectors
Disk model: APPLE SSD SM256E
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: E38BCA08-61D9-45FC-8828-D08FD28E1A22

Device         Start       End   Sectors   Size Type                 FS      Flags       Comments
/dev/sda1       2048    206847    204800   100M EFI System           fat32   boot,esp  
/dev/sda2     206848    239615     32768    16M Microsoft reserved   unknown msftres
/dev/sda3     239616 489196172 488956557 233.2G Microsoft basic data ntfs    msftdata    Windows OS
/dev/sda4  489197568 490231807   1034240   505M Windows recovery env ntfs    hidden,diag


Disk /dev/sdb: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: Samsung SSD 860 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EF574C35-C453-45DC-9D86-1DE841DD934E

Device          Start        End   Sectors   Size Type                FS     Flags       Comment
/dev/sdb1          40     409639    409600   200M EFI System          fat32  boot,esp 
/dev/sdb2      409640  585615815 585206176   279G unknown             apfs               MacOS Catalina  
/dev/sdb3   585617408 1171347455 585730048 279.3G Linux filesystem    btrfs              Linux Mint
/dev/sdb4  1171347456 1562437631 391090176 186.5G Linux filesystem    ext4               Spare1 not used  
/dev/sdb5  1562437632 1953523711 391086080 186.5G Linux filesystem    ext4               Spare2 not used


mint@mint:/mnt$ tree -L 5 -P *.efi --ignore-case      sda
.
└── EFI
    ├── Boot
    │   └── bootx64.efi
    ├── Microsoft
    │   ├── Boot
    │   │   ├── bootmgfw.efi
    │   │   ├── bootmgr.efi
    │   │   └── memtest.efi
    │   └── Recovery
    └── ubuntu
        ├── grubx64.efi
        └── shimx64.efi

6 directories, 3 files

mint@mint:/mnt$ tree -L 5 -P *.efi --ignore-case       sdb
.
└── EFI
    ├── APPLE
    │   └── CACHES
    │       └── CAFEBEEF
    ├── BOOT
    │   ├── BOOTX64.EFI
    │   ├── fbx64.efi
    │   └── mmx64.efi
    ├── Linux
    │   ├── grubx64.efi
    │   ├── mmx64.efi
    │   └── shimx64.efi
    ├── refind
    │   ├── icons
    │   │   └── licenses
    │   ├── icons-backup
    │   │   └── licenses
    │   ├── keys
    │   └── refind_x64.efi
    ├── tools
    │   └── gptsync_x64.efi
    └── ubuntu
        ├── grubx64.efi
        ├── mmx64.efi
        └── shimx64.efi

mint@mint:/boot$ tree                                sdb3 Linux Mint /boot
.
├── System.map-5.4.0-26-genericefibootmgr
├── config-5.4.0-26-generic
├── grub
│   ├── gfxblacklist.txt
│   ├── grubenv
│   └── unicode.pf2
├── initrd.img -> initrd.img-5.4.0-26-generic
├── initrd.img.old -> initrd.img-5.4.0-26-generic
├── vmlinuz -> vmlinuz-5.4.0-26-generic
└── vmlinuz.old -> vmlinuz-5.4.0-26-generic

1 directory, 9 files

答案1

Q1.如果有两个 SSD,如何决定哪一个获得 /EFI/rEFInd 文件夹?

例如,如果其中一个 SSD 焊接到系统板上,另一个是可拆卸的,那么确保可拆卸 SSD 也有自己的 ESP 分区和其中相应的引导加载程序文件夹可能是有意义的,这样它就可以如果/当需要出现时,可以更容易地移植到另一个系统。

如果系统固件在检测一个 SSD 时出现问题,但可以可靠地检测另一个,那么您唯一的选择可能是使用易于检测的 SSD 来包含所有引导加载程序以及操作系统启动自己的内核和存储驱动程序所需的所有内容。

除此之外,这主要取决于您的偏好。

Q2。为什么我的两个 SSD 上都会出现 /EFI/ubuntu 文件夹?

以下之一:

  • 如果安装程序看到多个 ESP 分区,它可能会通过将 Ubuntu 的引导加载程序添加到每个分区来确保安全。也许固件无法看到所有磁盘,或者某些磁盘是可移动的,而安装程序不知道这些磁盘可能是哪些。

  • grub-repair/boot-repair 可能已为您创建了一个额外的副本,因为您正在运行修复操作,其中一个磁盘上的初始安装可能由于某种原因无法正常工作。

Q3。鉴于我的两个 SSD 和下面的文件夹,每个操作系统的正确 grub 菜单项是什么?

MacOS 可能无法通过 GRUB 启动,因为它似乎使用 GRUB 尚不支持的 APFS。在引入 APFS 之前,所需的 GRUB 菜单项如下所示:

menuentry "OS X" {
    insmod hfsplus
    search --set=root --file /System/Library/CoreServices/boot.efi
    chainloader /System/Library/CoreServices/boot.efi
}

不幸的是,您没有包含各种文件系统的正确文件系统 UUID 的输出sudo blkid或其中lsblk -o +UUID包含的输出。您也没有识别您的 Linux 根文件系统:我猜它是/dev/sdb4/dev/sdb5

对于 Windows,最小的 GRUB 启动条目可能如下所示:

menuentry 'Windows Boot Manager' {
        insmod part_gpt
        insmod fat
        search --no-floppy --fs-uuid --set=root <place the UUID reported for the sda1 partition here>
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

对于 Mint,最小的 GRUB 引导条目可能如下所示:

menuentry "Linux Mint" {
        insmod gzio
        insmod part_gpt
        insmod btrfs
        search --no-floppy --fs-uuid --set=root <place the UUID reported for the sdb3 partition here>
        echo "Loading Linux Mint kernel..."
        linux /vmlinuz root=<place the Linux device pathname of the Linux root filesystem here> ro quiet splash
        echo "Loading Linux Mint initramfs..."
        initrd /initrd.img

}

注:将其中的部分替换<angle brackets>为实际值。

Q4。该列表显示了 sda 和 sdb,我可以看到它们如何等同于 hd0 和 hd1。但 live grub2 指的是 hd8,gpt3(对于 WindowsOS)和 hd9,gpt3(对于 btfrs (mint))。 8和9从哪里来?

系统的 UEFI 固件可能不仅呈现 SSD,还呈现内置互联网恢复卷和/或当时碰巧插入的任何其他存储设备。您可能需要进入 GRUB 命令提示符并键入ls (hd,然后按TAB查看固件已通知 GRUB 的所有磁盘,然后尝试找出哪个是哪个。

相关内容