web-dev-qa-db-ja.com

Ubuntu 18.04でGRUBタイムアウトを0に設定する方法

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"
9
Bob91

/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に設定されているのとほぼ同じであることがわかりました。

10
Bob91

私の場合、問題は私のシステムが「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"
5
Alex Malinovich

他の回答が言うように、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

ファイルの編集中に一時的に書き込み許可を得るため。

3
asantas93

GRUB_TIMEOUT0に設定できます。

部品の上書きタイムアウト値は、ajust_timeoutの上部の/etc/grub.d/30_os-prober関数に書き込まれます。

ajust_timeout () {
...
if [ "\${timeout}" = 0]; then
  set timeout=10
fi
...
}

そのため、ファイルを編集して値を設定し、if-blockをコメントアウトできます。

1
guest

GRUB_HIDDEN_TIMEOUT = 0のコメントを外し、update-grubを再度実行します。

1
hiigaran

GRUB_TIMEOUT-1に設定できます。

例:GRUB_TIMEOUT="-1"

1
Giceu Cassiano