标签 内核管理 下的文章

在 Ubuntu 的默认配置中,当系统检测到仅存在一个操作系统时,GRUB 启动菜单会被隐藏,系统会直接进入内核启动流程。这种“无感启动”在桌面用户场景下较为友好,但在 服务器、运维、开发和多内核管理场景 中,会带来一系列明显的痛点。

可通过配置grub控制默认是否显示grub界面以及倒计时相关的配置

配置文件路径

  1. ubuntu grub配置文件路径

/etc/default/grub

  1. centos grub配置文件路径

/etc/sysconfig/grub

默认配置文件内容

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

主要关注以下三个参数

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

GRUB_DEFAULT

默认引导项,可以有以下几种值

  1. saved 代表上次启动时选择的引导项
  2. 从0开始的数字,第一个引导项是0,第二个引导项是1,以此类推

如上图Previous Linux Versions存在的子菜单可以用2>0或者2>1表示

  1. grub选项名

GRUB_TIMEOUT_STYLE

grub显示风格,默认值是menu

可选值有menu,hidden,countdown

如果该选项未设置或者值设为menu,启动时将显示grub,并开启GRUB_TIMEOUT倒计时。倒计时结束前可以按任意键中断倒计时,否则倒计时结束后会引导GRUB_DEFAULT启动项。

如果选项设置为hiddencountdown,在显示grub界面之前会开启GRUB_TIMEOUT倒计时。倒计时结束前按ESC键中断倒计会进入grub界面,如果没有按ESC键进行中断操作,倒计时结束后会引导GRUB_DEFAULT启动项。

hiddencountdown的区别在于,hidden不显示倒计时读秒,countdown显示倒计时读秒

GRUB_TIMEOUT

这个参数代表grub的超时时间,单位是秒,默认值为5,设置为0代表不显示grub界面,-1代表一直等待

例子

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5

修改后执行update-grub应用配置,重启后必定进入grub界面

GRUB_DEFAULT=1
GRUB_TIMEOUT_STYLE=countdown
GRUB_TIMEOUT=5

修改后执行update-grub应用配置,重启后在5秒倒计时结束前按ESC必定进入grub界面

GRUB_DEFAULT="2>1"
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5

修改后执行update-grub应用配置,重启后在5秒倒计时结束后会引导指定启动项,这个方法对于客户要求进入旧版本内核比较好用