如何更改 GRUB 引导顺序?

chr*_*lee 388 boot grub2

我在共享机器上安装了 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(安全启动)
  • 记忆测试
  • 记忆测试

Nit*_*esh 338

您可以使用名为Grub Customizer的易于使用的 GUI 应用程序让您的生活更轻松。顾名思义,您可以做的不仅仅是用它重新排序 GRUB 菜单项。

您可以通过以下方式安装它:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
Run Code Online (Sandbox Code Playgroud)

(请参阅询问 Ubuntu 问题PPA 是否可以安全地添加到我的系统中,以及需要注意哪些“危险信号”?。)

有一篇关于它的How-To Geek文章,How to Configure the Linux GRUB 2 Boot Menu the Easy Way。如果您有兴趣,请查看它。此外,Ubuntu 论坛上有一个已解决的线程,在 GRUB 2更改引导顺序,其中提到了此工具。

以下是一些截图:

屏幕_1

屏幕_2

屏幕_3


一些故障排除:

Grub 定制器设置可能只能在最新的 Linux/Ubuntu 安装中工作,也就是安装了 Grub 的那个。

For example, if somebody has two OS-es installed (Windows and Ubuntu), and then installs a third OS (Manjaro, etc) and then tries to follow the above answer, Grub Customizer changes will not work when made from the second OS (Ubuntu, in the example). The program has to be installed in the thirs OS, as it seems that Grub Customizer can only edit the Grub files created by the installation of the system on which itself is installed.

The files that determine the Grub boot menu come in most cases with the latest system installed on a machine, so Grub Customizer has to be installed and used from that Linux system.

  • 我认为你的回答很好而且很有帮助,所以请不要误会我的意思。虽然 GUI 工具简洁易用,但它们隐藏了事实。下面 Marve 的回答讨论了正在使用的文件以及如何手动更新它们,从而深入了解 Grub 的工作原理。当 GUI 出现故障时,对于某些人来说,至少可以看一看其基础 - 毕竟它们并不那么困难,从长远来看,手动操作可能会更容易。 (11认同)
  • 最受欢迎:) 截图来自上面链接的博文:P (4认同)
  • 这不适用于最新的 Ubuntu。我们可以在这里得到更新的帖子吗? (2认同)
  • Ubuntu 20.04 在其存储库中有软件包:“grub-customizer”,因此无需添加 PPA! (2认同)
  • 不要使用 GRUB 自定义程序。它显然充满了错误和问题,无法卸载和/或恢复,并且完全搞砸了我的系统。请不要推荐 GRUB CUSTOMIZER。 (2认同)

dch*_*les 320

您还可以从命令行更改 grub 默认启动项,而无需安装任何其他工具。这不会改变列表中的顺序,但它会允许默认情况下启动不同的操作系统,这听起来像是您可能想要的。

首先,制作一个备份副本/etc/default/grub。如果出现问题,您可以轻松恢复到已知良好的副本:

sudo cp /etc/default/grub /etc/default/grub.bak
Run Code Online (Sandbox Code Playgroud)

然后使用vim或您选择的文本编辑器编辑文件:

sudo vim /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

找到包含的行

GRUB_DEFAULT=0
Run Code Online (Sandbox Code Playgroud)

并将其设置为

GRUB_DEFAULT=x
Run Code Online (Sandbox Code Playgroud)

x默认情况下,您希望引导到的 grub 菜单项的索引在哪里。请注意,菜单项是零索引的。这意味着列表中的第一项是0,而第六项实际上是5。因此,要引导至列表中的第六项,该行将显示为:

GRUB_DEFAULT=5
Run Code Online (Sandbox Code Playgroud)

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

