如何将Windows启动管理器设置为默认启动管理器?

我有一个Windows 7/11.10双引导系统,使用Grub 2作为默认的引导程序。然而,我想将Windows引导程序设置为默认(Grub的“dos”界面让我妹妹害怕得要命),这样当我启动电脑时会有以下引导选项: 1. Windows 7 2. Ubuntu

注意:如果能提供一个反向操作的过程,使Grub再次成为默认的引导程序,将会很感激。


6别错过Burg:http://goo.gl/w0msb 你姐姐可能会喜欢它 :-) - Ivan
我不知道MBR是否可以修改以显示Linux,但是如果你想要一个吸引人且非DOS样式的Grub控制台替代品,你可以尝试Burg。另外,Burg的各种主题截图也可供参考。 - Nitin Venkatesh
就我个人而言,我有一个非常相关的问题:如何使Windows成为标准Grub菜单中的默认选项。 - Ivan
Ivan,请使用存储库中的启动管理器。 - mikewhatever
1@mikewhatever:上次我检查启动管理器时,它只适用于GRUB,不建议在GRUB2中使用。但我不确定现在是否仍然如此。Mysterio,你可以使用GRUB主题来使其看起来不那么像古老的石头。 - Lekensteyn
我确实听说过警察局,但是我太害怕去经历这个过程了。 - Mysterio
1可能是重复的问题:是否可以使用Windows引导程序启动Ubuntu? - fossfreedom
在Windows的恢复控制台中,有fixmbrfixboot命令。 - Anonymous
8个回答

从终端运行,编辑那个文件。
 sudo gedit /etc/default/grub 

找到那行并设置Windows号码(从0开始计算在Grub中的Windows行数)。在我的情况下,应该是这样。
GRUB_DEFAULT=2

然后保存文件并关闭 gedit。运行该命令以更新 grub:
sudo update-grub 

请你能具体一点吗?我是个新手。 - Mysterio
1好的,当我回到家里和我的Ubuntu电脑时。 - Extender
1谢谢您的回答。我想知道如果我使用您的答案,我只会在启动屏幕上看到两个选项:1. Windows 7 2. Ubuntu。这样,我只有在选择Ubuntu选项时才能看到Grub2。 - Mysterio
6这样做会让GRUB2将引导Windows作为默认操作系统。这不是Mysterio所问的问题。Mysterio问的是如何使Windows引导加载器在GRUB2之前首先加载,以便当在Windows引导加载器中选择Ubuntu选项时,GRUB2第一次加载。 - Eliah Kagan

有一个名为Easy BCD的Windows程序。在运行Windows时安装它,然后按照以下链接中的描述进行操作: 如何使用Easy BCD 尽管如此,我认为其他答案也是有效的,因为问题基本上是如何避免姐妹被Grub吓到选择Windows(如果需要的话)。

1为什么我们要一个基于Windows的“下载应用程序”的解决方案,而这个问题在Ubuntu内部可以很容易地解决呢? - david6
2首先,我们在这里是为了回答问题,而不是质疑问题。 - dago
我试过安装EasyBCD来修复损坏的grub2,但是它需要Vista/Win7才能安装。 - keepitsimpleengineer
Googlers: 首先,2019年的BcdEdit已经适用于Windows 10和(U)EFI。如果命令行足够好用,请查看bcdedit - Frank N

第一部分:
使Windows(任何版本)成为默认的Grub2菜单选项。
描述:这将设置Windows作为默认的启动选项,并且(无需用户操作)计算机将在启动时自动启动Windows。
步骤:
A. 列出当前的菜单项
sudo update-grub 

编辑设置文件
sudo gedit /etc/default/grub 

将启动默认设置为您的Windows启动分区(例如)。
GRUB_DEFAULT=”Windows 7 (loader) on /dev/sda1″

警告:仅仅设置'GRUB_DEFAULT=n',在内核更新后等情况下无法生效

(保存文件并关闭。)

C. 更新 grub 设置

sudo update-grub 

现在,启动时将自动默认为MS Windows。

第2部分:(可选项)

隐藏Grub2菜单,并使用默认菜单选项。

描述:这将同时隐藏启动菜单并缩短(通常为10秒的)超时时间。计算机将在启动时自动启动默认选项。

注意:用户只需按住Shift键(在启动时)即可再次看到Grub2菜单。

步骤:

D. 编辑设置文件

sudo gedit /etc/default/grub 

取消注释行'#GRUB_HIDDEN_TIMEOUT=0',使其看起来像这样:
GRUB_HIDDEN_TIMEOUT=0

(保存文件并关闭。)
E. 更新 grub 设置
sudo update-grub 

现在,在启动时,您将自动引导到默认菜单选项,除非您在启动时按住Shift键。然后grub2菜单将重新出现。
进一步的文档:

