可以将 Grub 配置为记住您上次启动的操作系统吗?

Mat*_*hew 17 windows-7 grub multi-boot ubuntu-10.04

我的启动菜单中通常有 2-3 个操作系统:

  • Ubuntu 10.04
  • Windows 7的
  • [有时,第三种选择,例如 Ubuntu 10.04 Netbook]

如果我使用的操作系统不是默认选择(在本例中为 Windows 7),并且我重新启动,Grub 将启动到 Ubuntu 10.04。这不应该发生——当我在 Windows 7 中重新启动时,我想留在 Windows 7 中。有什么方法可以配置 Grub 以记住我的最后选择,并启动到那个?

或者,如果 Grub在我重新启动时(而不是在我第一次打开计算机时)执行此操作,那就更好了。我意识到这可能是不可能的,所以我会对简单的最后选择记忆感到满意。

qua*_*ote 20

在原始 Grub 中,您可以通过在/boot/grub/menu.lst中将默认关键字设置为“已保存”,然后在每个启动菜单项中使用savedefault关键字来完成此操作


更新
Grub2 有点复杂。它也在不断发展,所以即使 Ubuntu 9.10 和 10.04 都使用 Grub2,在如何打包和配置方面存在足够的差异,以使事情变得有趣。

以下是在两者中执行savedefault技巧的方法:

  • Ubuntu 10.04:
    9.10 方向是一个技巧;Lucid要简单得多。有关更多详细信息,请参阅Ubuntu 的帮助。您需要在/etc/default/grub 中进行两项更改:

    1. 将读取的行更改GRUB_DEFAULT=0GRUB_DEFAULT=saved

    2. 添加一行 GRUB_SAVEDEFAULT=true

    就是这样。其实也没那么糟吧?不要忘记运行sudo update-grub

  • Ubuntu 9.10:
    在 Ubuntu 论坛上有几个黑客可以让它工作;显然,savedefault关键字在 Grub v1.97 中有问题。 Ubuntu 论坛上的这篇文章提供了一种方法。 另一篇文章提出了一个稍微简单的方法:

    1. /etc/default/grub 中设置GRUB_DEFAULT=saved

    2. 将这两行放入/etc/grub.d/40_custom(靠近底部,在“exec tail”行之后):

      saved_entry=${chosen}
      save_env saved_entry
      
      Run Code Online (Sandbox Code Playgroud)

    我已经在 Ubuntu 9.10 中测试了这个方法并且它有效;下次启动时将自动突出显示最后选择的条目。结合超时,这将自动启动到您启动的最后一个操作系统。

并且不要忘记运行sudo update-grub。完成更改后。这很重要,而且很容易忘记……


Grub 无法区分重新启动冷启动,因此 Grub 无法在重新启动时自行执行此操作。但是,如果您启动到 Linux,则可以使用sudo grub-set-default N(其中 N 是启动菜单项的编号,从 0 开始)设置在下次启动时选择的项 N(而不是保存的任何项)。

从理论上讲,您可以将一些与关闭例程(可能是Upstart 脚本)挂钩的东西组合在一起,当您告诉 Linux 关闭时(但不是当您告诉它重新启动时)为您运行grub-set-default。但是,在关闭 Windows 时您不会获得相同的功能。

我确实听说过 Grub4DOS 或 Grub1 技术,涉及将 Grub 安装到 FAT32 或 NTFS /boot分区——这将允许您也从 Windows运行grub-set-default,因此您可以从 Windows 注销脚本调用它。上次我看到有关此的任何信息时,这在 Grub2 上是不可能的。这可能已经改变了。