如何更改 GRUB 超时时间仅在下次重启时生效?

如何更改 GRUB 超时时间仅在下次重启时生效?

同样,当我更改仅影响下次启动的选定 GRUB 选项时grub-reboot 2,我想仅更改下次启动的 GRUB 超时时间。之后,超时值应重置为之前的值。

我该如何实现这一点?我有 Ubuntu 18.04。

答案1

你可以使用 Grub 的环境块

我们可以保存一个变量,/boot/grub/grubenv并在下次启动时修改该变量的值。

添加以下行到/etc/grub.d/40_custom

if [ ${boot_once_timeout} != "x" ]; then
    set timeout=${boot_once_timeout}
    set boot_once_timeout=x
    save_env boot_once_timeout
fi

使用以下命令使文件可执行sudo chmod +x /etc/grub.d/40_custom

跑步sudo update-grub

现在将变量写入/boot/grub/grubenv并重新启动:

sudo grub-editenv - set boot_once_timeout=0
sudo grub-reboot 0

不要使用文本编辑器来写入/boot/grub/grubenv,只使用grub-editenv-命令来确保文件的大小和格式正确。

您始终可以使用以下命令检查变量的值

~$ cat /boot/grub/grubenv
# GRUB Environment Block
next_entry=
boot_once_timeout=x

请注意,只有当 Grub 能够写入时,这才会起作用/boot/grub/grubenv,因此如果您的/boot文件夹位于 BTRFS 分区或 LVM 卷中,则此解决方案将不起作用。

另请查看这个答案,另一个解释 Grub 的环境块用法的例子。

答案2

我开发的第一组脚本之一是为了加快重启时间:

$ cat /usr/local/bin/zapboot
#! /bin/bash

# NAME: zapboot
# PATH: /usr/local/bin
# DESC: Perform faster reboots from Linux.
# CALL: sudo zapboot
# DATE: Created Oct 8, 2016.
# NOTE: Configuration files in Xxxx/Yyyy/Zzzz.conf

sudo sed -i 's/set\ timeout=10/set\ timeout=00/' /boot/grub/grub.cfg
sudo reboot

$ cat /usr/local/bin/zaprestore
#! /bin/bash

# NAME: zaprestore
# PATH: /usr/local/bin
# DESC: Restores /boot/grub/grub.cfg to 10 second timeout.
# CALL: sudo zaprestore
# DATE: Created Oct 8, 2016.

sudo sed -i 's/set\ timeout=00/set\ timeout=10/' /boot/grub/grub.cfg

要快速重启,请输入。sudo zapboot登录后,请输入。sudo zaprestore

zapboot命令中:

sed -i 's/set\ timeout=10/set\ timeout=00/' /boot/grub/grub.cfg
  • 将 grub 的超时时间从 10 秒更改为 00 秒。
  • 您不能将超时设置为 0 秒,因为 grub 会覆盖为 10 秒。

zaprestore命令中:

sed -i 's/set\ timeout=00/set\ timeout=10/' /boot/grub/grub.cfg
  • 将 grub 的超时时间改回 10 秒。
  • 请注意,如果您已将系统更改为 5 秒超时,请在两个脚本中将其替换10为。5
  • 两个脚本都必须设置为可执行文件,方法是sudo chmod a+x /usr/local/bin/zap____
  • 其中或____是。bootrestore

相关内容