f

2016-10-22

How to skip GRUB boot menu

LinuxのブートローダーであるGRUBの起動画面をスキップする方法を記す。

結論としては,/etc/default/grubのパラメーターを以下のとおりに変更すれば実現できる。

# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0

Introduction

PCの電源を入れると,ブートローダーと呼ばれるプログラムがメモリに読み込まれる。このブートローダーがさらに別のプログラムを呼ぶことを繰り返して最終的にOSがメモリに読み込まれPCの起動が完了する。

GNU GRUB(GRand Unified Bootloader)はこのブートローダーの自由なソフトであり,Linux OSで採用されているブートローダーだ。

PCを起動すると,以下のどのOSで起動するかのGRUBの選択画面が表示されることがある。

GRUBの起動メニュー

マシンのトラブルなどで古いバージョンのOSで起動する必要があるなど,いつもと違うOSを選択する場合はありえる。しかし,普段はOSの選択をする必要はなく,このGRUBの画面は省略したい。

そこで,このGRUBのメニューをスキップする方法を調べた。なお,Ubuntu 16.04のGRUB 2.02-beta2で動作を確認した。

設定

インターネットでざっと調べてみると,どうやら/etc/default/grubファイルにかかれている以下のパラメーターを設定を変更すれば実現できそうというのがわかった。

  • GRUB_TIMEOUT
  • GRUB_HIDDEN_TIMEOUT

ただ,ネットの情報は古かったり間違っていることがよくある。そこで,GRUBの公式マニュアルを確認した。なお,GNUのソフトはinfoコマンドでもマニュアルを確認できる。例えば,以下のコマンドで閲覧できる。

info grub

このマニュアルの「5.1 Simple configuration handling」にパラメーターの説明が書かれている。ここから,GRUB_TIMEOUTGRUB_HIDDEN_TIMEOUTの説明をまとめると以下の表のとおりとなる。

GRUBの画面の待ち時間に関する設定
変数説明
GRUB_TIMEOUTメニューが表示されてからデフォルト項目の起動までの待ち時間
GRUB_HIDDEN_TIMEOUTメニューに入るためのキー入力の受け付け時間

GRUB_HIDDEN_TIMEOUTが少しわかりにくいので補足する。PCの起動直後にF2やF8キーを押下すれば,ユーザーが自分でGRUBの画面を表示させることができる。このキーの入力受付時間がGRUB_HIDDEN_TIMEOUTと考えればよいだろう。

また,マニュアルのGRUB_HIDDEN_TIMEOUTの説明を読むとGRUB_TIMEOUTGRUB_HIDDEN_TIMEOUTのどちらを設定すればよいかはっきりする。

GRUB_HIDDEN_TIMEOUT

Wait this many seconds for a key to be pressed before displaying the menu. If no key is pressed during that time, display the menu for the number of seconds specified in GRUB_TIMEOUT before booting the default entry. We expect that most people who use GRUB_HIDDEN_TIMEOUT will want to have GRUB_TIMEOUT set to ‘0’ so that the menu is not displayed at all unless a key is pressed. Unset by default.

5.1 Simple configuration handling - GNU GRUB Manual 2.00

ここで書かれている通り,画面表示を飛ばしたければ,GRUB_TIMEOUT=0と設定すればよいことがわかる。

設定変更

設定すべき項目が分かったので,設定ファイル/etc/default/grubを修正する。

以下のコマンドで設定を変更して,GRUBの設定を更新する。

sudo sed -i 's/^\(GRUB_TIMEOUT=\)[0-9]\+/\10/'    /etc/default/grub
sudo sed -i 's/^\(GRUB_HIDDEN_TIMEOUT=.*\)/# \1/' /etc/default/grub
sudo update-grub

上記コマンドでは,以下のようにGRUB_TIMEOUTを0に設定して,GRUB_HIDDEN_TIMEOUTをコメントアウトしている。もちろんテキストエディタで編集してもよい。GRUB_HIDDEN_TIMEOUTをコメントアウトした理由は次の節で説明する。

# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0

これで設定は完了した。

起動が早くなったかどうか気になったので,実際に起動時間を測って確認した。

  • GRUB_TIMEOUT=0:1.25 min
  • GRUB_TIMEOUT=10で即選択:1.25 min

起動画面が表示されて即選択した場合と,起動時間が変わっていないので成功している。

GRUB_HIDDEN_TIMEOUTをコメントアウトした理由

当初はGRUB_HIDDEN_TIMEOUTはコメントアウトしていなかったのだが,update-grubの実行後に以下のメッセージが表示されてしまったからだ。

Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.

日本語訳:GRUB_HIDDEN_TIMEOUTが設定されている時に,GRUB_TIMEOUTを非0の値に設定することは,もはや対応されない。

この件について調べると,どうやらGRUB_HIDDEN_TIMEOUTの設定は廃止予定事項のようで,GRUB_HIDDEN_TIMEOUTはコメントアウトしたほうがいいらしい。

参考:grub2 - Grub update warning in Ubuntu 14.04 - Ask Ubuntu

公式マニュアルに書かれていなかったので疑問に思ってさらに調べた。使っているGRUBが2.02-beta2だけど,参照していたマニュアルが2.00だったので,マニュアルに更新があったのかもしれないと思い,最新ソースをあたった。最新ソースのマニュアルの元ファイルは以下となっている。

参考:grub.texi\docs - grub.git - GNU GRUB

この確認してみたところ,2013-11-28のこのコミットで廃止予定であることが付け加えられたようだ。リリース版としては,2.02-beta1から,この変更が入っている。

まとめと標準の/etc/default/grub

/etc/default/grubの以下の2パラメーターを変更することで,GRUBの起動が画面を省略できるようになった。

# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0

これでPCの起動速度が早くなったので,PC作業が少し快適になっただろう。最後に,設定を間違えてしまったときのために,標準の/etc/default/grubを掲載する。

Ubuntu 16.04日本語Remixの標準の/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=10
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"

0 件のコメント:

コメントを投稿