双启动UEFI Windows 7和Ubuntu 12.04(均为64位)。 W7条目不会出现在GRUB中

尝试在2天内安装两个操作系统后,我很困惑并且生气了……我的SSD 128 GB和HDD 500 GB都是空的。 我的笔记本电脑是华硕K55VM。 BIOS支持UEFI。

我做了什么:

  1. 安装新的SSD(三星830 128GB)

  2. 使用liveCD上的GParted创建新的分区表(GPT)并创建3个分区(在SSD中)用于不同目的:

    • 分区1:80 GB(w7);
    • 分区2:30 GB(Ubuntu 12.04 -Just / – );
    • 分区3:未使用10 GB(以备将来扩展其他分区)
  3. 在分区1中安装Windows 7(带有UEFI)。这创建:

    • / dev / sda1 – > 100 MB用于系统(UEFI启动我猜) – FAT32
    • / dev / sda2 – > 100 MB aprox。 对于MSR
    • / dev / sda3 – > 79.800 MB aprox。 对于Windows7数据

在这一点上一切正常。 我有W7。 现在我按如下方式安装Ubuntu 12.04 amd64(带UEFI):

  1. 安装/分区2 – > / dev / sda4 30 GB ext4,并在hdd我安装/ home和swap。

  2. 我在/ dev / sda1中选择bootloader(它应该是UEFI引导)。

  3. 我安装更新并重新启动。

问题:现在只显示带有Ubuntu条目的grub菜单,而不是Windows 7。

找到替代解决方案 :当我打开笔记本电脑时,在加载GRUB之前我按下ESC键并出现BIOS启动,所以我可以选择启动Windows分区,Ubuntu分区,DVD,USB等……但我觉得不是最好的启动不同操作系统的方法。

我试过了:sudo update-grub2没有成功。

我能做什么??

通过挂载efi分区找到Windows引导加载程序所在的位置:

sudo mount -t vfat /dev/sdx1 /mnt/efi/ 

并搜索bootmgfw.efi 。 然后,找到驱动器的UUID:

 sudo grub-probe --target=fs_uuid /mnt/efi/EFI/Microsoft/Boot/bootmgfw.efi 

将此UUID添加到/etc/grub.d/40_custom

 menuentry "Windows x86_64 UEFI-GPT" { search --fs-uuid --no-floppy --set=root UUID chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi } 

最后运行update-grub

jarondl的解决方案非常好,但另一个是使用单独的启动管理器程序在GRUB和Windows启动加载程序之间进行选择。 我知道你可以安装三个EFI启动管理器:

  • rEFIt ,可以在Ubuntu的存储库中找到。 请注意,rEFIt网站的版本不适用于基于UEFI的PC,因为它使用特定于Mac的文件格式。 甚至Ubuntu的版本在基于UEFI的PC上也有一些小问题。 理想情况下,rEFIt提供了一个漂亮的GUI启动菜单(虽然它也有一个文本模式)。
  • rEFInd ,它是rEFIt的更新版本,修复了各种UEFI故障和扩展,可与3.3.0内核的内置EFI引导加载程序配合使用。 请注意,我分叉/维护rEFInd。
  • gummiboot,这是一个纯文本启动管理器。 (这个网站一直忘记我是谁,并拒绝让我发布超过两个超链接,或者我会提供一个。)

rEFIt和rEFInd都会自动检测其他引导加载程序,因此一旦配置它们,它们就会检测到任何操作系统的引导加载程序并为您提供菜单。 我还没有尝试过gummiboot,所以我不知道设置是多么简单,但它在概念上类似于rEFIt / rEFInd。 使用这些程序中的任何一个都会增加启动过程的复杂性,因此如果GRUB有效并且您对此感到满意,那么使用这些程序就没什么意义了。 根据我的经验,如果GRUB是不稳定的,或者只是普通不起作用,它们是最有用的,就像在UEFI系统上的GRUB 2一样。 在这种情况下,您可以抛弃GRUB 2而使用ELILO或3.3.0或更高版本的内核的EFI存根加载程序。 这些引导加载程序无法将引导过程重定向到Windows,因此使单独的引导管理器非常有用。 使用3.3.0或更高版本的内核的分发版,rEFInd可以非常容易维护,具体取决于配置细节。

请注意:仅适用于x64

 grub-probe --target=fs_uuid /boot/efi/efi/Microsoft/Boot/bootmgfw.efi 

将其添加到/etc/grub.d/40_custom

 menuentry "Boot bootx64.efi, generated by Boot-Repair" { search --fs-uuid --no-floppy --set=root UUID **chainloader (${root})/EFI/Boot/bootx64.efi** } 

其他代码不起作用。

在华硕N56V上测试过