我尝试将 grub 配置文件更新为超时值为 0,以便操作系统快速启动。我修改了/etc/default/grub
Ubuntu 18.04 上的配置文件,然后运行:
sudo update-grub
但它不起作用。我还运行了:
sudo grub-mkconfig
sudo update-grub
但它们没有作用。
我在网上搜索了很多方法来解决这个问题,但所有的指南都说要运行 update-grub 命令来通过/etc/default/grub
配置文件更新 grub。我不知道 Ubuntu 18.04 是否以不同的方式处理 grub 文件,但我无法使用我的参数更新 grub。
这是我的/etc/default/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_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
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"
答案1
在/boot/grub/grub.cfg
文件中,几乎在文件的末尾有一个条件,如果超时设置为 0,则将超时设置为 10。换句话说,如果您在文件中将超时设置为 0 /etc/default/grub
,然后更新 grub,则上述条件会将其重置为 10 秒。
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
但是,/boot/grub/grub.cfg
是只读文件,我无法删除该条件。我用不同的超时值进行了一些测试/etc/default/grub
。我尝试了 1ms (0.001)、0.1s 和 1s,发现低于 1 的值(如 0.1 和 0.001)的工作方式相同,几乎与超时设置为 0 一样。
答案2
就我而言,问题在于我的系统不支持“recordfail”,这导致 grub.cfg 中添加了一个单独的块,默认超时时间为 30 秒。相关代码如下/etc/grub.d/00_header
:
if [ "$recordfail_broken" = 1 ]; then
cat << EOF
if lsefi; then
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
if [ x\$feature_timeout_style = xy ] ; then
set timeout_style=menu
fi
fi
EOF
修复方法很简单,只需为GRUB_RECORDFAIL_TIMEOUT
in添加一个值/etc/default/grub
并再次运行update-grub
即可。例如:
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
# Adjusted timeout for system which doesn't support recordfail
GRUB_RECORDFAIL_TIMEOUT=2
# 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"
答案3
您可以设置GRUB_TIMEOUT
为0
。
覆盖超时值的部分写在ajust_timeout
顶部的函数中/etc/grub.d/30_os-prober
。
ajust_timeout () {
...
if [ "\${timeout}" = 0]; then
set timeout=10
fi
...
}
因此,您可以通过编辑文件并注释掉 if-block 来设置该值。
答案4
取消注释并再次GRUB_HIDDEN_TIMEOUT=0
运行。update-grub