如何让 grub2 仅在下次启动时启动不同的选项?

cwd*_*cwd 24 boot grub2 dual-boot windows windows-7

我正在设置双引导无头 Linux/Windows 机器。我主要希望机器始终启动到 Ubuntu,除非偶尔需要在 Windows 中测试某些内容。

我已经安装了 Windows 和 Ubuntu,目前它每次都启动到 Ubuntu。我希望能够告诉它仅在下次启动时启动到 Windows,然后当我从 Windows 重新启动时让系统返回到启动 Ubuntu。

我找到了Grub Legacy - 第 4.3.1 节 - 仅启动一次,但我使用的是 Ubuntu 14.04 服务器,它具有较新版本的 grub。从我读到的内容来看,当我想启动到 Windows 时,我需要对/etc/default/grub和使用进行一些更改sudo grub-set-default

我认为这些变化始于将其添加到/etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false
Run Code Online (Sandbox Code Playgroud)

任何时候对/etc/default/grub我进行更改,我都知道我需要运行
sudo update-grub,这会导致:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false
Run Code Online (Sandbox Code Playgroud)

由于 Windows 是该列表中的第 7 个选项,我相信我会运行sudo grub-set-default 6(基于 0 的计数)-这是正确的,是否有不同的方法可以在系统启动后获取编号的启动选项列表?

另外,这些行是否/etc/default/grub足以实现这种行为,还是我需要添加额外的配置?

pbh*_*bhj 30

您需要确保您GRUB_DEFAULT=saved的 grub 配置中有(这是自动生成的,您可以通过编辑 /etc/default/grub 来更改它的这一部分)。sudo update-grub使更改处于活动状态,然后使用sudo grub-reboot $1.

grep -i "menuentry '" /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

将为您提供您可以以 1 美元剪切粘贴的菜单项。或者,正如您所注意到的,这些选项是零索引的,因此可以通过将 (n-1) 传递给 grub-reboot 来获得第 n 个菜单项。

见例如

我没有测试过,因为我没有安装“Windows 7”。

  • 显示条目编号的命令:`grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g"|nl -v 0` (3认同)
  • 根据https://askubuntu.com/questions/838704/grub-reboot-to-specific-kernel,`/boot/grub/grub.cfg`中`submenu`下的`menuentry`s必须传递给`grub -reboot` 为`SUBMENU>MENUENTRY`。所以,例如,使用一些类似于@rubo77 的 bash-fu,我想启动 `menuentry` 7,但是这个条目在一个 `submenu` 下,它是顶级菜单中的第二个条目,所以我需要通过`'1>6'` 代替(单引号以避免 shell 解释 >)。 (3认同)
  • 警告:如果您从 BTRFS 分区启动,这将不起作用。Grub 需要能够在引导 Windows 时写入 grubenv,它不能写入 BTRFS。该文件通常存储在 /boot/grub 中,可以使用 grub-editenv 查看。我通过在 / 中安装 BTRFS,在 /boot 中安装 EXT4 分区,然后在 /boot/efi 中安装 EFI 分区来修复我的系统。 (3认同)
  • 注意:目前尚不清楚,在启动过程中您只需要 **行号** 减去 1 可见的 grub 选项,因此如果 Windows 是第三行,则只需使用 `sudo grub-reboot 2; 重新启动` (2认同)