MENU

マルチブート環境でデフォルト起動OSを変更する実務手順

マルチブート(デュアルブート)環境で電源を入れると、ブートローダーのメニューが表示されます。何も操作しなければデフォルトのOSが自動起動しますが、「LinuxをデフォルトにしたいのにWindowsが起動してしまう」「検証用のOSを毎回手動で選んでいる」といった状況は実務でよくあります。

かつてはLILO(Linux Loader)がブートローダーとして広く使われていましたが、現在のLinuxディストリビューションではほぼ廃止されており、標準はGRUB2(GRand Unified Bootloader 2)です。この記事ではGRUB2でデフォルト起動OSを変更する実務手順を、ディストリビューション別の反映コマンドも含めて解説します。

目次

まず結論:設定ファイル1行を変えてコマンド1本で反映

/etc/default/grubGRUB_DEFAULT を変更し、設定反映コマンドを実行するだけです。手順全体は次の3ステップです。

# ステップ1: 現在のエントリー番号を確認(Ubuntu/Debian系)
grep -E "^menuentry" /boot/grub/grub.cfg | awk -F"'" '{print NR-1"\t"$2}'

# ステップ2: 設定ファイルを編集(sudoで実行)
sudo vi /etc/default/grub
# GRUB_DEFAULT=0  →  変更したいエントリー番号または名前に書き換える

# ステップ3: 設定を反映(Ubuntu/Debian系)
sudo update-grub

再起動後に変更が有効になります。RHEL系(AlmaLinux・Rocky Linux・Fedoraなど)での反映コマンドは後述します。

現在のGRUBエントリー一覧を確認する

インデックス番号で指定する場合は、まず現在登録されているエントリーを確認します。番号は0始まりです。

# Ubuntu / Debian 系
grep -E "^menuentry" /boot/grub/grub.cfg | awk -F"'" '{print NR-1"\t"$2}'

# RHEL 8/9 / AlmaLinux / Rocky Linux 系
grep -E "^menuentry" /boot/grub2/grub.cfg | awk -F"'" '{print NR-1"\t"$2}'

出力例(デュアルブート環境):

0	Ubuntu
1	Ubuntu, with Linux 6.8.0-1057-generic (recovery mode)
2	Windows Boot Manager (on /dev/sda1)

Windowsをデフォルトにしたければ GRUB_DEFAULT=2、Ubuntuに戻すなら GRUB_DEFAULT=0 を設定します。

/etc/default/grub でデフォルトエントリーを指定する

実際の設定は /etc/default/grubGRUB_DEFAULT 行で行います。指定方法は3種類あり、用途に応じて使い分けます。

インデックス番号で指定する

GRUB_DEFAULT=0

記述はシンプルですが、カーネルアップデートによって番号がずれるリスクがあります。安定運用には次の「名前指定」を推奨します。

エントリー名(文字列)で指定する(推奨)

GRUB_DEFAULT="Ubuntu"

grub.cfgmenuentry 行に書かれた名前をそのまま指定します。ダブルクォートで囲む点に注意してください。サブメニュー配下のエントリーを指定する場合は > で区切ります。

# サブメニュー配下のエントリーを指定する場合
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-1057-generic"

最後に選択したOSを次回も起動する(saved)

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

メニューで手動選択したエントリーを記憶し、次回起動時も同じOSが自動選択されます。複数のOSを使い分ける共用機や検証環境でよく採用される設定です。

設定をGRUBに反映する(ディストリビューション別)

/etc/default/grub を編集したら必ず反映コマンドを実行します。このコマンドを忘れると再起動後も変更は有効になりません。

# Ubuntu / Debian / Linux Mint
sudo update-grub

# RHEL 8/9 / AlmaLinux / Rocky Linux(BIOSブート)
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# RHEL 8/9 / AlmaLinux / Rocky Linux(UEFIブート・RHEL/CentOS Stream)
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

# AlmaLinux(UEFIブート)
sudo grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg

# Fedora / openSUSE
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

UEFIかBIOSかを確認するには以下を実行します。

[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"

正常に反映されると、update-grub の場合は Found Windows Boot Manager on /dev/sda1 のようにエントリーを検出したメッセージが出力されます。エラーなく終了したことを確認してから再起動してください。

次回の起動だけ別エントリーで起動したいとき

ある運用現場では「ふだんはLinuxをデフォルトにしたまま、今回の再起動だけWindowsで確認作業をしたい」という場面があります。そのときは grub-reboot が便利です。

# エントリー番号2(Windows)を次回起動のみ選択
sudo grub-reboot 2
sudo reboot

# 名前で指定することも可能
sudo grub-reboot "Windows Boot Manager (on /dev/sda1)"

grub-reboot は一時的な設定変更のため、次回以降は元のデフォルトOSに戻ります。/etc/default/grub の変更と反映コマンドは不要です。

カーネル更新後のインデックスずれと対策

インデックス番号(数値)でデフォルトを指定している場合、カーネルアップデートによって grub.cfg に新しいエントリーが追加されると番号がずれます。「アップデート後にWindowsが起動しなくなった」「意図しないカーネルが起動するようになった」という事例は実務でも報告されています。

安全な対策は以下の2点です。

  • 名前(文字列)で指定するGRUB_DEFAULT="Ubuntu" のようにエントリー名で指定することで、エントリーの追加・削除による番号ずれを回避できます。
  • GRUB_DEFAULT=saved を使う:最後に手動で選択したエントリーを記憶させる設定で、番号に依存しません。

あわせてメニューの表示時間(タイムアウト)も設定しておくと、意図せず自動起動してしまうリスクを減らせます。

# /etc/default/grub
GRUB_TIMEOUT=10   # 10秒間メニューを表示してから自動起動

変更後は必ず update-grub または grub2-mkconfig で反映してください。反映し忘れた場合は設定が無効のままになります。反映が成功したかどうかは、コマンド終了後に /boot/grub/grub.cfg(または /boot/grub2/grub.cfg)の更新日時を ls -l で確認するのが確実です。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次