Fedora和Windows 8双启动报错:需要先加载内核

R S*_*ltz 4 fedora dual-boot windows grub2 uefi

虽然似乎有很多关于双引导 Windows 和 Linux 的问题,但我没有看到一个似乎涵盖这个问题的问题。也就是说,我相信很多问题都可以用类似的方式解决。

在 11/9/2014 最新补丁的 Fedora fc20 中,grub 在选择自动生成的 Windows Bootloader 条目时会出现以下两个错误。

> error: file '/EFI/Microsoft/Boot/bootmgfw.efi' not found 
> error: you need to load the kernel first
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

R S*_*ltz 5

显而易见的答案是,这是因为 grub 找不到 Windows 引导加载程序。不太明显的答案是因为 grub 配置文件没有正确指定 Windows 引导加载程序的根目录。默认操作似乎忽略了该行。虽然修复默认的 Windows 引导加载程序会有些复杂,但以下说明将允许您让系统创建第二个正常工作的引导加载程序。

如果您使用 Fedora fc20 或其他类似配置的运行 grub2 的系统,只要您没有损坏 Windows 引导加载程序分区,以下步骤应该可以解决您的问题。

1) 找出您的 Windows 引导加载程序所在的分区。

[root@localhost]# fdisk -l

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
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: D733242D3-33B9-4C33-B33F-2C333DC52333

Device           Start          End   Size Type
/dev/sda1         2048       206847   100M EFI System
/dev/sda2       206848      2050047   900M Windows recovery environment
/dev/sda3      2050048      2312191   128M Microsoft reserved
/dev/sda4      2312192    988518399 470.3G Microsoft basic data
/dev/sda5   1911560192   1953523711    20G Windows recovery environment
/dev/sda6    988518400    989337599   400M EFI System
/dev/sda7    989337600    991385599  1000M Microsoft basic data
/dev/sda8    991385600   1911560191 438.8G Linux LVM

Disk /dev/mapper/fedora-swap: 7.8 GiB, 8396996608 bytes, 16400384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mapper/fedora-root: 431 GiB, 462728200192 bytes, 903766016 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Run Code Online (Sandbox Code Playgroud)

2) 找出该分区的 UUID。

[root@localhost]# blkid /dev/sda1
/dev/sda1: LABEL="SYSTEM" UUID="1234-567A" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="0c33e3ab-d3dc-3af3-333d-a33eee3c333c"
Run Code Online (Sandbox Code Playgroud)

注意:Fedora 会在您执行更新内核等操作时自动生成一个新的配置文件,因此虽然您可以手动编辑 grub.cfg 文件,但从长远来看,编辑用于生成配置存根文件的工作较少grub.cfg 文件。

3) 将 menuentry 文本添加到 /etc/grub.d/40_custom 文件的末尾。使用您选择的文本编辑器,但您必须是 root 用户才能这样做。我用过vi。确保将步骤 2 中的 UUID 替换为此处显示的 1234-567A。

[root@localhost]# vi /etc/grub.d/40_custom

menuentry 'My Working Windows Bootloader' {
    search --no-floppy --fs-uuid --set=root '1234-567A'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
    boot
}
Run Code Online (Sandbox Code Playgroud)

4) 现在使用 grub2-mkconfig 命令生成实际的配置文件。

[root@localhost]# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.16.7-200.fc20.x86_64
Found initrd image: /boot/initramfs-3.16.7-200.fc20.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-0b156afaadc545779646d809437ed977
Found initrd image: /boot/initramfs-0-rescue-0b156afaadc545779646d809437ed977.img
Found Windows Boot Manager on Microsoft/Boot/bootmgfw.efi
done
Run Code Online (Sandbox Code Playgroud)

注意:通过指定 /etc/grub2-efi.cfg 作为输出文件来运行此命令会删除通常存在的符号链接并创建一个新文件而不是更新实际的配置文件。

5)你完成了。重新启动后,您现在应该可以访问 Windows 和 GNU/Linux 操作系统。