问题描述
我有一个随Windows 8一起提供的惠普Pavilion Touchsmart笔记本电脑。我升级到了8.1,现在我想让dual-boot成为Windows 10的Ubuntu发行版。当使用Windows 8.1的dual-booting时,Windows Boot Manager始终优先,甚至安装GRUB后。我需要做什么才能让GRUB成为默认的引导加载程序而不是Windows引导管理器?
最佳解决方案
这是我在StackExchange网站上发表的最长的文章,但是这个过程需要大量的解释和关注细节。对于有问题的硬件也有些特殊,需要更多解释。
在经历了许多头痛,两次意外的硬盘重新格式化,以及惠普的多功能固件实施之后,我终于获得了Xubuntu和Windows 10,并且运行良好side-by-side。我已经使用Windows 10完成了这个任务,但它也应该可以在Windows 8.1中使用。这两个较新的操作系统都使用新的(ish)UEFI固件系统,而不是传统的BIOS系统,这是与dual-booting混淆最多的地方。我从许多地方阅读了许多有关BIOS系统dual-booting的说明,这些说明UEFI就好像它只是一种不同类型的BIOS,或者BIOS和操作系统之间的可选层。 UEFI和BIOS不是一回事; UEFI不是BIOS,BIOS不是UEFI。他们完全不同。当有UEFI系统的dual-booting时,有些事情需要以不同的方式完成。
首先,不要使用EasyBCD。我见过许多过时的dual-booting教程,推荐使用EasyBCD,但它的设计目的是与Windows 7和Windows Vista使用的传统BIOS固件配合使用,并且它不适用于新的UEFI固件(Windows 8,8.1或10 )。如果您已经摆弄了EasyBCD,不要担心 – 它可能做的最糟糕的事情是通过将事情写入MBR来让EFI启动条目变得混乱。我们会在步骤4中清除它。说到MBR,避免像瘟疫一样。主引导记录是传统BIOS固件中用作硬盘驱动器引导分区中存储的引导加载程序列表(或者,如果由Windows编写,无论哪个分区都是第一个分区)。这是为了列出硬盘驱动器上的操作系统,并告诉固件哪个先被引导。这不适用于惠普的UEFI固件。看起来,如果有任何MBR修改完成,惠普的UEFI固件会变得混乱并运行回Windows启动管理器,这将完全绕过GRUB。
你需要什么:
-
带有首选Ubuntu发行版的实时USB或安装CD。
-
安装媒体为您的Windows操作系统。如果你从Windows 8.1升级,你可以在不下载Windows 10的全部3+ GB .iso的情况下完成 – 有一个web安装程序可以在安装时下载它 – 但是,对于这种方法,你需要提取.iso到CD或USB驱动器。将它放在未来的手中也是一个好主意,所以你现在可以创建它。由于此问题涉及使用UEFI系统的dual-booting,因此您需要the 64-bit OS.
-
确保你有你的产品密钥,否则你将无法升级/安装。
-
-
可选,但强烈推荐:一个足够大的驱动器来备份当前的Windows文件。
-
两个操作系统,引导分区(只有200 MB)和linux-swap分区(通常与物理RAM的大小相同)的硬盘空间足够大。
第1步:做一个备份
备份您不想丢失的所有Windows文件和文件夹。只要你的新的Ubuntu分区有足够的可用硬盘空间,这个过程不应该干扰Windows文件。尽管如此,这应该是一个冒险的词汇。
Windows 8.1有一个“制作恢复磁盘”工具,但是当恢复我用它制作的备份时,我发现它没用,non-functional。保存不想丢失的文件最直接的方法就是打开Windows资源管理器,并将它们复制到备份磁盘。它需要永远,但它是值得的。
步骤2:禁用快速启动,然后关闭计算机
您需要以管理员身份登录才能执行此操作。
在安装GRUB之前禁用快速启动非常重要,因为Ubuntu安装程序是否可以检测Windows的存在取决于Windows在启动分区中的表现方式。在快速启动正确禁用的情况下,应该检测到它。检测将在第4步中介绍。
Windows 8,8.1和10使用这种称为快速启动的新奇事物,它告诉您的固件加载一个特殊的启动加载程序,可以非常快速地将系统恢复到其pre-shutdown状态。很酷,是吧?那么,因为它会更改EFI系统的next-boot选项,所以在安装GRUB时必须禁用此功能。这可以通过执行以下操作来完成:
-
打开控制面板(Windows 8+中桌面的Windows + X->控制面板)
-
导航到电源选项
-
点击“选择电源按钮的功能”
-
点击“更改当前不可用的设置”
-
确保底部没有选中“开启快速启动(推荐)”框。
更详细的说明可以参见here。在安装GRUB之后,您可以使用re-enable快速启动,并且它似乎不会导致Ubuntu /GRUB引导出现任何问题。只需确保它在安装过程中被禁用。
禁用快速启动后,关闭计算机。由于快速启动被禁用,Windows将完成关机,并且不会更改固件的EFI管理器中的next-boot选项。 (Layman的条款:Windows不会在下一次打开时告诉您的HP系统启动它的快速启动文件,因此它将使用EFI启动管理器的列表,因为它应该如此.GRUB将首先将它自己放在该列表中。)
第3步:用gparted设置分区
在安装Ubuntu之前,您需要使用live CD /USB为它创建一个单独的分区。这样,它*不会覆盖Windows。
*确保你有备份。没有保证 – 这取决于Windows决定在启动分区中做什么,也可能取决于您使用的是哪个Ubuntu版本/发行版 – 我没有全部使用它们。
要制作分区,您需要启动到Live CD /USB,然后打开gparted。有很多关于使用gparted的教程,并且很容易弄清楚,所以我将把具体内容留给你和Internet。
-
你将需要4个分区:
-
一个启动分区。如果您已经安装了Windows,则不需要执行任何操作 – 它应该已经是驱动器中的第一个分区之一。有时,Windows也会在磁盘开始时创建另一个称为恢复的小分区。只需保持这一点。
-
如果你正在做一个新的安装,并且你想从头开始一切(这将消除所有的数据),那么请继续删除驱动器上的所有分区,然后创建这个分区。它应该是第一个分区;它的格式应该是FAT32;它至少应该有200 MB的大小。如果gparted有一个选项来标记它,就叫它
boot
。如果没有标签选项,请不要担心。但是,您必须在此分区上设置”boot”和”esp”标志;没有它们,Ubuntu安装程序将忽略它并使用传统模式安装,并且Windows(10)将拒绝完全安装错误“我们无法创建新分区或找到现有分区”。或不。这似乎取决于Windows如何感觉那一天…
-
-
一个Windows分区。同样,如果你已经安装了Windows,那么在启动和恢复分区之后,这个分区显然应该在这里。这是你想要的地方,但你需要调整它的大小以便为你的Ubuntu分区和linux-swap分区腾出空间。使用gparted的调整大小/移动选项来执行此操作。 Ubuntu需要至少5 GB,而linux-swap分区至少应该是物理RAM的一半大小,所以调整Windows分区的大小以便为此留出足够的空间。 gparted会警告您潜在的数据丢失 – 只要您不将其缩小到正在使用的空间中,则分区的缩小不应该破坏或损坏任何数据。
-
如果从头开始安装这两个操作系统(同样,这会擦除所有数据),Microsoft says对于64位操作系统至少需要20 GB,因此此分区至少需要20 GB。不过,您可能需要的不仅仅是这些:我只是在Windows启动分区后使用了一半空间,其中一半用于Ubuntu和linux-swap。如果你从头开始,这个分区需要格式化为FAT32。当您安装Windows时,它会将其格式化为NTFS。不要这样做与gparted; Windows的NTFS实现与gparted的实现不同,Windows可能无法识别该分区。在Windows 10安装程序中,您应该有选择选择放置Windows 10的分区。如果它被格式化为FAT32,Windows应该能够看到它并在那里安装。如果您可以标记此分区,请将其标记为
Windows
。这将使您在Windows安装过程中更轻松。说到Windows安装程序 – 现在还没有开始。如果您同时进行Ubuntu和Windows的新安装,而不是从8或8.1升级到10,那么首先安装Ubuntu会容易得多。
-
-
一个Linux分区。像Windows分区一样,这可能会有所不同,但Ubuntu’s website建议至少5 GB。再一次,你可能会需要更多的东西。如果您要升级而不是全新安装这两个操作系统,则应该可以在gparted中显示的新”unallocated”空间中创建此分区。尽可能扩大它的大小,但如果你打算使用linux-swap分区,请记住留出空间。它应该被格式化为ext4。 ext2或ext3也可以工作,如果你因为某种原因而喜欢这些。
-
如果从头开始安装,请按照上面的描述制作您的Ubuntu分区。确保它的格式为ext4,ext3或ext2。这将允许Ubuntu使用它,但保持Windows 10安装程序不会识别它,这会导致它默认为您在步骤3中创建的可读取的FAT32分区。
-
-
可选,但建议:linux-swap partition。至少物理内存大小的一半是一个很好的开始,但我建议阅读the details。我有8 GB的RAM和1 TB的硬盘,所以我只是将这个分区与我的物理RAM相同。
-
第4步:先安装Ubuntu
无论您是从现有的Windows操作系统升级到Windows 10还是将Windows 10和Ubuntu发行版都安装到新的或newly-repartitioned硬盘驱动器上,首先安装Ubuntu要容易得多。 Ubuntu使用GRUB 2作为引导加载程序,这与EFI引导加载程序应该执行的操作相同。 Windows 10使用Windows启动管理器,它可以执行任务…以及Windows执行操作的方式……如果先安装Windows,那么如果不在引导过程中按下特殊的密钥,则可能无法启动到Ubuntu停止加载Windows引导管理器,因为Windows引导管理器在添加到引导加载程序列表时不尊重GRUB。相反,首先安装Ubuntu和GRUB,然后为Windows启动管理器添加一个条目到GRUB。
步骤4.1:清除旧的EFI条目(可选)
请注意这里。删除错误的东西会导致严重的问题。
在安装Ubuntu之前,我们要确保过去的操作系统安装的幽灵在将来不会再回到我们身边。在UEFI系统中,操作系统使用EFI(可扩展固件接口)文件告诉固件:“嘿,我存在,这是您可以找到我的地方。”当安装新操作系统时,它会在EFI Boot Manager列表中添加一个条目,该条目为其提供唯一的条目号,并告诉EFI Boot Manager它的EFI文件的位置(Windows会注册几个不同的EFI文件 – 一个用于常规引导,一个用于恢复引导,一个用于快速启动 – 可能更多取决于您的固件和操作系统版本)。 EFI引导管理器还会跟踪boot-order:指定首先引导的条目号的列表。如果您一直在使用EasyBCD; BCDEDIT; Windows’引导修复或恢复工具; boot-repair在Linux操作系统中;或者即使您更新了Windows或重新安装了Windows,您的EFI条目列表现在也有一些重复的机会。至少,我的情况就是如此。重复此处可能导致您的引导过程停滞,因为固件在out-of-date或wrong-file条目中筛选,直到找到可用的引导加载程序。它也可能会导致boot-loop,其中引导加载程序A将固件指向引导加载程序B,并将其指向A,然后事情开始需要非常很长的时间。
无论如何,要查看您的EFI条目列表并查看需要清理的内容,请将efibootmgr
包与您的live CD /USB配合使用。您需要在终端中使用sudo apt-get install efibootmgr
进行安装,然后使用sudo efibootmgr
运行它。默认情况下,你会得到一个如下所示的条目列表:
当我在摆弄EasyBCD和bcdedit之后第一次使用这个工具时,我试图以正确的顺序启动东西,我在这里有超过一百个条目,其中大部分都是重复的。
如果您的启动管理器列表不太混乱,或者如果您不确定哪些内容可以删除,哪些内容不应该删除,请跳至步骤4.2。
要清除不需要的任何条目,请使用efibootmgr -b <hex_number> -B
,其中hex_number
被引导条目列出的编号替换。因此,要删除上图中的USB Drive (UEFI)
条目(编号为Boot2001),我会使用sudo efibootmgr -b 2001 -B
。你会注意到我留下了一些重复项目(所有3000+编号的项目)。您可以使用具有不同选项的efibootmgr
来查看条目的某些其他属性,例如它们指向的文件路径。这些条目看起来像重复,但它们都指向我的HP笔记本电脑用来更新其BIOS的不同文件。请小心你删除。在这里取代东西可能非常困难或不可能。您还可以使用efibootmgr更改它显示的BootOrder。有关此有用工具的更多信息,请参见the man page。
步骤4.2:安装Ubuntu
在清理完EFI Boot Manager条目后,如果您选择这样做,那么最后是安装Ubuntu的时间。加载Live CD /USB后,请从bootloader菜单中选择安装选项,或在登录后从桌面启动它。在安装程序的第一页上选择您的选项。第二部分看起来像这样:(我使用Xubuntu 14.04,所以你的安装程序可能会有所不同,但选项应该非常相似。)
如果你的安装程序没有检测到你的Windows安装(像我的),你需要选择”Something else”选项。从那里,您将看到一个与您用来设置分区的gparted菜单类似的屏幕。只需选择您创建的分区,然后通过选择分区并单击”Change”将其分配到正确的安装点。
-
如果您从头开始安装这两种操作系统,请执行相同的操作。不要使用自动安装选项。您需要确保Ubuntu安装在ext2 /ext3 /ext4分区中,而不是FAT32 Windows分区。
第5步:第二次更新或安装Windows
您应该拥有适用于Windows 10的安装磁盘。在开始安装之前,请确保您的产品密钥位于附近,否则将无法安装/升级。当您启动到安装CD /USB时,安装程序非常简单。有点太简单了,我的安慰 – 唯一的按钮是“安装Windows 10”或类似的东西,而Windows 8,8.1和10,对于他们的behind-the-scenes安装声名狼借,它只是说“我们准备好了” ,并没有提供关于它实际上对你的系统做什么的细节。如果您已按照这些说明操作,则应定期开始安装。
-
如果您从Windows 8或Windows 8.1升级,则不必对安装过程做任何特殊处理。通过(非常长的)安装,然后继续执行步骤6。
-
如果您正在进行全新安装,安装程序会询问您要安装Windows 10的位置。请确保您选择了在步骤2中制作的FAT32分区,而不是另一个分区,否则该分区将被擦除和格式化。由于Ubuntu已经安装,Windows 10应该尊重启动分区,而不是重新格式化它。让清理出的EFI Boot Manager列表中的垃圾条目还将释放200 MB的小型启动分区中的空间,从而减少Windows会感到困惑和愤怒并清除整个事情的可能性。
第6步:更新和(可选)自定义GRUB
安装或升级到Windows 10后,您需要重新启动Ubuntu才能更新GRUB,以便在其列表中包含Windows Boot Manager。在执行此操作之前,请再次禁用快速启动。这与步骤2中的操作非常相似。控制面板和设置UI有点不同,但大多数选项仍然存在。
再次禁用快速启动后,重新启动计算机。
如果Windows默认启动,您需要按住笔记本电脑的特殊键才能进入系统的固件菜单。在我的HP TouchSmart上,这个关键是Esc。其他常见的键是F12,删除,F10 …您的电脑手册应该能够帮助你在这里。从固件菜单中,启动进入GRUB。应该有一个选择“选择引导设备”或类似的东西,Ubuntu或GRUB应该在那里列出。如果未列出,请查找从EFI文件启动的选项,然后浏览到/EFI/ubuntu/grubx64.efi或(如果已启用安全启动),请改为EFI /ubuntu /shimx64.efi。这些文件的实际路径可能会有所不同,具体取决于您的选项,以及如何设置启动分区,但文件名应该相同。选择其中一个.efi文件应该引导到GRUB,然后在那里引导到您的Ubuntu发行版。登录后,打开终端并键入sudo update-grub
。这将运行GRUB使用编译的grub.cfg的os-prober脚本,它告诉,GRUB的EFI文件要包含哪些条目,用什么颜色等。os-prober脚本应该找出Windows启动管理器,并自动将其添加到列表中。
或者,您可以安装Grub Customizer来更改菜单条目的顺序并更改GRUB菜单的行为以及颜色和背景。您可以使用sudo apt-get install grub-customizer
从终端进行安装,然后运行sudo grub-customizer
。
在与Windows操作系统共享的UEFI系统上使用GRUB时,请勿安装到MBR。有些教程将它列为在文件菜单下使用Grub Customizer的“安装到MBR”选项的关键步骤。您不应该在大多数UEFI系统上执行此操作。 MBR(主引导记录)专为BIOS固件而设计,并且在某种程度上仍由Windows Boot Loader使用。将MBUB添加到MBR时,如果它已经在EFI条目列表中,可能会导致大量毛球。如果需要确保GRUB是boot-order列表中的第一个条目(即,如果Windows始终引导,即使您做的都正确),请使用efibootmgr(请参阅步骤4.1)查看/编辑EFI Manager的引导顺序。
说明
根本没有提到安全启动,因为它通常不会影响Ubuntu的安装。很多dual-booting教程都讲述了禁用它,但对于当前的64位安装程序来说,这通常不是必需的。但是,每台PC都不同,而且安全启动相当新(2012年),因此不同的固件可能会有不同的实现。例如,我的惠普固件版本包含一个”legacy boot”选项,该选项禁用安全启动并将安装的操作系统视为BIOS固件:有些人建议为dual-boot进行安装。在我的系统上以传统引导模式安装Ubuntu阻止了GRUB将其自身添加到EFI条目列表,因此它所能做的只是将其自身添加到Windows引导管理器完全控制的MBR中。 Windows引导管理器花了很多时间来显示条目列表,毕竟它只会启动Windows条目,导致GRUB无法使用,而无需在每次开机时手动选择EFI文件。
有关Ubuntu,Secure Boot和Legacy Boot的更多信息,请参阅here,以及有关UEFI和BIOS安装之间区别的信息。
次佳解决方案
我不想复制潜在的政策违规的帖子,所以我会链接我的回答这个问题。总之,我已经安装了Windows 10的三星笔记本电脑,我试图安装多个实例的Linux; Ubuntu 12.04,14.04和16.04。我使用了Boot-Repair,并在我的设置BIOS中更改了引导优先级,这首先导致了一个功能性但杂乱的GRUB加载。 Answer by user Michael Hoffmann为空白驱动器上的安装以及如何清理GRUB提供了很好的解释,但我不想删除我的Windows 10安装。
详细的解释可以在我的文章HERE中找到。
第三种解决方案
我可以向您简单介绍一下这个问题,如果没有合法的解决方案解决您的问题,请使用它。
由于Windows不断更改引导顺序,因此黑客会欺骗Windows将Ubuntu grub识别为Windows启动文件,即bootmgfw.efi
Part 1: Accessing EFI folder on Windows
以管理员身份打开cmd并挂载EFI文件夹以访问它。逐个执行以下命令。在下面,我已将字母g分配给挂载,请确保在PC中分配未分配的字母。
mountvol g: /s
g:
cd EFI\
您应该在EFI中看到Microsoft文件夹和Ubuntu文件夹。
Part 2: Copy grubx64.efi from Ubuntu to Microsoft\Boot\ as bootmgfw.efi
首先创建bootmgfw.efi的备份
cd Microsoft\Boot\
rename bootmgfw.efi bootmgfw_.efi
现在做复制和重命名。
copy g:\EFI\ubuntu\grubx64.efi g:\EFI\Microsoft\Boot\
rename grubx64.efi bootmgfw.efi
Part 3: Unmount the EFI folder
逐个执行以下命令。
c:
mountvol g: /d
现在重新启动你的电脑,你应该看到加载了Ubuntu GRUB,它应该有一个Windows UEFI加载器选项来启动Windows。
第四种方案
上述问题更简单一些。
-
在boot-up期间按
F10
以通过高级BIOS设置 -
在BIOS引导顺序设置中,启用传统引导顺序,这将启用UEFI和传统引导顺序。
-
将启动延迟增加到5秒将在启动时间OS选择期间给出一些时间。
-
保存BIOS设置并退出。
-
在下一次启动时,您将被问到启动选择选项。按
F9
输入并选择适当的引导选项(Windows操作系统引导管理器或Ubuntu)