http://ubuntuforums.org/showthread.php?t=1195275


2就像其他 两个回答一样,这里说明了如何在GRUB2中将Windows设置为默认系统。但是Mysterio所问的是如何让Windows引导加载程序首先启动,以至于除非用户在Windows引导加载程序中选择Ubuntu,否则GRUB2根本不会运行。 - Eliah Kagan
这确实会让“Windows引导加载程序”首先出现,并隐藏Ubuntu Grub2菜单。我的解决方案避免使用基于Windows的解决方案(如果这是你所建议的)。 - david6
在这个解决方案中,GRUB2仍然首先加载。它不显示菜单,但仍然加载并将控制权交给Windows引导加载程序。这个解决方案完全阻止了Ubuntu的加载,除非将其单独添加到Windows引导加载程序中,这样就会变成一个“基于Windows的解决方案”,与dago解决方案只有在增加相当多的不必要复杂性的情况下才有所不同。 - Eliah Kagan
1不。只需按住[Shift]键,Grub2菜单就会出现。引用:“在启动过程中按住SHIFT键显示隐藏菜单(以前是GRUB遗留的ESC键)。”来自链接(上述)。 - david6
好观点;我不知道当我评论时是否有包含在你的回答中,但如果有的话,那么我为没有注意到而道歉!这仍然不是Mysterio所要求的("我想将Windows引导加载程序设置为默认引导加载程序...所以当我启动电脑时,我将有以下引导选项:1. Windows 7 2. Ubuntu"),但可能能满足他/她的需求。 - Eliah Kagan
你没有读懂问题。 - Jayo

Grub2可以被设置为默认启动任何系统,但要更改它们出现的顺序将会很困难。

也可以隐藏grub引导菜单(针对您的姐妹),只需按下shift键即可显示。我建议在此处谨慎。详情请参见此处

有两种方法可以使用编辑grub文件来设置默认启动。

这些方法在Ubuntu Communuity Documentation Grub2 page中有描述。

这两种方法是:

  • 启动上次启动的任何操作系统,“保存的方法”

    这是我使用的方法。它让我决定我要使用哪个系统,并允许我重新启动到该系统,当我正在更新时非常方便。

  • 默认启动特定的操作系统,这就是您确切的问题

