双启动后Grub不显示Windows 8选项

所以,我已成功使用Ubuntu 12.04双启动我的Windows 8机器。 但是,我仍然没有一种方便的方法来选择在启动时加载哪个操作系统。

安装Ubuntu后,我的电脑仍然直接加载Windows 8。 然后我将grubx64.efi添加到我的引导加载程序的白名单中。 但在那之后,我的机器直接加载Ubuntu,甚至没有出现GRUB的阴影!

我使用了boot-repair,我得到了这个paste.ubuntuurl: paste.ubuntu.com/1326074 。 在运行boot-repair(并重新列出grubx64.efi文件)后,GRUB现在显示但没有任何Windows 8选项!

最后,我运行了sudo fdisk -l ,它给了我这个:

 WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted. Disk /dev/sda: 750.2 GB, 750156374016 bytes 255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 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 identifier: 0x6396389f Device Boot Start End Blocks Id System /dev/sda1 1 1465149167 732574583+ ee GPT Partition 1 does not start on physical sector boundary. 

我猜我的问题与上面fdisk的警告有关,但我不知道该怎么办。 我现在该怎么办?

编辑

我的etc/default/grub如下:

 # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" 

另外,仅仅是为了记录, 这是我在安装双启动时所遵循的 。 教程(使用11.10,我必须注意),没有提到任何关于这个问题的内容。 那里有什么我不应该做的吗?

首先,你的fdisk -l输出不是问题; 它只是将您的磁盘标识为使用GUID分区表(GPT)分区系统。 要查看分区,您必须改为使用支持GPT的工具,例如gdiskparted ,而不是fdisk ,它不了解GPT。

其次,您可以通过向/etc/grub.d/40_custom添加合适的条目然后执行sudo update-grub来让GRUB链式加载Windows。 条目可能如下所示:

 menuentry "Windows 8" { set root='(hd0,gpt1)' chainloader /EFI/microsoft/BOOT/bootmgfw.efi } 

但是,细节可能取决于您的安装。

第三,如果你认为rEFInd是丑陋的,你可以随时尝试另一个rEFInd主题或创建自己的主题,如rEFInd文档中所述。 或者,如果您更喜欢文本模式引导加载程序,则可以在textonly中设置textonly选项。 你可以通过切换到gummiboot来达到类似的目的。

第四,如果rEFInd定期报告错误,请写下这些错误或用数码相机拍摄屏幕照片并报告给我。 (我是rEFInd的维护者。)如果没有人报告错误,就无法修复错误; 或者如果它们不是rEFInd中的错误,则消息可以提供有关如何解决问题的线索。

最后,可以在不使用GRUB的情况下通过rEFInd(或gummiboot)启动Linux; 你只需要一个不同的EFI启动加载器。 我个人的偏好是Linux内核的EFI存根加载器。 但是,这仅适用于3.3.0及更高版本的内核。 由于Ubuntu 12.04附带3.2.0内核,你需要为Ubuntu 12.04找到预先构建的3.3.0(我听说过这些东西,但我没有任何链接方便)或构建你的拥有源代码。 (你也可以安装Ubuntu 12.10,它附带一个合适的内核,但可能你想要一个LTS版本,所以这可能不是最佳的。)有关如何设置它的更多详细信息,请参阅启动Linux的rEFInd文档页面 。 您也可以使用ELILO或GRUB Legacy。 如果您只是反对延迟,则可以减少GRUB 2超时值并将其设置为默认情况下不显示菜单。

使用CD启动到Ubuntu,
选择“试试Ubuntu”,
连接到互联网,
使用CtrlAlt -t打开终端窗口,然后运行: boot-repair

如果找不到引导修复,则安装它:

 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update && sudo apt-get install -y boot-repair && boot-repair 

单击推荐修复。 在纸上写下将出现的新url。 重新启动电脑,你应该得到一个可以访问Ubuntu和Windows的GRUB菜单。 如果有任何问题,请指明新的URL。

/EFI/Microsoft/Boot/bootmgfw.efi答案都可以。 然而,我为了获得set root='(hd0,gpt1)'的正确设置而被黑客攻击。 如果你知道这很简单

当GRUB启动时:按c在提示符处输入命令ls
你得到硬盘上的分区列表,如(hd0,gpt1)等。
键入ls (hd0,gpt1)并尝试其他。
看看标签,如果它表明EFI,你知道你已经受到了打击。

警告:根据您安装Ubuntu的方式,可能会有更多标有EFI的分区。 尝试所有这些。

尝试运行sudo update-grub 。 这应该有希望自动识别Windows 8并将其添加到GRUB并重新配置菜单。

如果失败了,请在这里分享你的/etc/default/grub文件,我们来看看。

尝试制作一个名为/etc/grub.d/30_windows的文件,其中包含:

 #!  /斌/庆典
猫<< EOF
 menuentry“Windows 8”{
     insmod part_gpt
     insmod chain
     set root ='(hd0,gpt1)'
     chainloader /EFI/Microsoft/Boot/bootmgfw.efi
 }
 EOF

然后运行sudo update-grub并重启。

完整教程

  1. 请下载超级Grub并按照其指示。 没有它我永远不会离开家。 当grub菜单没有显示时非常有用。

  2. 您必须加载到CD并启动它。 只需按照随附的说明进行操作即可。

  3. 它也可以用于修复窗口。 由于你只能启动到Windows 8,你想选择Linux修复程序。

玩这个,但请阅读说明。 一段时间后你会觉得自己是专家。 RS

我的终极解决方案

(*因为汤姆没有工作而且NikTh的链接太复杂了。但是,嘿,谢谢你的烦恼!)

安装rEFInd 。


我接受了我自己的答案,直到有人指出可能的缺陷并修复它或解决我的问题(不幸的是,这只是问一个问题“如何轻松地将Windows 8放入GRUB?”)。

编辑8/6/17:我最终使用rEFInd来解决这个问题(见上面接受的答案)。)

远非一个完美的解决方案,使用rEFInd似乎是一个非常黑客的工作。 首先,它看起来很丑陋(对不起rEFInd)并且告诉我在启动时某些.efi({ext2_x64,hfs_x64,iso9660_x64,reiserfs_x64} .efi)的访问被拒绝了 – 虽然没什么关键,但是按下按钮就消失了按*。 而且,最后,选择Ubuntu efi仍然会加载GRUB,这是一个完全不必要的步骤,至少因为我不打算保留多个内核版本。

综上所述…

优点:我的系统现在或多或少都像我的UEFI前双靴子一样。 缺点:它看起来很难看,加上更长的启动时间。

*我必须注意,这个rEFInd是通过我的Ubuntu分区上的install.sh安装的。 以前使用rEFInd(通过Windows设置)的经验没有这个问题。