如何选择默认应加载的内核GRUB2?我最近安装了linux实时内核,现在默认情况下加载。我想默认加载常规的。
到目前为止,我只设法选择了默认操作系统。由于某种原因/boot/grub.cfg
,我已经假设我要加载rt-kernel并将其放入通用linux菜单项(在我的情况下为Arch Linux)。
grub.cfg
仅对应于操作系统,而不对应于内核。
如何选择默认应加载的内核GRUB2?我最近安装了linux实时内核,现在默认情况下加载。我想默认加载常规的。
到目前为止,我只设法选择了默认操作系统。由于某种原因/boot/grub.cfg
,我已经假设我要加载rt-kernel并将其放入通用linux菜单项(在我的情况下为Arch Linux)。
grub.cfg
仅对应于操作系统,而不对应于内核。
Answers:
我认为大多数发行版都将更多内核移到了高级选项子菜单中,因为TomTom发现他的Arch就是这种情况。
我不想更改顶层菜单结构以选择以前的内核作为默认内核。我在这里找到了答案:
http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html
总结一下:
1)找到$menuentry_id
子菜单的_option:
$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
2)找到$menuentry_id_option
要使用的内核的菜单项:
$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
3)注释掉您当前的默认grub,/etc/default/grub
并用$menuentry_id_option
步骤1 的子菜单替换,并将$menuentry_id_option
步骤2 的选定内核替换为>
。
就我而言,修改GRUB_DEFAULT
为:
#GRUB_DEFAULT=0
GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"
4)更新grub进行更改。对于Debian,这样做是这样的:
$ sudo update-grub
做完了 现在,当您启动时,高级菜单应该带有一个星号,并且您应该启动到所选的内核中。您可以通过uname确认。
$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux
将其更改为最新的内核非常简单,只需注释掉新行并取消注释#GRUB_DEFAULT=0
,然后重新运行即可update-grub
。
经过2个小时的奋斗,我找到了一种更简单的方法来实现这一目标。我只是RTFM。;)
在/ etc / default / grub中添加两行
GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved
请执行sudo update-grub
,重新开机,进入你的GRUB菜单,并选择您需要哪个菜单或子菜单项。该选择将被保存,下次您的计算机将自动启动该选择。
如注释中所述,您可以使用grub-set-default X
命令设置要引导进入的默认内核,其中X是您要引导进入的内核的编号。在某些发行版中,您还可以通过编辑/etc/default/grub
文件和设置GRUB_DEFAULT=X
,然后运行来设置此数字update-grub
。
该数字是引导期间GRUB菜单中显示的内核/内核设置数组的索引,其中0是第一个(最顶部)条目。通常,您可以通过在中查找menuentry
行来找到正确的数字/boot/grub/grub.cfg
,如下所示:
grep menuentry /boot/grub/grub.cfg
您将看到列出的每个内核都具有GRUB引导菜单中显示的名称。第一个是0,第二个是1,依此类推。
/boot/grub2/grub.cfg
。
grub-set-default 9
,然后grub-update
重新启动。我让grub使用默认内核启动,并且仍然使用4.4.0-64-generic启动。我也尝试编辑/etc/default/grub
并设置GRUB_DEFAULT=9
并运行grub-update
。重启后,系统仍然使用4.4.0-64-generic引导。也许我错过了一些东西,有人可以帮助我吗?
简单地grep 'menuentry' /boot/grub/grub.cfg
列出其他与实际内核或操作系统版本无关的条目。例如,它列出了
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
我想对搜索该文件的方法提出一个小的改进:使用 awk
$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1**** menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2**** menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3**** menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4**** menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
使用波纹管命令及其输出,您可以看到awk
与实际操作系统版本匹配的代码,并提供可以在/etc/default/grub
文件中使用的编号。
除了/etc/default/grub
手动编辑 文件外,建议使用sed
。在下面的命令中,将X替换为您从上述awk命令获得的相应数字:
sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub
我猜jkt123可以用于大多数发行版。但是对于Arch Linux,它不起作用,至少不适用于我提供的软件包。
可以设置的索引grub-set-default
仅对应于主菜单条目。但是,内核选项位于子菜单中。因此,您可以将内核条目从子菜单中移出到主菜单中,或者将条目放在子菜单列表的顶部,然后选择子菜单。
我的Grub菜单
为了能够启动内核2,您必须与内核1交换它,或者将其放在与Arch Linux或Windows相同级别的子菜单之外。然后将默认数字设置为主菜单索引之一。例如,在上方的菜单中,“ 0”引导“ Arch Linux”,而“ 1”引导内核1。
要更改层次结构和交换,请打开/boot/grub/grub.cfg
并移动您要移动的条目。一个条目可能看起来像这样
menuentry 'ENTRY NAME'
... some code ...
}
然后,您需要应用更改。就我而言grub-mkconfig
。但这可能因系统而异。