首先,我们需要找出我们要启动的内容,打开终端(点击“Dash”,输入“终端”...),然后输入grep menuentry /boot/grub/grub.cfg
user@YourComputer:~$ grep menuentry /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 2.6.35-31-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-31-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-30-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-30-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {
menuentry "Windows NT/2000/XP (loader) (on /dev/sda1)" {
menuentry "Ubuntu, with Linux 2.6.32-34-generic (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-34-generic (recovery mode) (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-33-generic (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-33-generic (recovery mode) (on /dev/sdb1)" {
menuentry "Windows Vista (loader) (on /dev/sdc1)" {

从我的角度来看,你可以明白为什么我更喜欢“保存”方法。
现在你已经准备好编辑grub文件了...
注意:如果你更愿意使用像Gnome文本编辑器这样的图形界面编辑器,请参考末尾的注释。
在终端中输入sudo nano -B /etc/default/grub,如果需要,输入密码。
user@YourComputer:~$ sudo nano -B /etc/default/grub

然后nano编辑器将会打开,这样(对于我来说)...

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=saved
#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_DEFAULT="delayacct"
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
GRUB_GFXMODE=1280x800
GRUB_GFXPAYLOAD_LINUX=1280x800x8

# 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_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
GRUB_INIT_TUNE="480 440 1"

GRUB_SAVEDEFAULT=true
GRUB_BACKGROUND=/usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga

在我偏好的方式中,我对标准的 grub 文件进行了以下更改:
- 我将 GRUB_DEFAULT 的值更改为 "saved" ``` GRUB_DEFAULT=saved ```
- 并且我添加了这一行… ``` GRUB_SAVEDEFAULT=true ```
根据你的要求,你可以将 GRUB_DEFAULT 的值更改为你想要始终引导的 Windows 系统的名称。这个名称可以在之前的 `grep ...` 输出中找到。例如,如果我想始终引导我的 Windows XP,我将 GRUB_DEFAULT 设置为 "Windows NT/2000/XP (loader) (on /dev/sda1)",即双引号之间的内容。 ``` GRUB_DEFAULT="Windows NT/2000/XP (loader) (on /dev/sda1)" ```
你也可以将 GRUB_DEFAULT 设置为菜单项列表中的行号(从 0 开始),但是当 Ubuntu 的内核更新时,grub 会将新的内核添加到列表的顶部,所以你需要更改数字,因为 Windows 是菜单项列表中的最后一个。你可以在我的菜单项列表中看到这一点。

重要的最后一步

现在您需要运行update-grub命令来更新/boot/grub目录中系统生成的grub.cfg文件。

在计算机上输入sudo update-grub,如果需要,输入密码...

user@YourComputer:~$ sudo update-grub
Generating grub.cfg ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-2.6.35-31-generic
Found initrd image: /boot/initrd.img-2.6.35-31-generic
Found linux image: /boot/vmlinuz-2.6.35-30-generic
Found initrd image: /boot/initrd.img-2.6.35-30-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows NT/2000/XP (loader) on /dev/sda1
Found Ubuntu 10.04.3 LTS (10.04) on /dev/sdb1
Found Windows Vista (loader) on /dev/sdc1
done

关于nano的注意事项

nano在终端中使用非常简单。使用箭头键进行移动。输入你的添加内容,删除不需要的内容。

"-B"(或"--backup")选项会将之前的版本备份为当前文件名加上~后缀。在遇到可怕的误触效应时非常方便。

编辑完成后,按下Crtl-O可以保存你的修改,按下Enter。 关闭而不保存,按下Ctrl-X。 这些和其他选项都显示在终端屏幕底部,^表示Ctrl

^G Get Help    ^O WriteOut    ^R Read File   ^Y Prev Page   ^K Cut Text    ^C Cur Pos
^X Exit        ^J Justify     ^W Where Is    ^V Next Page   ^U UnCut Text  ^T To Spell

关于nano、sudoedit和其他编辑器的注释。
在Ubuntu社区中,有些人建议使用sudoedit而不是nano。我推荐使用nano(后续版本的Ubuntu默认sudoedit编辑器),而不是sudoedit,因为默认设置可以以不明显的方式被覆盖(除非你是管理员)。sudoedit更安全,因为它会自动保存已编辑文件的备份副本,但是nano的“-B”命令行选项也可以实现相同的功能。与vi或emacs等其他编辑器相比,nano更安全,因为它没有可怕的Shell逃逸功能。
如果你不喜欢使用nano编辑器,而更喜欢Gnome文本编辑器,那么在命令"sudo nano -B"的地方可以使用"gksu gedit"。对于大文件,我通常会这样做,而"/etc/default/grub"很容易被视为一个大文件。因此,你可以输入"gksu gedit /etc/default/grub"来替代"sudo nano -B /etc/default/grub"。请注意,Gnome文本编辑器不会自动备份文件!
关于我的grub文件的一些说明:
我根据个人需求对grub进行了一些修改,比如设置了月球发射的背景图片。如何进行这些修改已经在Ubuntu社区文档页面上的Grub2中进行了讨论,推荐参考。
祝你好运!

1你没有读问题。 - Jayo
1Jayo,我确实读了这个问题,但如果你查看一下http://askubuntu.com/questions/82928/how-to-make-windows-boot-first/82965#82965 ,你会看到“由于fossfreedom、Jorge Castro、Javier Rivera和Marco Ceppi的精确重复而关闭”,并建议将该问题的答案合并到这里⋯以及我的评论说它们不是完全重复的问题。去看看吧。 - keepitsimpleengineer

为什么没有人提到Clover EFI引导加载程序?我有5个操作系统要引导,总是选择我想要引导的Windows 10、macOS High Sierra、macOS Mojave、Linux、Ubuntu 19.04,最后但同样重要的是通过一个硬盘分布的Phoenix OS,也就是Android操作系统。
通过我的黑苹果,我甚至可以在不重启macOS的情况下通过虚拟化方式访问我的Windows 10硬盘上的所有数据,包括操作系统本身,所以我绝对会向你们推荐Clover。

最可靠的方法是使用微软在每张Windows光盘上都提供的Windows自带工具。
1. 从Windows光盘启动。 2. 在标题屏幕上,打开终端(通常按钮位于左下角)。 3. 执行命令bootrec /fixmbr
如果这个方法不起作用,请尝试使用bootrec /fixboot

如果你更喜欢使用BIOS来设置这个,重新启动你的电脑并进入BIOS(在我的情况下按DEL键)。
进入“引导选项”-->(此步骤可能会有所不同)“硬盘驱动器优先级”-->“第一优先级”-->“Windows引导加载程序”。
第二步可能会根据你安装Ubuntu/Windows的方式而有所不同。
关键是,如果Ubuntu被设置为较高的优先级(硬盘驱动器优先级或引导设备优先级),你应该将其替换为Windows引导加载程序。

使用 grub 来双启动 Windows 10 和 Ubuntu 的问题在于 Windows 更新会拒绝运行。如果你可以接受无法更新 Windows 10,那么 grub 是最好的引导程序。
如果不然,如果你的工作需要 Windows 更新(如 Windows Defender 等),那么 BCDEdit 是你的选择。