我应该如何更改GRUB启动顺序?

我在一台共享机器上安装了Windows 7和Ubuntu。因为很多非开发人员使用Windows,我想改变启动顺序,以便让他们更容易使用。

目前的启动顺序如下:

  • Ubuntu 11.10内核通用*86
  • Ubuntu 11.10内核通用*86(安全启动)
  • 内存测试
  • 内存测试
  • Windows 7位于/dev/sda6

如何更改默认顺序,使Windows 7排在列表的首位?

  • Windows 7位于/dev/sda6
  • Ubuntu 11.10内核通用*86
  • Ubuntu 11.10内核通用*86(安全启动)
  • 内存测试
  • 内存测试

5类似的问答:http://askubuntu.com/questions/52963/how-do-i-set-windows-to-boot-as-the-default-in-the-boot-loader/52990#52990 - fossfreedom
更改grub文件后,你执行了'sudo update-grub'吗? - Tinellus
是的,我想我可能忘记做那件事了,谢谢!我会尽力更新结果。 - jeffery_the_wind
在Kubuntu 14.04中,运行sudo apt-get install kde-config-grub2命令来安装kde-config-grub2。然后在系统配置中,转到启动和关机选项。 - n611x007
8个回答

你可以使用一个易于使用的图形用户界面应用程序Grub Customizer来让你的生活变得更加轻松。正如其名所示,你不仅可以使用它重新排列GRUB菜单项,还可以做更多其他操作。在18.04及更早版本中,你可以从PPA安装它,在20.04及更新版本中,你可以从官方软件仓库中安装。
在18.04及更早版本中,添加以下PPA(在20.04及更新版本上可以跳过此命令):
sudo add-apt-repository ppa:danielrichter2007/grub-customizer

然后运行:
sudo apt-get update
sudo apt-get install grub-customizer

(另请参阅此Ask Ubuntu问题:https://askubuntu.com/questions/35629.
有一篇How-To Geek的文章介绍了这个问题,标题是如何轻松配置Linux GRUB 2引导菜单。如果你感兴趣的话可以看一下。此外,在Ubuntu论坛上也有一个已解决的帖子,标题是在GRUB 2中更改启动顺序,提到了这个工具。
以下是一些屏幕截图:

GRUB Customizer

GRUB Customizer - Settings - General

GRUB Customizer - Settings - Advanced


一些故障排除:

Grub Customizer 设置可能仅在最新 Linux/Ubuntu 安装中起作用,即安装 Grub 的那个系统。

例如,如果某人安装了两个操作系统(Windows 和 Ubuntu),然后安装了第三个操作系统(Manjaro 等),并尝试按照上述答案进行操作,则在第二个操作系统(如上所述的 Ubuntu)中进行的 Grub Customizer 更改将无法生效。该程序必须在第三个操作系统中安装,因为似乎 Grub Customizer 只能编辑自身所安装的系统创建的 Grub 文件。

决定 Grub 启动菜单的文件在大多数情况下与安装在计算机上的最新系统一起提供,因此必须从 Linux 系统中安装和使用 Grub Customizer。


非常感谢!回答得很好!我也很感激提供的截图! - chrisjlee
4非常欢迎 :) 这些截图来自上面链接的博文 :P - Nitin Venkatesh
3这在最新的Ubuntu上不起作用。我们能在这里得到更新的帖子吗? - A T
@AT 它到底是怎么不工作的?出现了什么错误信息?PPA是为精确系列准备的... - Jjed
我使用的是12.10版本。 - A T
12我认为你的回答很好也很有帮助,所以请不要误解我的意思。虽然GUI工具很方便易用,但它们隐藏了一些事实。下面Marve的回答讨论了正在使用的文件以及如何手动更新它们,提供了关于Grub如何工作的见解。当GUI失败时,对于某些人来说,至少要深入了解其基础知识——它们并不那么难,而手动操作可能在长期内更容易。 - barrypicker
1我也遇到了使用这个工具的问题。它似乎能正确更新/etc/default/grub,但之后却显示核心转储并中止。 - Mauricio Gracia Gutierrez
如果你和我一样找不到 /etc/default/grub(或者无法更新保存的更改),可以尝试修改 /etc/grub.d/00_header 中的 GRUB_DEFAULT 值(如果有的话),然后进行更新。这对我起作用了。 - Fuzzy Analysis
这些截图似乎与最新的Grub Customizer或Ubuntu版本的指令无关。 - matanster
1这需要一个与当前grub菜单的双层级相关的更新。 - Hannu
我安装了这个软件,但我的Win10安装在Grub-Customizer中没有显示为选项。然后,在重启电脑后,Windows 10不再出现在引导程序中。所以...现在我根本无法进入Windows了。谢谢你的建议... - matthew_360
在我看来,另一个非常重要的方面是:安装这个工具很容易。但是卸载需要手动操作;而且由于涉及到配置的核心元素...并不是那么容易。我认为你应该在回答中加入这些信息。 - GhostCat
2Ubuntu 20.04在其软件仓库中已经包含了'grub-customizer'软件包,因此无需添加PPA! - koni_raid
Ubuntu 20连在“Ubuntu软件”里都有它! - Santropedro
现在Debian软件仓库中已经有了这个grub-customizer软件包。 - EsmaeelE
2请不要使用GRUB CUSTOMIZER。它显然存在着许多错误和问题,无法卸载或还原,并且彻底破坏了我的系统。请不要推荐GRUB CUSTOMIZER。 - B T
1@barrypicker 在引用另一个答案时,请提供链接而不是提及用户名。用户名可能会随时间改变(在这种情况下,似乎已经发生了变化)。因此,我们现在无法知道您所指的是哪个答案。 - devklick

