根据在线资料推测,对于 UEFI/GPT 系统来说,这是不可能的。
我的设置是 SSD 上的 Windows 8.1 操作系统和 1TB SATA HDD 用于存储数据/音乐/图片等。
我最近想加载 Archlinux,并决定调整 1TB 硬盘的大小,以便为 Linux 提供 100GB。我能够成功安装,并且能够通过 BIOS 启动 UEFI Linux 安装。
但是,要在 Windows 8.1 和 Linux 之间切换,我必须在重新启动时按 DEL,进入 BIOS,单击 BOOT 菜单,然后单击 1TB HDD 上启动分区的 arch_grub 条目。
理想情况下,我希望让 Windows 8 Bootmanager 显示 Archlinux 的条目并从那里启动 linux EFI 分区。
我的设置
Primary SSD (Win8)
|- /dev/sda1 – recovery (ntfs)
|- /dev/sda2 – boot (fat32)
|- /dev/sda3 – unknown
|- /dev/sda4 – windows primary (ntfs)
Secondary HDD (Windows Data Disk / Archlinux install)
|- /dev/sdb1 – unknown
|- /dev/sdb2 – windows secondary (ntfs)
|- /dev/sdb3 – /boot (fat32)
|- /dev/sdb4 – /mnt (ext4)
|- /dev/sdb5 – /mnt/var (ext4)
|- /dev/sdb6 – swap
|- /dev/sdb7 – /mnt/home (ext4)
我将单独的 /boot 分区格式化为 FAT32,并使用以下命令将 GRUB 安装到该分区:
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug --force /dev/sdb3
这使我能够从 Windows(驱动器 H:)看到 linux /boot 分区,其结构如下:
/boot/
|-EFI/arch_grub/grubx64.efi
|-grub/
|-fonts/...
|-locale/...
|-themes/...
|-x86_64-efi/...
|-grub.cfg
|-grub.cfg.example
|-grubenv
|- initramfs-linux
|- initramfs-linux-fallback
|- vmlinuz-linux
我尝试过的:
- 按照众所周知的步骤配置bcdedit指导在 Archlinux wiki 中引用。
这会导致启动错误,并要求用户重新启动操作系统。只有 Windows 选项有效。我怀疑这是因为 Linux 位于第二个硬盘上。
- 使用 Grub4Dos 方法,将 grldr 和 grldr.mbr 放在 C: 中,创建一个 bcdedit 条目,其中包含指向 grldr.mbr 的路径。配置 menu.lst 并将其放在 C: 中。menu.lst 如下所示:
标题 Linux
根(hd1,2)
内核/boot/vmlinuz-linux root=/dev/sdb3
initrd /boot/initramfs-linux.img
这会导致与 1 相同的启动错误。我怀疑这是因为不支持在 UEFI/GPT 环境中加载 MBR。
- 创建了一个 bcdedit 条目,目录设置为 H:(linux fat32 /boot 分区),路径指向 EFI/arch_grub/grubx64.efi
这又导致同样的错误。我怀疑这是因为 bcdedit 无法在第二个硬盘上运行。
有人能对这个问题提供见解/指导吗?