将Windows 10添加到GRUB OS列表


29

我最近从学校买了一台电脑。它装有Windows 8.1。然后,我安装了Windows 8.1的另一个副本(因此它将使用内置的Windows Pro许可证)并将其升级到Windows10。然后,我在Windows 8和10的同时安装了Ubuntu。

请注意,我为/ boot创建了一个单独的255MB ext2分区。

现在,当我启动计算机时,我首先看到带有Windows 8和Ubuntu选项的GRUB提示符(我已经取消隐藏grub提示符“因为我喜欢那样”)。但是,没有Windows 10选项。如果选择Ubuntu,计算机将启动到Ubuntu。但是,如果选择Windows 8选项,则会发送到Windows引导加载程序,然后在该引导加载程序中为我提供启动Windows 8或Windows 10的选项。(但是,此时计算机已经加载了内核,显然,Microsoft误解了引导加载程序的概念,并认为这意味着“实际上是在实际显示引导加载程序之前引导整个系统”。典型的Microsoft。)

如何禁用Windows Bootloader并将Windows 10选项添加到GRUB?编辑:有人回答告诉我禁用Windows引导程序。但是,我仍然不知道如何将Windows添加到GRUB OS列表。有人能帮忙吗?

编辑2:使用EasyBCD从Windows引导加载程序中删除Windows 10之后,似乎在几次重启后会不断隐藏自身,并且Windows 10会重新出现。但是,后来我从msconfig的操作系统列表中删除了Windows 10,它似乎一直处于删除状态。

但是,我仍然没有设法使Windows 10出现在GRUB中。好像GRUB根本没有检测到它。

另外,我将其放在问题中,以便人们看到它-我尝试使用boot-repair,但是它没有任何帮助。


1
@ daltonfury42如果您不听或不理解OP的要求,请停止相信!对于具有特殊要求的非典型 UEFI安装,推荐一种主要解决典型传统引导设置中常见问题的工具会产生误导,并且会适得其反。
LiveWireBT

2
@LiveWireBT对不起。我看到了你的答案。我已经删除了我的评论(并不再相信:P)。谢谢!
daltonfury42 2015年

1
我想我还是要删除整个Windows 10分区并将其移至VM。
Hitechcomputergeek

坦率地说,不确定为什么人们仍会对此表示赞同,因为IMO并不是一个大问题。但是,今年我以另一种方式解决了这一问题-从MBR转换为GPT和UEFI引导。基本上,我将分区方案转换为GPT,调整了Windows分区的大小,添加了EFI系统分区,并在其上放置了rEFInd,然后使用Windows安装磁盘创建了Windows BCD。现在,系统使用UEFI引导启动,从而更轻松地与OS一起玩。与互联网所说的相反,将Windows安装从BIOS转换为UEFI并不难,但是也不容易。
Hitechcomputergeek

1
对于将来想要执行类似操作并希望使用BIOS的任何人-我相信答案就在于Windows BCD。我相信Windows 10安装没有适当的引导程序或BCD或其他功能,并且实际上没有能力独立引导。如果做得正确,我有种预感GRUB应该会开始自动查找Windows 10分区。
Hitechcomputergeek

Answers:


25

使用:

sudo update-grub
sudo grub-install /dev/[BOOT PARTITION eg. Sda6]

Ubuntu终端中的命令,可能会解决您的问题。

通过此命令,系统将自动检测您的Windows安装并将其添加到GRUB列表。


2
不幸的是,这没有用。似乎无法检测到Windows 10分区。
Hitechcomputergeek

1
实际上,我的系统存在相同的问题(具有Windows 10和ubuntu 14.04),此命令已解决了该问题。
Neel Shah 2015年

哪个命令解决吧,update-grub还是grub-install?并且您有一个单独的/ boot分区吗?问题是我认为它实际上是sda6,上面有一个单独的引导分区。
Hitechcomputergeek

显然,执行这两个命令并不能解决问题。
Hitechcomputergeek

7
sudo update-grub做到了。
thameera '16

21

有时os-prober是错误的。

例如,查看Windows 10分区的UUID:

sudo blkid /dev/sda2

然后编辑/etc/grub.d/40_custom,并在文件末尾添加:

menuentry "Windows 10" --class windows --class os {
   insmod ntfs
   search --no-floppy --set=root --fs-uuid $your_uuid_here$
   ntldr /bootmgr
}

