低スペック PC 活用ノウハウ
Linux Mint (Cinnamon) の使い方 その-37
デュアルブート での ブートローダ (GRUB) トラブル と 修復ノウハウ
Linux Mint (Cinnamon) の使い方 その-37
デュアルブート での ブートローダ (GRUB) トラブル と 修復ノウハウ
デュアルブート環境では、「GRUB」に関するトラブルに遭遇することが多々ある。これらのトラブルに対処するには、デュアルブート環境での起動の仕組みや、デュアルブートディスクのパーティション構成、それに「GRUB」に関するコマンドの使い方を理解していると対応がスムーズに行える。
以下の記事を参考に、GURB に関するトラブルの調査や修復に役立てて頂きたい。
スポンサー リンク
目 次
1. デュアルブート環境での起動の仕組み
🟩 「GURBメニュー」が表示されるストーリー。
🔹GPT方式のディスクには、パーティションエントリと呼ばれる領域があり、ここに、128個のパーティションのエントリが格納される。
🔹パーティションエントリに「ESP フラグ」が設定されていれば、EFIシステムパーティション(ESP)であることを示し、UEFI用のブートローダが格納されているパーティションになる。
🔹このパーティションエントリからESPを探し、ESPに格納されている「起動したいOSの名前」のディレクトリから、GRUB(例: grubx64.efi)をロードして実行する。
これで、「GURBメニュー」が表示され、起動するOSの選択が可能になる。
🟥 電源を入れてから「GURBメニュー」が表示されるまでの、UEFI と GRUBの動作詳細。
① マシンの電源投入 → UEFI ファームウェアがハードウェアを検出し初期化(POST)。
② UEFI ブートマネージャは NVRAM に保存された**Boot####**エントリと BootOrder を参照する。
例:Boot0001 shimx64.efi、Boot0002 Windows Boot Manager、BootOrder: 0001,0002,...
③ 見つかった EFI アプリ(例:shimx64.efi / grubx64.efi / Windows の bootmgfw.efi)を読み込む。
④ Secure Boot 有効なら shimx64.efi を ESP に置き、shim が grubx64.efi を検証してから起動する。
⑤ EFI アプリとして起動された GRUB は、 /boot にある(grub.cfg)を探す。
⑥ GRUB がデバイス・ファイルシステム(/boot、LVM、暗号化など)を検出して grub.cfg を読み込む。
⑦ grub.cfg の設定に従い、メニューを表示または自動起動する(ここでユーザーにメニューが見える/見えないが決まる)。UEFI とは
UEFI とは「Unified Extensible Firmware Interface」の略で、パソコンの起動時にハードウェアを初期化したり、HDDやSSDに格納されているOSを起動したりするのに使われる。
従来のBIOSの後継として開発され、高速な起動、より大きなディスク容量への対応、高度なセキュリティ機能(セキュアブートなど)が特徴です。
GRUBとは
コンピュータの起動時に、オペレーティングシステム(OS)をストレージから読み込んで起動する「ブートローダー」の一種で、GNUプロジェクトが開発したオープンソースソフトウェア(GNU GRUB:グヌー グラブ)であり、特にLinuxディストリビューションで標準的に使われています。GRUBは複数のOSをインストールしている場合に、起動するOSを選択するメニューを表示する役割も担います。
UEFI と GRUB の関係:
UEFIがGRUBを起動するブートローダーであり、GRUBがOSをロードします。
UEFIがGRUBを起動するブートローダーであり、GRUBがOSをロードします。
🟦 GRUB のインストール。
ほとんどの場合、GRUB は Linux のインストール時にデフォルトでインストールされ、設定される。ただし、何らかの理由で GRUB がインストールされていないか、または再度インストールする必要がある場合、grub を手動でインストールしなければならない。
ほとんどの場合、GRUB は Linux のインストール時にデフォルトでインストールされ、設定される。ただし、何らかの理由で GRUB がインストールされていないか、または再度インストールする必要がある場合、grub を手動でインストールしなければならない。
📌 この典型的なケースが、
「Timeshift」を使った「スナップショット」の「Restore」で発生する。
⚡ 理由:
Live環境では GRUB が新しいディスクに自動でインストールされないため、「Restore」後に、GRUB を手動でインストールしなければならない。
「Timeshift」を使った「スナップショット」の「Restore」で発生する。
⚡ 理由:
Live環境では GRUB が新しいディスクに自動でインストールされないため、「Restore」後に、GRUB を手動でインストールしなければならない。
GRUB のインストールコマンド:grub-install
2. 起動に関連するパーティションとその内容
🟢 GPT方式のパーティション構造。
● 保護MBR:GPT非対応のツール等がMBRとしてアクセスしてGPTを破壊しないように空き地にしています。
● プライマリGPTヘッダ:実質的なGPTの先頭であり、諸情報(GPTバージョン、LBAサイズ、総ブロック数、GUID)などが書き込まれます。
● プライマリGPT・パーティションエントリ:LBA3番セクタから30セクタで、128パーティションのエントリを格納します。
● EFIシステムパーティション(ESP):UEFI用のブートローダを格納するパーティションです。
• ESPはFAT32フォーマットと決められています。
• 500MB以上の確保が推奨とされています。
• パーティションエントリには、ESPを示すフラグを設定します。
● パーティション:MBRより多くのパーティションに分けることができます。
● バックアップGPT(セカンダリGPT):先頭のプライマリGPTのGPTヘッダ/パーティションエントリに同期します。
• バックアップとして故障時の回復に利用されます。
● プライマリGPTヘッダ:実質的なGPTの先頭であり、諸情報(GPTバージョン、LBAサイズ、総ブロック数、GUID)などが書き込まれます。
● プライマリGPT・パーティションエントリ:LBA3番セクタから30セクタで、128パーティションのエントリを格納します。
● EFIシステムパーティション(ESP):UEFI用のブートローダを格納するパーティションです。
• ESPはFAT32フォーマットと決められています。
• 500MB以上の確保が推奨とされています。
• パーティションエントリには、ESPを示すフラグを設定します。
● パーティション:MBRより多くのパーティションに分けることができます。
● バックアップGPT(セカンダリGPT):先頭のプライマリGPTのGPTヘッダ/パーティションエントリに同期します。
• バックアップとして故障時の回復に利用されます。
🔵 デュアルブートディスクのパーティション構成(Linux Mint での分析)。
sda6:Linux Mint の ルートディレクトリー / で、/boot ディレクトリーに「/boot/efi」と「/boot/grub」の2つが配置されている。
sda5:Linux Mint の ESP は、「/boot/efi」にマウントされていることが判る。
🟢 /boot/efi:sda5 Linux Mint ESP の内容。
「/boot/efi」には「EFI」しかなく、その下位の構造は以下のようになっている。
EFI/
├── Boot/
│ ├── BOOTX64.EFI ← 予備ブートローダ
│ ├── fbx64.efi
│ └── mmx64.efi
│
├── linuxmint/
│ ├── BOOTX64.CSV
│ ├── grub.cfg
│ ├── grubx64.efi ← GRUB 本体(最重要)
│ ├── mmx64.efi
│ └── shimx64.efi ←セキュアブートが有効なある場合
│
└── ubuntu/
├── BOOTX64.CSV
├── grub.cfg
├── grubx64.efi ← GRUB 本体(最重要)
├── mmx64.efi
└── shimx64.efi🔎 EFI システムパーティション(ESP)の 中身を確認するには、次のコマンドを使うと便利である。
sudo ls -R /boot/efi/
-R:–recursive ディレクトリを指定した場合、再帰的に表示する。
-R:–recursive ディレクトリを指定した場合、再帰的に表示する。
※:Live環境では、ESP のマウントが必要。
ステップ1:マウントポイントを作る
sudo mkdir -p /mnt/esp
ステップ2:/dev/sda5 をマウント
sudo mount /dev/sda5 /mnt/esp
ステップ3:中身を確認
sudo ls -R /mnt/esp
-------------------------------------------------------
hp-mint@hpmint-400-220jp:~$ sudo ls -R /mnt/esp
/mnt/esp:
EFI
/mnt/esp/EFI:
BOOT linuxmint ubuntu
/mnt/esp/EFI/BOOT:
BOOTX64.EFI fbx64.efi mmx64.efi
/mnt/esp/EFI/linuxmint:
BOOTX64.CSV grub.cfg grubx64.efi mmx64.efi shimx64.efi
/mnt/esp/EFI/ubuntu:
BOOTX64.CSV grub.cfg grubx64.efi mmx64.efi shimx64.efi
-------------------------------------------------------
ステップ4:アンマウント
sudo umount /mnt/esp🔹 Windows の EFI システムパーティション の中身を確認する場合。
sudo mount /dev/sda2 /mnt/esp
sudo ls -R /mnt/esp
sudo mount /dev/sda2 /mnt/esp
sudo ls -R /mnt/esp
🔵 /boot/grub の内容。
grub.cfg は、Linuxのブートローダーである GRUB がオペレーティングシステム(OS)を起動するための設定を記述したファイルで、起動メニューに表示されるOSのリストや、各OSを起動するための具体的な設定(カーネルの場所や起動パラメータなど)が記述されている。
x86_64-efi ディレクトリ は、
UEFI モードで GRUB を使うための モジュールファイル(.mod)が大量に入っている場所です。
UEFI モードで GRUB を使うための モジュールファイル(.mod)が大量に入っている場所です。
3. UEFIブートマネージャーを操作するコマンド
🧰 efibootmgr コマンド
マザーボード上の不揮発性メモリ (NVRAM) に保存されているUEFIブートマネージャーの操作コマンドです。
• ブートエントリ: どのOSやブートローダーを起動するかを示すエントリの表示。
• ブート順序 (BootOrder):これらのエントリをどの順番で試すかという設定。
• 現在のブート (BootCurrent):現在起動しているシステムが使用したブートエントリ。
• タイムアウト:ブートメニューの表示時間などの設定。
マザーボード上の不揮発性メモリ (NVRAM) に保存されているUEFIブートマネージャーの操作コマンドです。
• ブートエントリ: どのOSやブートローダーを起動するかを示すエントリの表示。
• ブート順序 (BootOrder):これらのエントリをどの順番で試すかという設定。
• 現在のブート (BootCurrent):現在起動しているシステムが使用したブートエントリ。
• タイムアウト:ブートメニューの表示時間などの設定。
🔹 ブートエントリ一覧の表示
sudo efibootmgr
sudo efibootmgr -v
-v(--verbose)オプションを付けると、詳細なブートエントリを表示します。
sudo efibootmgr
sudo efibootmgr -v
-v(--verbose)オプションを付けると、詳細なブートエントリを表示します。
🔹 ブート順序の変更
sudo efibootmgr -o 0003,0008,0000,0001,0002,0006,0004,0005
sudo efibootmgr -o 0003,0008,0000,0001,0002,0006,0004,0005
🔹 ブートマネージャーのタイムアウト秒数の変更
sudo efibootmgr --timeout 20
sudo efibootmgr --timeout 20
🔹 ブートエントリの名前の変更
(XXXX は Boot0001 などの番号)。
sudo efibootmgr -b XXXX -L "Linux Mint"
(XXXX は Boot0001 などの番号)。
sudo efibootmgr -b XXXX -L "Linux Mint"
🔹 ブートエントリの削除
sudo efibootmgr -b XXXX -B
sudo efibootmgr -b XXXX -B
🔹 「Windows Boot Manager」の再登録
(--part 2 は Windows の EFI パーティション番号に合わせて変更)。
sudo efibootmgr --create --disk /dev/sda --part 2 --label "Windows Boot Manager" --loader "\EFI\Microsoft\Boot\bootmgfw.efi"
(--part 2 は Windows の EFI パーティション番号に合わせて変更)。
sudo efibootmgr --create --disk /dev/sda --part 2 --label "Windows Boot Manager" --loader "\EFI\Microsoft\Boot\bootmgfw.efi"
⚙️GRUBメニューの調整(任意)。
ターミナルで以下を実行することで、デフォルトOSや待機時間が変更できる。
sudo nano /etc/default/grub
ターミナルで以下を実行することで、デフォルトOSや待機時間が変更できる。
sudo nano /etc/default/grub
編集例:
GRUB_DEFAULT=2 :Windows Boot Managerをデフォルトにする場合(番号は環境による)
GRUB_TIMEOUT=20 :メニュー表示時間を20秒に変更
GRUB_DEFAULT=2 :Windows Boot Managerをデフォルトにする場合(番号は環境による)
GRUB_TIMEOUT=20 :メニュー表示時間を20秒に変更
保存後に更新が必要:
sudo update-grub
sudo update-grub
4. ブートローダ (GRUB) の修復要領
🔸トラブルの現象-1:GRUB(ブートローダ)のメニューが出力されることなく Windows が自動起動される。
🔸トラブルの現象-2:「起動デバイスが見つかりません」
→ EFI エントリを手動で作成して対応する方法もあるが、「完全再構築」の方が容易。
→ EFI エントリを手動で作成して対応する方法もあるが、「完全再構築」の方が容易。
デュアルブート環境で発生する「GRUB」に関するトラブルへの対応は・・・。
ブートローダ (GRUB) の修復 = GRUB の再インストール で、
GRUB の 「完全再構築」 が最も安全かつ容易です。
GRUB の 「完全再構築」 が最も安全かつ容易です。
①.GRUB を ディスクのブート領域に再インストールするコマンド。
grub-install
→ EFI System Partition(ESP)に
→ EFI System Partition(ESP)に
grubx64.efi を配置する②.GRUB の設定ファイル(/boot/grub/grub.cfg)を自動生成し直すコマンド。
update-grub (ラッパー(wrapper)コマンド)
→ grub-mkconfig -o /boot/grub/grub.cfg が実行される
→ grub-mkconfig -o /boot/grub/grub.cfg が実行される
✅ UEFIモード の GRUB インストールコマンド
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linuxmint
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=linuxmint
🔹 --target= プラットフォーム指定:x86_64-efi(UEFI 64bit:通常のPC)
🔹 --efi-directory= ESP のパス指定:/boot/efi
🔹 --bootloader-id= EFI でのフォルダ名:linuxmint
⚡ 実行される内容
• /boot/efi/EFI/linuxmint/grubx64.efi を作成
• /boot/grub/x86_64-efi に GRUB モジュールを生成
• UEFI NVRAM にブートエントリ "linuxmint" を登録(efibootmgr が呼ばれる)
• /boot/efi/EFI/linuxmint/grubx64.efi を作成
• /boot/grub/x86_64-efi に GRUB モジュールを生成
• UEFI NVRAM にブートエントリ "linuxmint" を登録(efibootmgr が呼ばれる)
⚡ 実行される処理
• ESP(/boot/efi)の中に GRUB EFI アプリを配置
• /boot/grub/ に設定ファイルやモジュールを作成
• UEFI ファームウェアにブート項目を追加
• ESP(/boot/efi)の中に GRUB EFI アプリを配置
• /boot/grub/ に設定ファイルやモジュールを作成
• UEFI ファームウェアにブート項目を追加
✅ GRUB を再生成するコマンド(例、Debian/Ubuntu 系)
sudo grub-mkconfig -o /boot/grub/grub.cfg
# または
sudo update-grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
# または
sudo update-grub
⚡ grub.cfg(GRUB のメニュー)を作り直す
5. Live 環境での GRUB の修復「完全再構築」の手順
GRUB の修復(完全再構築)手順。
🟥 Live USB で起動し、「Live 環境」で端末を使って次の作業をする。
🔧 ① ルートパーティションをマウント
sudo mount /dev/sda6 /mnt
🔧 ② ESP をマウント(/dev/sda5:重要)
sudo mount /dev/sda5 /mnt/boot/efi
🔧 ③ 必要ディレクトリを bind mount
for i in /dev /dev/pts /proc /sys /run; do
sudo mount --bind $i /mnt$i
done
🔧 ④ chroot で入る
sudo chroot /mnt
🔧 ⑤ GRUB を完全再インストール
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
🔧 ⑥ GRUB メニューを再構築
update-grub
🔧 ⑦ chrootから抜ける
exit
🔧 ⑧ 再起動する
sudo rebootこの解決策(手順)は、
• 別ディスクに GRUB をインストールしてデュアルブート設定にする
• 別ディスクに GRUB をインストールしてデュアルブート設定にする
場合であっても、同じ要領でよい。
Linux Mint に関する記事一覧:
以上。
(2025.11.24)
スポンサー リンク
