menuentry 'Ubuntu' [options] {
Run Code Online (Sandbox Code Playgroud)

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

GRUB_DEFAULT='Ubuntu'
Run Code Online (Sandbox Code Playgroud)

如果有一条menuentry 'Ubuntu'线/boot/grub/grub.cfg。这可能是一种更好的方法,因为它不依赖于可能会更改的条目顺序。

要在“以前的 Linux 版本”子菜单中使用内核,请使用:

GRUB_DEFAULT="Advanced options for Ubuntu>x"
Run Code Online (Sandbox Code Playgroud)

(确保包括引号),x子菜单上旧内核的索引在哪里,或者内核的名称出现在/boot/grub/grub.cfg. 例如,

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-45-generic"
Run Code Online (Sandbox Code Playgroud)

然后构建更新的 grub 菜单:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

  • 使用索引可能会非常混乱 - 更新后操作系统列表可能会更改。但是您可以查看 /boot/grub/grub.cfg 并搜索所需默认操作系统的 *name*。然后使用带引号的名称而不是索引。示例:`GRUB_DEFAULT="Microsoft Windows XP Professional (on /dev/sda1)"` 而不是 `GRUB_DEFAULT=7` (66认同)
  • 对于当前版本的 Ubuntu 16.04,如果要选择特定的内核进行引导,则需要在 `Advanced options for Ubuntu` 子菜单中添加,如下所示:`GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu,使用Linux 4.4.0-34-generic'` (9认同)
  • 最后我看到 grub2 会动态生成如此多的条目,以至于很难弄清楚该条目使用什么数字。 (7认同)
  • 运行 grep -e ^menuentry /boot/grub/grub.cfg 可以快速查看 grub 菜单项。这样可以更轻松地计算(从 0 开始)到您想要默认的菜单项。 (4认同)
  • 这需要与当前 grub 菜单的双重级别相关的更新。 (2认同)
  • @BandaMuhammadAlHelal 这将尝试启动您列表中的第七项 - 这是您想要的吗?如果您想要列表中的第 6 项,请使用“GRUB_DEFAULT=5”。 (2认同)
  • 显示编号的 `menuentry` 行,从 `0` 开始: `grep 'menuentry ' /boot/grub/grub.cfg | nl-v0` (2认同)

sil*_*nTK 42

来自tombuntu 网站Tom 的文章):

可以使用该/etc/default/grub文件配置 GRUB 。在对其进行任何更改之前,最好通过创建副本来备份它:

sudo cp /etc/default/grub /etc/default/grub.bak
Run Code Online (Sandbox Code Playgroud)

您可以通过原始备份恢复复制备份:

sudo cp /etc/default/grub.bak /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

使用具有 root 权限的文本编辑器打开文件:

gksu gedit /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

该行GRUB_DEFAULT=0表示 GRUB 将选择要引导的第一个菜单项。将此更改为GRUB_DEFAULT=saved. 此更改将使以后更容易更改默认项。

保存并关闭文件。运行此命令将更改应用到 GRUB 的配置:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

我们所做的配置更改允许随时使用 grub-set-default 和 grub-reboot 命令。这些允许您分别永久更改默认引导项或仅在下次引导时更改默认引导项。

使用要引导的菜单项的编号运行grub-set-defaultgrub-reboot(使用sudo)(第一项为 0)。此命令会将默认值更改为第二项:

sudo grub-set-default 1
Run Code Online (Sandbox Code Playgroud)

  • 这个答案几乎是逐字从 http://tombuntu.com/index.php/2011/09/25/how-to-change-boot-order-in-ubuntu-11-04/ 获取的。请在信用到期时给予信用。 (17认同)

Par*_*hic 10

我知道这是一个非常古老的问题,而且我没有足够的声誉来评论这个问题,所以对于任何仍然希望在没有 Grub-Customizer 的情况下这样做的人,因为它的臭名昭著:

此方法假设您有一个 Linux 和一个 Windows 安装的双引导。由于 order in/etc/grub.d指定了它们的调用顺序,因此您可以简单地os-prober先调用,然后添加其余条目。

cd /etc/grub.d
mv 30_os-prober 05_os-prober
sudo update-grub
Run Code Online (Sandbox Code Playgroud)

这非常有效,并将 Windows 置于列表的首位。

我找不到来源,但如果我再次遇到它,我会提供它。