![如何更改 GRUB 超时时间仅在下次重启时生效?](https://linux22.com/image/1170277/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%20GRUB%20%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4%E4%BB%85%E5%9C%A8%E4%B8%8B%E6%AC%A1%E9%87%8D%E5%90%AF%E6%97%B6%E7%94%9F%E6%95%88%EF%BC%9F.png)
同样,当我更改仅影响下次启动的选定 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____
- 其中或
____
是。boot
restore