使 grub 在内核更新下保持其默认引导

rep*_*mer 11 linux grub kernel ubuntu

我双启动我的机器,我希望它默认启动到 Windows,这样每当我从家里远程重启机器时,它就能够回到 Windows(而不是 Ubuntu)。

问题是每次Ubuntu升级内核时,我都必须将grub的默认启动项重置回windows。这是因为 grub 菜单加载器使用位置 6 来引导默认操作系统。当 Ubuntu 安装新内核时,它会更改该顺序。

我正在寻找一种方法来配置 grub 以记住内核更新下的默认引导项。

qua*_*ote 9

Grub 1(Ubuntu 9.04 及更早版本)

我发现最简单的方法是将 Windows 引导条目移动到/boot/grub/menu.lst. 默认情况下,Grub 配置文件的布局如下:

  1. 基本选项
  2. debian auto-magic 内核配置(默认包括 memtest86+ 等实用程序)
  3. 其他检测到的操作系统

第 2 部分由配置文件中的这些行划分:

### BEGIN AUTOMAGIC KERNELS LIST
(lots of stuff here)
### END DEBIAN AUTOMAGIC KERNELS LIST
Run Code Online (Sandbox Code Playgroud)

自动检测的操作系统(例如,Windows)的条目放在此部分之后。安装新内核时,第 2 部分是唯一更改的部分。因此,将自动检测到的操作系统移到该行之前的某个BEGIN位置会将其放置在安装新内核时条目号不会更改的位置。


Grub 2(Ubuntu 9.10 及更高版本)

使用 Grub2,整个配置文件在任何时候update-grub运行时/boot/grub/grub.cfg都会重新创建,因此编辑不会永久修复。如何生成该文件是由文件处理/etc/default/grub和脚本/etc/grub.d/*。因此,我们通过修改控制配置文件各个部分的文件来修改配置,然后update-grub再次运行。

我的/etc/grub.d包括这些文件:

  • 00_header
  • 05_debian_theme
  • 10_hurd
  • 10_linux
  • 20_memtest86+
  • 21_memtest86
  • 30_os-探测器
  • 40_自定义

这些是为了生成配置文件而运行的 shellscript 。Windows 引导条目由 生成30_os-prober,它在 .linux 引导条目生成运行10_linux。所以只需重命名30_os-prober为小于 10 的名称,然后重新运行update-grub

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

现在,您的Windows项应是第一项,你可以设置为默认启动项(GRUB_DEFAULT=)的/etc/default/grub