不要忘记更改UUID。

最后更新您的grub配置文件:

sudo update-grub

资源


2
值得注意的是,对于Windows 10,通常第一个分区不是Windows系统分区(即sdb2是正确的,而sdb1不是)这是因为Windows 10在安装过程中是如何存储在磁盘上的,以及系统保留的分区或系统维修永远是第一位的。如果磁盘上的第一个分区已经提供了可引导的空间,则Grub经常找不到第二个分区。查找正确的UUID的最简单方法是通过查找最大的分区,sudo fdisk -l并将其与blkid的结果相匹配。
janmyszkier '04

9

此解决方案在grub2菜单中提供了适当的条目,并且无需参考BIOS就可以将链式加载直接加载到Windows 10中。它来自https://ihaveabackup.net/article/grub2-entry-for-windows-10-uefi,所以我不承认任何信誉。找到可行的解决方案真是令人欣慰

简要地,编辑/etc/grub.d/40_custom并添加:

menuentry 'Windows 10' {
    search --fs-uuid --no-floppy --set=root CC66-4B02
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

要找到--set = root行的UUID(在示例中为CC66-4B02),请使用sudo fdisk -l标识EFI分区,然后使用sudo blkid / dev / sda1(或其他任何方法)查找EFI分区的UUID 。请注意,这不是Windows分区,而是您需要的EFI分区。保存编辑后,运行sudo update-grub生成/boot/grub/menu.cfg文件,然后重新进行测试。


我猜sudo / dev / sda1命令应该是sudo blkid / dev / sda1
makapuf

@makapuf-绝对正确,谢谢。已更正。
peterthevicar '18

我已经按照该确切的教程进行操作,并且在尝试引导该条目时出现“错误:找不到分区”。挂载分区后,该分区上似乎不存在“ EFI / Microsoft / Boot / bootmgfw.efi”。
Xerus

8

在Windows上使用此应用程序EasyBCD http://neosmart.net/EasyBCD/下载免费版本并安装它。

当您打开它时,您将看到Windows 8和Windows 10的一项。

删除Windows 8条目,一切都会顺利进行。

完成上述步骤后,请更新至Ubuntu,

通过按ctrl+ alt+ 打开终端T

然后将过去的命令依次复制到该命令中,

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

然后,您将安装一个称为引导修复的工具。

从破折号打开启动修复,您会得到此窗口

在此处输入图片说明

选择建议的维修并按照步骤进行。

请注意,使用引导修复程序时必须连接到Internet。


1
@Hitechcomputergeek如果您需要更多帮助,请告诉我,我将引导至Windows,并为您做一些屏幕截图。
RonnieDroid

这会将Windows 10添加到GRUB吗?(让我猜:不是)我希望能够从GRUB访问所有三个OS,但这只能解决部分问题。
Hitechcomputergeek

我更新了问题,询问如何将Windows 10添加到GRUB OS列表中。我支持您的答案,因为它可以解决部分问题,但是由于我仍然需要将Windows 10添加到GRUB,因此我不接受答案。
Hitechcomputergeek

2
另外,我注意到您说要从破折号中打开Boot Repair,但是该行sudo apt-get install -y boot-repair && boot-repair已经打开了它。
Hitechcomputergeek

1
您也可以在“ ubuntu的测试模式(实时cd模式)” iso中使用此工具,可以在连接互联网或妻子后安装,运行和使用它。
Alamjit Singh'3

4

据我了解您的问题,您在一个或多个硬盘驱动器上有两个不同的Windows安装,并且您不希望Windows加载程序妨碍您或管理这两个Windows安装。我记得在旧式安装程序中有可能直接从Grub引导Windows内核(我在这里可能是错误的),但是我无法在UEFI设置中执行此操作。可以从Grub单独调用的具有两个独立的Windows Bootloader配置应该非常接近您要寻找的配置。

它装有Windows 8.1。

我将假定这是具有UEFI功能的计算机。

  1. 请检查计算机是否确实具有UEFI功能(如果没有,我将删除答案),并熟悉BIOS和UEFI之间的区别(不同的启动模式,efibootmgr,不同的分区表,EFI系统分区(ESP),EFI加载程序) …)。
  2. 然后,检查所有操作系统是否均已以UEFI模式安装,并检查您是否具有GPT分区表。您可以使用Windows' dism来将分区备份和还原到新的分区表布局,并使用最新Windows安装介质中的命令提示符来重新安装引导加载程序,有关更多详细信息,请参见下一步。
    • 由于建议您尝试使用其他不能解决问题的工具,因此必须将这些更改恢复为原始状态,否则这将变得越来越混乱。对于那个很抱歉。:(
  3. 您可以从如何通过GRUB在UEFI模式下从旧版MBR分区引导Windows 8中获得我的答案
    • 此答案确实bcdboot在Grub将其调用的其他位置中安装了独立的Windows启动加载程序配置。为了方便起见,我选择了Windows根分区。您将需要为每个 Windows安装执行此操作,以便每个Windows安装都有其自己的并且只能自行引导(从其他条目中清除各个Windows引导菜单)。
    • 请记住,您需要为要启动的每个Windows安装创建一个单独的条目,/etc/grub.d/40_custom并遵循有关UUID,分区和分区表的说明和解释。
    • 可能禁用所有检测到不同操作系统的半智能功能,例如Grub(GRUB_DISABLE_OS_PROBER)中的OS-prober 或对Windows的启动问题或启动修复进行故障排除(或在启动后进行手动清理)。

注意:您的要求是能够使用Grub管理所有操作系统,但是对于UEFI,传统的“双重引导”一词几乎成了错误的名词。UEFI允许ESP上的多个引导程序共存,您可以选择引导哪个引导程序(如果它们已在UEFI固件中注册,并且制造商的固件没有超出仅启动Windows的规范范围)。可悲的是,只有极少数的人可以考虑在一台计算机上安装多个(独立)版本的Windows,Linux或一个Ubuntu版本(或用于多台计算机并在每台计算机上引导同一OS版本的不同安装的硬盘驱动器)。多数方法已经可以实现,但是Windows和Ubuntu(Fedora,...)中的机制显然选择覆盖它们命名空间中的内容,但前提是错误的假设是只能存在一个。

(我确实在台计算机上启动Windows8 / 10,Ubuntu,Ubuntu LTS和Fedora,并根据不同的要求进行了几次UEFI引导。)


1
我不使用Windows。但是,有没有人尝试将/ EFI / Windows复制到/ EFI / Windows10和/或/ EFI / Windows8并将每个BCD编辑为仅适用于该版本?然后在UEFI中为每个创建整体。如果从UEFI可以正常工作,则grub可以直接链接到每个。
oldfred 2015年

@oldfred我想在下半部分指出这一点,甚至可能有一个参数bcdboot可以指定另一个目标目录,但是我不确定。仅从一个ESP链式加载其他EFI二进制文件就可以大大简化40_custom并使其不易出错,您是正确的。我认为过分关注多硬盘驱动器方案(在这种情况下,我认为您仍然应该能够告诉bcdboot从hdd1上的ESP引导hdd2上的Windows)。m(
LiveWireBT

该计算机具有UEFI功能,但是老实说,我不知道wtf现在已经可以使用这些分区了。学校安装了自定义Windows 8映像,尽管它使用的是UEFI和安全启动(我相信BIOS已配置为同时允许UEFI和旧启动;我记得禁用安全启动),但硬盘本身使用MBR。在这里,有一个屏幕截图:imgur.com/1vDS4jf(是的,我打算很快调整一堆分区的大小。)而且,Ubuntu本身(来自grepping dmesg)似乎没有以EFI模式启动,但是我不知道GRUB本身是否可以
Hitechcomputergeek 2015年

@Hitechcomputergeek屏幕快照显示了具有扩展分区但没有EFI分区的msdos / MBR分区表。如前所述,您应该具有GPT,并且可以dism用于Windows分区。
LiveWireBT

以UEFI身份启动,然后以非UEFI身份启动其他操作系统。UEFI令人困惑。编辑:GRUB没有作为UEFI启动。我不知道原始Windows会发生什么。实际上,考虑一下,我想可能不是一开始就是UEFI。我以为是因为Windows 8处于休眠状态,所以进入BIOS基本上是不可能的,除非先启动它,然后按“ Restart”,然后再尝试进入BIOS。自从安装Ubuntu(和GRUB)以来,我根本不需要再次执行此操作。
Hitechcomputergeek

2

只需登录到您的Ubuntu OS,打开一个终端即可:

sudo update-grub

重启

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.