你也可以在命令行中更改grub默认启动项,而无需安装任何额外的工具。这不会改变列表中的顺序,但它将允许默认情况下启动不同的操作系统,这似乎是你想要的。
首先,备份/etc/default/grub文件。以防出现问题,你可以轻松恢复到已知的好的副本:
sudo cp /etc/default/grub /etc/default/grub.bak

然后使用vim或您选择的文本编辑器来编辑文件:
sudo vim /etc/default/grub

找到包含的那一行
GRUB_DEFAULT=0

并将其设置为
GRUB_DEFAULT=x

其中x是您想要默认引导的GRUB菜单项的索引。请注意,菜单项是从零开始计数的。这意味着列表中的第一项为0,而第六项实际上是5。因此,要引导到列表中的第六项,该行应写为:

GRUB_DEFAULT=5

如果您忘记了项目的顺序,请查看/boot/grub/grub.cfg。每个菜单项由一行类型指定:

menuentry 'Ubuntu' [options] {

您还可以通过名称而不是索引来选择默认值,例如:
GRUB_DEFAULT='Ubuntu'

如果在/boot/grub/grub.cfg文件中有一行menuentry 'Ubuntu'。这可能是一个更好的方法,因为它不依赖于条目的顺序,而这些顺序可能会改变。
要在"Previous Linux Versions"子菜单中使用内核,请使用:
GRUB_DEFAULT="Advanced options for Ubuntu>x"

(确保包含引号)其中x是子菜单上旧内核的索引,或者是内核在/boot/grub/grub.cfg中显示的名称。例如,
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-45-generic"

然后构建更新的 grub 菜单:
sudo update-grub

8我最后一次查看时, grub2 会动态生成很多条目,以至于很难弄清楚要为哪个条目使用什么编号。 - Joe
76使用索引可能会很混乱 - 操作系统列表在更新后可能会发生变化。但是您可以查看 /boot/grub/grub.cfg 文件,并搜索所需默认操作系统的 名称 。然后使用带引号的名称代替索引。例如:GRUB_DEFAULT="Microsoft Windows XP Professional (on /dev/sda1)" 代替 GRUB_DEFAULT=7 - geekQ
3需要更新与当前grub菜单的双层级相关的内容。 - Hannu
10使用当前版本的Ubuntu 16.04,如果您想选择特定内核进行引导,您需要添加到“高级选项的Ubuntu”子菜单中,如下所示: GRUB_DEFAULT='Advanced options for Ubuntu > Ubuntu, with Linux 4.4.0-34-generic' - Geoff Williams
我设置了GRUB_DEFAULT=6并更新了grub,但没有起作用。 - alhelal
2@BandaMuhammadAlHelal 那将尝试启动您列表上的第7个项目 - 这是您想要的吗?如果您想要列表上的第6个项目,请使用 GRUB_DEFAULT=5 - Nick
为什么在双系统中无法同时运行Ubuntu(16.04)和Ubuntu(17.04)?我尝试登录到16.04并进行修改,但它根本没有任何作用。在单独的分区安装Ubuntu 17.04后,引导顺序发生了变化。 - Khurshid Alam
@Nick,我知道列表是基于0的索引。但在我的电脑上不起作用。 - alhelal
3运行grep -e ^menuentry /boot/grub/grub.cfg命令,快速查看您的grub菜单项。这样可以更容易地计数(从0开始),以确定您想要设置为默认的菜单项。 - MathKid
2显示从0开始的带编号的menuentry行:grep 'menuentry ' /boot/grub/grub.cfg | nl -v0 - Tom Hale
正如Geoff Williams所说,要注意子菜单:https://help.ubuntu.com/community/Grub2/Submenus - lengxuehx
@KhurshidAlam通常,最后安装的操作系统会接管引导加载程序。因此,您需要在其他Ubuntu中进行配置。 - xeruf
GRUB_DEFAULT="Ubuntu高级选项>Ubuntu,使用Linux 5.4.0-26-generic"。这在Ubuntu 20.04 LTS x86_64服务器版上非常顺利运行! - alphaGeek

tombuntu网站(由Tom撰写的文章):

GRUB can be configured using the /etc/default/grub file. Before you make any changes to it, it may be a good idea to back it up by creating a copy:

sudo cp /etc/default/grub /etc/default/grub.bak

You can restore the copying the backup over the original:

sudo cp /etc/default/grub.bak /etc/default/grub

Open the file using the text editor with root privileges:

gksu gedit /etc/default/grub

The line GRUB_DEFAULT=0 means that GRUB will select the first menu item to boot. Change this to GRUB_DEFAULT=saved. This change will make it easier to change the default item later.

Save and close the file. Run this command to apply your changes to GRUB’s configuration:

sudo update-grub

The configuration change we made allows the grub-set-default and grub-reboot commands to be used at any time. These allow you to change the default boot item permanently or only for the next boot, respectively.

Run grub-set-default or grub-reboot (with sudo) with the number of the menu item to boot (the first item is 0). This command will change the default to the second item:

sudo grub-set-default 1

18这个答案几乎是从http://tombuntu.com/index.php/2011/09/25/how-to-change-boot-order-in-ubuntu-11-04/直接提取的。请给予应有的荣誉。 - James McMahon
1这个答案似乎没有改变启动项的顺序。 - Sparhawk
我正在使用Linux Mint Debian Edition。我没有/etc/default/grub文件,但是我发现要修改的GRUB_DEFAULT值实际上在/etc/grub.d/00_header中。在00_header中将GRUB_DEFAULT修改为我想要的启动项名称后,我只需运行"sudo update-grub",然后就成功了。 - Fuzzy Analysis
我在http://tipsonubuntu.com/2016/07/20/grub2-boot-order-ubuntu-16-04/上看到了相同的命令。我意识到这些命令只有在从系统中以引导顺序0首先发出时才能起作用。 - Sun Bear

我知道这是一个很古老的问题,而且我没有足够的声望来评论它,所以对于那些仍然希望不使用Grub-Customizer的人来说,这个方法应该是适用的,因为它已经赢得了名声。
这种方法假设你有一个双启动的系统,其中一个安装了Linux,另一个安装了Windows。由于在/etc/grub.d中的顺序决定了调用的顺序,你可以先调用os-prober,然后再添加剩余的条目。
cd /etc/grub.d
mv 30_os-prober 05_os-prober
sudo update-grub

这个功能非常好,把Windows放在首位。
我找不到来源,但如果我再次找到它,我会提供的。

这绝对是最简单的解决方案,只要你只有一个被os-prober发现的操作系统。事实上,在Ubuntu 20.04上,/etc/grub.d目录下的README文件明确告诉你要做的就是这样。 - R Schultz

第一
sudo add-apt-repository ppa:danielrichter2007/grub-customizer

第二
sudo apt-get update

第三
sudo apt-get install grub-customizer

打开Grub Customizer 你可以编辑你的grub 你甚至可以更改你的grub壁纸 这是一个很棒的工具
使用该工具或编辑grub.cfg文件都存在风险

开始之前

请注意,这将对您的所有GRUB文件造成严重混乱。请注意这个令人讨厌的问题! 这是您在开始之前需要知道的全部内容。

启动时,进入Ubuntu。当Ubuntu启动时,进入终端。输入以下命令:

gksudo gedit /etc/default/grub

当打开该命令时,请将GRUB_DEFAULT=0更改为GRUB_DEFAULT=saved,然后输入。使用命令更新GRUB

sudo update-grub

最后,使用sudo grub-set-default NUMBER来设置默认操作系统。NUMBER是您想要设置为默认的操作系统的编号。

或者

使用以下命令安装GRUB-customizer:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer

sudo apt-get update

sudo apt-get install grub-customizer

引用自:https://tipsonubuntu.com/2016/07/20/grub2-boot-order-ubuntu-16-04/ 这可能会提供更详细的信息,希望能对您有所帮助。

1这应该附带警告,它会损坏你的 grub 文件并且在没有工具的情况下难以管理(我说的是基于经验,因为这是我的当前情况)。 - Jared
1好的观点。对此很抱歉! - Logan

我尝试了以下方法,并取得了良好的结果。
打开一个终端窗口(Ctrl+Alt+T),
输入sudo gksu nautilus并按Enter键。 输入您的用户密码。
导航到文件/boot/grub/grub.cfg。将该文件复制并粘贴到同一目录下,以备份为目的。然后双击grub.cfg以在文本编辑器中打开该文件。
在文件中,您会找到一行(set default="0")。将0修改为您想要加载的Grub行号。我的是第六行,所以我使用了5,因为第一行被认为是0。保存文件。重新启动计算机,如果选择了正确的行号,它将在Grub加载时突出显示。
祝您好运

12正如您在文件开头所看到的,它说您不应该这样做。而是要编辑 /etc/default/grub 然后运行 update-grub - sazary
9我也不建议使用gksu nautilus。从那里很容易在你的系统中引发问题。 - sylvainulg
请查看这篇帖子:http://www.psychocats.net/ubuntu/bootmenu - tqjustc
1不知为何,当在谷歌搜索“grub change boot order”时,这个答案被显示为“自动回答”。 - lepe
@lepe,别担心,对我来说默认是http://www.linuxandubuntu.com/home/how-to-change-boot-order-set-default-boot-os-in-ubuntu-14-10-15-04-linux-mint-or-other-derivatives - vladkras

打开一个终端窗口(Ctrl+Alt+T),或者按下Alt+F2
输入gksu nautilus并按下Enter
这将以root权限打开文件浏览器Nautilus,可以更改由root拥有的文件。
导航到文件/boot/grub/grub.cfg,双击以在文本编辑器中打开该文件。
剪切、移动和粘贴该文件中属于不同操作系统的部分。在执行此操作时必须非常小心,因为如果操作错误,您将无法再次启动。Windows引导始终可以使用Windows安装光盘上的工具(FIXMBR)进行修复,该工具会用典型的Windows-MBR覆盖GRUB-MBR。
我已经在Ubuntu 9.04至12.04上进行了测试,每次都运行良好。
但是我只尝试将Windows引导部分移动到列表的顶部,使其成为默认选项。
如果我记得没错的话,文件中每个启动菜单部分都以begin开头...并以end结尾。而且跨越多行文本。
那个文件中的文本变得有点复杂了,在最新的Ubuntu版本中与之前的版本不太一样。所以动动脑筋,避免犯错误。

4你难道不需要在某个时候运行 sudo update-grub 吗? - Eliah Kagan
5每次安装/更新软件包时,都会覆盖/boot/grub/grub.cfg文件,从而触发Grub的更新,实际上调用了update-grub命令。这将生成一个新的grub.cfg文件。因此,为了确保持久性,需要在/etc目录中的文件中配置Grub,正如其他答案所解释的那样。 - gertvdijk
我不明白的是Nautilus在这方面到底有什么作用?它与启动顺序的更改有什么关系? - Logan