Grub構成ファイルを0の値にタイムアウトするように更新しようとしたため、OSはすぐに起動します。 Ubuntu 18.04で/etc/default/grub
構成ファイルを変更してから実行しました。
Sudo update-grub
うまくいきませんでした。私も走った:
Sudo grub-mkconfig
Sudo update-grub
しかし、それらは機能しませんでした。
この問題を解決するためにWebで多くのことを検索しましたが、すべてのガイドはupdate_grubコマンドを実行して/etc/default/grub
configファイルで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"
/boot/grub/grub.cfg
ファイルには、ファイルのほぼ最後に、タイムアウトが0に設定されている場合にタイムアウトを10に設定する条件があります。つまり、/etc/default/grub
でタイムアウトを0に設定してから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に設定されているのとほぼ同じであることがわかりました。
私の場合、問題は私のシステムが「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
に/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"
他の回答が言うように、GRUB_HIDDEN_TIMEOUT
のコメントを外し、update-grub
を実行します。次にコメントアウト
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
/boot/grub/grub.cfg
のセクション。 vimでは、感嘆符:x!
で読み取り専用プロパティをオーバーライドできます。または実行できます
Sudo chmod +w /boot/grub/grub.cfg
Sudo vim /boot/grub/grub.cfg
Sudo chmod -w /boot/grub/grub.cfg
ファイルの編集中に一時的に書き込み許可を得るため。
GRUB_TIMEOUT
を0
に設定できます。
部品の上書きタイムアウト値は、ajust_timeout
の上部の/etc/grub.d/30_os-prober
関数に書き込まれます。
ajust_timeout () {
...
if [ "\${timeout}" = 0]; then
set timeout=10
fi
...
}
そのため、ファイルを編集して値を設定し、if-blockをコメントアウトできます。
GRUB_HIDDEN_TIMEOUT = 0のコメントを外し、update-grubを再度実行します。
GRUB_TIMEOUT
を-1
に設定できます。
例:
GRUB_TIMEOUT="-1"