今、メインのデスクトップPCではWindowsとUbuntuをデュアルブートさせているんですが、UbuntuをWindowsより後にインストールした際にGRUBブートローダも一緒にインストールされていて、デフォルトでUbuntuが起動するように設定されています。
Ubuntuはたまに実験で使う程度で普段はWindowsしか使わないのですが、これの何が不便かと言うと、GRUBが起動した際にいちいちWindowsを10秒以内にキー操作で選ばないとUbuntuが起動してしまうという点です。特にWindows Updateで再起動するときに、再起動後10秒以内にWindowsを選択しないとUbuntuが勝手に起動するので、真夜中にWindows Updateが実行されるとUbuntuのログイン画面が表示されたまま朝を迎えてしまいます。
今までも「あー!またUbuntuが勝手に起動しやがった!」とか「あー!またOS選び間違えた!」なんてことが多発しているので、今回はGRUBブートローダの設定を変更し、デフォルトでWindowsが起動するようにしたいと思います。
目的
GRUBの設定を変更し、デフォルトでWindowsが起動するようにする。
使用環境
- mouse H110M-SI01
- OS
- Windows10 Home 21H1(19043.1237 / 64bit)
- Ubuntu 20.04.1 LTS (64bit)
- CPU: Intel Core i5-6500 @ 3.20GHz
- RAM: 16GB
- ブートローダ: GNU GRUB version 2.04
現在の状態と実現したい状態
「デフォルトでWindowsが起動するように」なんて書きましたが、正確に言えば「デフォルトでGRUBブートローダからWindowsブートローダが起動するように」します。
現在の状態:
- GRUBブートローダ
- Ubuntu(既定)
- Windows Boot Manager
- Windows 10
実現したい状態:
- GRUBブートローダ
- Ubuntu
- Windows Boot Manager(既定)
- Windows 10
Windows Boot Manager
というのがWindowsのブートローダです。こいつが起動すれば自動的にWindows10を起動してくれます(複数のWindowsをデュアルブートしていると違ってくるかもしれませんが)。
ブートローダの構成や表示順序は面倒なので変更しません。あくまでもGRUBブートローダの既定の起動カーネルをWindows Boor Managerに変更するだけです。
GRUBの順序を見てみる
まずは現在のGRUBに登録されているカーネルの順序を見てみます。Ubuntuを起動し、端末で以下のコマンドを実行。
$ grep -e "^\(menuentry\)\|\(submenu\)" /boot/grub/grub.cfg
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3d25245f-880e-4743-b276-6a80ae867393' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-3d25245f-880e-4743-b276-6a80ae867393' {
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-A66D-E0B6' {
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
上から優先順位順に表示されます。上の実行結果では Ubuntu, Advanced options for Ubuntu, Windows Boot Manager, …といった順序です。
ここで注意しなければならないのは、起動順序のインデックス値は1からではなく0から始まっていることです。実行結果を見てみると、既定のUbuntu
が0番、Windows Boot Manager
は2番。よって2番をデフォルトに設定します。
設定変更
/etc/default/grub
を弄ります。sudoで実行しないと書き換えできないので注意(管理者パスワードが要求されます)。お好みのエディタでどうぞ。
$ sudo emacs /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_TIMEOUT_STYLE=hidden
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"
GRUB_DEFAULT=0
となっているところをGRUB_DEFAULT=2
に変更し保存します。
# 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=2 # ←ここ
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
設定を反映
/etc/default/grub
を保存しただけでは設定が反映されません。
GRUBを更新しgrub.cfg
に反映させます。
$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-5.8.0-48-generic
Found initrd image: /boot/initrd.img-5.8.0-48-generic
Linux イメージを見つけました: /boot/vmlinuz-5.4.0-48-generic
Found initrd image: /boot/initrd.img-5.4.0-48-generic
Linux イメージを見つけました: /boot/vmlinuz-5.4.0-47-generic
Found initrd image: /boot/initrd.img-5.4.0-47-generic
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings
完了
grub.cfg
を表示し反映されたか確認してみます。
$ grep "set default" /boot/grub/grub.cfg
set default="${next_entry}"
set default="2"
デフォルトが2番に設定されていることが確認できました。
再起動
再起動してみます。
よし、Windowsがデフォルトになってる!
画像では分かりにくいですが、起動して既定でWindows Boot Managerが選択されています。これで起動後いちいちキー操作しなくてもWindowsが起動するようになりました。
Windows Update
ちょうどWindows Updateが来ていたので、再起動させて何も操作せずに更新されるか確認。
…されました。GRUBの選択画面で10秒間何も操作しなければ勝手にWindowsが起動します。よって目的達成です!