電源ボタンを押してから、Linuxが使えるようになるまでの間、実は様々なプログラムが裏で動いています。
その中でも特に重要な役割を果たしているのが GRUB(グラブ) です。
WindowsとLinuxを両方使える「デュアルブート」環境を構築したことがある方なら、黒い画面にOSの選択メニューが表示されるのを見たことがあるでしょう。あれがGRUBです。
この記事では、Linuxユーザーなら知っておきたいGRUBの基本から、設定方法、トラブル対処まで分かりやすく解説していきます。
GRUB(グラブ)とは何か?
GRUB は「GRand Unified Bootloader(グランド・ユニファイド・ブートローダー)」の略称です。
一言で言うと、パソコンの電源を入れた後、OSを起動させるための「橋渡し役」プログラムのことです。
ブートローダーって何?
まず「ブートローダー」という言葉を理解しましょう。
ブートローダーとは、コンピューターの起動時に最初に動作する小さなプログラムで、OSを読み込んで実行する役割を担っています。
パソコンの起動プロセスは、こんな流れです:
- 電源オン
- BIOS/UEFIが起動(ハードウェアの初期化)
- ブートローダー(GRUB)が起動
- ブートローダーがOSのカーネル(核となる部分)を読み込む
- OSが起動して使えるようになる
つまりGRUBは、「ハードウェアとOS」「電源オンと使用可能状態」の間をつなぐ重要な存在なんです。
GRUBの歴史:なぜGRUBが生まれたのか
昔、Linuxには「LILO(ライロ)」という別のブートローダーが使われていました。
しかしLILOには問題がありました:
- 設定変更のたびにMBR(マスターブートレコード)を書き換える必要がある
- 複数のOSを管理しにくい
- 設定ミスでシステムが起動しなくなりやすい
そこで1990年代後半に、より柔軟で強力なブートローダーとして GRUB が開発されました。
現在広く使われているのは GRUB 2(GRUB version 2)で、これは2000年代に開発された改良版です。多くのLinuxディストリビューション(Ubuntu、Fedora、Debian、CentOSなど)で標準採用されています。
GRUBの主な機能と特徴
GRUBが他のブートローダーより優れている点を見ていきましょう。
1. 複数OSの管理が簡単
GRUBの最大の強みは、複数のOSを一つのメニューから選択して起動できることです。
例えば:
- Windows 10
- Ubuntu 22.04
- Fedora 38
- 古いバージョンのLinuxカーネル
これらを全て一つのブートメニューから選べます。
一台のパソコンで複数のOSを使う「デュアルブート」や「マルチブート」環境には欠かせない機能ですね。
2. 柔軟な設定変更
GRUBは設定ファイルを編集するだけで、様々なカスタマイズが可能です。
- 起動時に表示されるメニューの見た目
- デフォルトで起動するOS
- 自動起動までの待ち時間
- 起動時に渡すカーネルパラメータ
設定を変更しても、すぐにシステムに反映されます。わざわざMBRを書き換える必要がないので安全です。
3. コマンドラインインターフェース
GRUBには強力なコマンドライン環境が備わっています。
起動時に「c」キーを押すと、GRUBのコマンドプロンプトが表示され、手動でOSを起動したり、トラブルシューティングを行ったりできます。
システムが正常に起動しない時の救世主になってくれる機能です。
4. ファイルシステムの理解
GRUBは多くのファイルシステム(ext4、btrfs、XFS、FAT、NTFSなど)を直接読み取れます。
これにより、様々なパーティション構成に対応できるんですね。
5. モジュール式の設計
GRUBは必要な機能だけを読み込む「モジュール式」の設計になっています。
基本的な起動に必要な最小限のコードだけをメモリに読み込み、追加機能が必要な時だけモジュールを読み込みます。これにより、起動が速くなります。
GRUBの仕組み:起動プロセスを詳しく見る
パソコンの電源を入れてからOSが起動するまで、GRUBがどう動いているのか見ていきましょう。
ステージ1:最初の読み込み
電源を入れると、BIOS(またはUEFI)がハードディスクやSSDの最初のセクター(MBR:Master Boot Record)を読み込みます。
ここには「boot.img」という非常に小さなGRUBのコードが格納されています。サイズはわずか512バイト。
このコードの役割は、次のステージを読み込むことだけです。
ステージ1.5:追加の読み込み
boot.imgは、次に「core.img」という少し大きなプログラムを読み込みます。
このcore.imgには、ファイルシステムを理解するための基本的なモジュールが含まれています。
ステージ2:メインプログラム
core.imgが、最終的にGRUBのメインプログラムを読み込みます。
このメインプログラムが:
- ブートメニューを表示
- 設定ファイル(/boot/grub/grub.cfg)を読み込み
- ユーザーの選択を受け付け
- 選択されたOSを起動
という一連の処理を行います。
OSの起動
ユーザーがOSを選択すると、GRUBは:
- Linuxカーネルをメモリに読み込む
- initramfs(初期RAMファイルシステム)を読み込む
- カーネルに制御を渡す
これでようやくLinuxカーネルが動き始め、システムが起動します。
GRUBの設定ファイル:どこに何があるか
GRUBの設定は、主に以下のファイルやディレクトリで管理されています。
/boot/grub/grub.cfg
これがGRUBのメイン設定ファイルです。
起動時に表示されるメニューの内容、各OSの起動方法などが記述されています。
重要:このファイルは直接編集してはいけません。
grub.cfgは自動生成されるファイルなので、手動で編集しても次回の更新時に上書きされてしまいます。
/etc/default/grub
ユーザーが編集すべき設定ファイルはこちらです。
ここに記述した設定を基に、grub.cfgが自動生成されます。
主な設定項目:
# デフォルトで起動するOSの番号(0から始まる)
GRUB_DEFAULT=0
# タイムアウト時間(秒)
GRUB_TIMEOUT=10
# ブートメニューを非表示にするか
GRUB_TIMEOUT_STYLE=menu
# カーネルに渡すパラメータ
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# 画面解像度
GRUB_GFXMODE=1024x768
/etc/grub.d/
このディレクトリには、grub.cfgを生成するためのスクリプトが入っています。
00_header # 基本設定
05_debian_theme # テーマ設定(Debianベース)
10_linux # Linuxカーネルの検出
20_linux_xen # Xen仮想化環境用
30_os-prober # 他のOSの検出
40_custom # カスタムメニュー項目
カスタムメニュー項目を追加したい場合は、40_customを編集します。
GRUBの基本的な使い方:よく使う操作
実際にGRUBを使う時の基本操作を紹介します。
起動時のメニュー操作
GRUBのメニュー画面では:
- ↑↓矢印キー:メニュー項目の選択
- Enter:選択した項目で起動
- e:起動前に設定を編集(一時的な変更)
- c:GRUBコマンドラインに入る
メニューが表示されない場合は、起動時に「Shift」キー(またはEsc)を押し続けると表示されます。
一時的な起動パラメータの変更
「e」キーを押すと、選択したメニュー項目の設定を一時的に編集できます。
例えば、グラフィックの問題で起動できない場合:
- 起動したいLinuxを選択
- 「e」キーを押す
- 「linux」で始まる行を探す
- 行末に「nomodeset」を追加
- Ctrl + X で起動
この変更は一時的なもので、次回起動時には元に戻ります。
GRUBコマンドライン
「c」キーでコマンドラインに入ると、手動でOSを起動できます。
基本的なコマンド例:
# パーティションの一覧を表示
ls
# 特定のパーティションの内容を表示
ls (hd0,1)/
# ルートパーティションを設定
set root=(hd0,1)
# カーネルを指定
linux /boot/vmlinuz-5.15.0-56-generic root=/dev/sda1
# initramfsを指定
initrd /boot/initrd.img-5.15.0-56-generic
# 起動
boot
GRUBの設定変更:カスタマイズ方法
実際にGRUBをカスタマイズしてみましょう。
デフォルトの起動OSを変更する
複数のOSがある場合、いつも使うOSをデフォルトに設定できます。
設定ファイルを開く:
sudo nano /etc/default/grub
以下の行を変更:
# 0が最初のメニュー項目、1が2番目...
GRUB_DEFAULT=0
設定を反映:
sudo update-grub
再起動すると変更が適用されます。
タイムアウト時間を変更する
メニューが自動的に選択されるまでの時間を変更できます。
# 秒数を指定(0で即座に起動、-1で無制限に待機)
GRUB_TIMEOUT=5
長く設定しておくと、別のOSを選びやすくなります。
ブートメニューの背景画像を変更する
GRUBのメニュー画面に好きな画像を設定できます。
- 画像を準備(PNG、JPG、TGA形式)
- 画像を適切な場所にコピー:
sudo cp my-background.png /boot/grub/
- 設定ファイルに追加:
sudo nano /etc/default/grub
以下を追加:
GRUB_BACKGROUND="/boot/grub/my-background.png"
- 設定を更新:
sudo update-grub
起動時のメッセージを表示する
通常、Ubuntuなどでは起動中のメッセージが隠されています(”quiet splash”オプション)。
詳細なメッセージを表示したい場合:
GRUB_CMDLINE_LINUX_DEFAULT=""
または
GRUB_CMDLINE_LINUX_DEFAULT="nosplash"
これでシステムの起動プロセスが詳しく表示されるようになります。トラブルシューティング時に便利です。
他のOSの自動検出を無効にする
os-proberが他のOSを自動的に検出してメニューに追加しますが、これを無効にすることもできます。
GRUB_DISABLE_OS_PROBER=true
Windowsなど他のOSを使わなくなった場合に設定します。
メモリテストを非表示にする
デフォルトでメモリテストツールがメニューに表示されますが、不要なら非表示にできます。
sudo chmod -x /etc/grub.d/20_memtest86+
sudo update-grub
GRUBのトラブルシューティング:よくある問題と解決法
GRUBで問題が発生した時の対処方法を紹介します。
問題1:「grub rescue」画面が表示される
原因:
GRUBの設定ファイルやカーネルが見つからない場合に表示されます。
解決方法:
まず、利用可能なパーティションを確認:
grub rescue> ls
出力例:(hd0) (hd0,msdos1) (hd0,msdos5)
各パーティションの内容を確認して、Linuxがインストールされているものを探します:
grub rescue> ls (hd0,msdos1)/
grub rescue> ls (hd0,msdos5)/
「boot」ディレクトリが見つかったら:
grub rescue> set root=(hd0,msdos5)
grub rescue> set prefix=(hd0,msdos5)/boot/grub
grub rescue> insmod normal
grub rescue> normal
通常のGRUBメニューに戻ったら、Linuxを起動して再インストール:
sudo grub-install /dev/sda
sudo update-grub
問題2:Windowsが起動メニューに表示されない
原因:
os-proberが無効になっているか、Windowsを検出できていません。
解決方法:
os-proberが有効か確認:
sudo nano /etc/default/grub
以下の行があれば削除またはコメントアウト:
#GRUB_DISABLE_OS_PROBER=true
os-proberを手動実行:
sudo os-prober
sudo update-grub
問題3:起動が遅い
原因:
タイムアウト時間が長すぎる、またはサービスの起動に時間がかかっています。
解決方法:
タイムアウトを短縮:
GRUB_TIMEOUT=3
または、隠しメニューモードにして即座に起動:
GRUB_TIMEOUT=0
GRUB_TIMEOUT_STYLE=hidden
Shiftキーを押せばメニューが表示されます。
問題4:「error: file not found」エラー
原因:
カーネルやinitramfsのファイルパスが間違っています。
解決方法:
正しいカーネルファイルを確認:
ls /boot/
grub.cfgを再生成:
sudo update-grub
問題5:GRUBが全く起動しない
原因:
MBRが破損しているか、GRUBが正しくインストールされていません。
解決方法:
Live USBから起動して修復します:
- Ubuntu Live USBで起動
- ターミナルを開く
- パーティションを確認:
sudo fdisk -l
- Linuxのルートパーティションをマウント:
sudo mount /dev/sda5 /mnt
sudo mount /dev/sda1 /mnt/boot # 別パーティションの場合
- 必要なシステムディレクトリをバインド:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
- chroot環境に入る:
sudo chroot /mnt
- GRUBを再インストール:
grub-install /dev/sda
update-grub
- 終了してアンマウント:
exit
sudo umount /mnt/boot
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
- 再起動
デュアルブート環境でのGRUB活用法
WindowsとLinuxを両方使う場合のTipsを紹介します。
Windowsを先にインストールする
デュアルブート環境を構築する時は、必ずWindowsを先にインストールしてください。
Windowsのインストーラーは、他のブートローダーを無視してMBRを上書きしてしまいます。後からLinuxをインストールすれば、GRUBが両方のOSを検出してメニューに追加してくれます。
時刻のずれ問題を解決
WindowsとLinuxを併用すると、時刻がずれる問題が発生します。
原因:
- Windows:ハードウェアクロックをローカルタイムとして扱う
- Linux:ハードウェアクロックをUTCとして扱う
解決方法(Linux側で対応):
timedatectl set-local-rtc 1 --adjust-system-clock
これでLinuxもハードウェアクロックをローカルタイムとして扱うようになります。
Windowsを常に先頭に表示
grub-customizer(GUIツール)を使うと簡単です:
sudo apt install grub-customizer
または、設定ファイルで:
sudo nano /etc/grub.d/40_custom
以下を追加:
menuentry "Windows 10" {
insmod ntfs
set root=(hd0,1)
chainloader +1
}
保存後:
sudo update-grub
UEFI環境でのGRUB
最近のパソコンはUEFI(Unified Extensible Firmware Interface)を使っています。
BIOSとUEFIの違い
BIOS(旧型):
- MBRから起動
- 最大2TBまでのディスクをサポート
- セキュアブート機能なし
UEFI(新型):
- EFIパーティションから起動
- 2TB以上の大容量ディスクをサポート
- セキュアブート機能あり
- より高速な起動
Ubuntu 18.04以降は、UEFI環境に完全対応しています。
UEFI環境でのGRUBインストール
UEFI環境では、GRUBのインストール方法が少し異なります:
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
EFIパーティションは通常 /boot/efi
にマウントされています。
セキュアブートとGRUB
セキュアブートが有効な環境では、署名されたブートローダーしか起動できません。
Ubuntuなど主要なディストリビューションは、すでに署名されたGRUBを提供しているので、通常は問題ありません。
カスタムカーネルを使う場合は、MOK(Machine Owner Key)での署名が必要になることがあります。
GRUBの高度な活用:上級者向けTips
さらに深くGRUBを使いこなしたい方向けの情報です。
カスタムメニュー項目の追加
独自のメニュー項目を追加できます。
sudo nano /etc/grub.d/40_custom
例:メモリテストを追加
menuentry "Memory Test" {
linux16 /boot/memtest86+.bin
}
例:特定のカーネルパラメータで起動
menuentry "Ubuntu (Safe Graphics)" {
set root=(hd0,5)
linux /boot/vmlinuz root=/dev/sda5 nomodeset
initrd /boot/initrd.img
}
テーマのカスタマイズ
GRUBには豊富なテーマがあります。
人気のテーマをインストール:
git clone https://github.com/vinceliuice/grub2-themes.git
cd grub2-themes
sudo ./install.sh -t tela
パスワード保護
GRUBメニューの編集を制限できます:
sudo grub-mkpasswd-pbkdf2
パスワードを入力すると、ハッシュ化された文字列が生成されます。
これを /etc/grub.d/40_custom
に追加:
set superusers="admin"
password_pbkdf2 admin [生成されたハッシュ]
ネットワークブート
GRUBはPXE(Preboot Execution Environment)によるネットワークブートもサポートしています。
複数のマシンを一括管理する企業環境で活用されています。
まとめ:GRUBはLinuxの頼れる相棒
GRUB(Grand Unified Bootloader)は、Linuxシステムを起動する際の重要な役割を担うブートローダーです。
この記事のポイント:
- GRUBはOSとハードウェアをつなぐ橋渡し役
- 複数のOSを管理できるマルチブート対応
- 設定ファイル(/etc/default/grub)で柔軟にカスタマイズ可能
- トラブル時もgrub rescueモードで復旧できる
- UEFIやセキュアブートにも対応
- デュアルブート環境では必須のツール
初心者が覚えておくべきコマンド:
# 設定を反映(最重要!)
sudo update-grub
# GRUBを再インストール
sudo grub-install /dev/sda
# 現在の設定を確認
cat /etc/default/grub
GRUBは普段意識することが少ないツールですが、システムの起動を支える縁の下の力持ちです。
基本を理解しておけば、OSが起動しないトラブルにも落ち着いて対処できますし、デュアルブート環境も快適に使えるようになります。
設定をカスタマイズして、自分だけの起動メニューを作ってみるのも楽しいですよ!
コメント