今回は、RHELでのGrub(Grand Unified Bootloader)について、実際の起動トラブル体験を交えながら詳しく解説していきます。私自身、システムが起動しなくなった際にGrubの重要性を痛感し、その仕組みを深く学ぶきっかけとなりました。
この記事では、Grubの基本から実践的なトラブルシューティングまでを分かりやすく説明します。
Grubとは何か?なぜ重要なのか
Grub(Grand Unified Bootloader)は、Linuxシステムにおけるブートローダーの一つです。コンピューターの電源を入れた際に、オペレーティングシステムを起動させる重要な役割を担っています。
Grubの主な機能
- カーネルの選択と起動
- 起動時パラメータの設定
- 複数OSの管理(デュアルブート)
- 緊急時の復旧オプション提供
私の体験談:起動エラーとの遭遇
ある日、システムを起動しようとした際に、以下のようなエラーメッセージが表示されました:
error: no such partition
grub rescue>
この瞬間、「システムが完全に壊れてしまった」と焦りました。しかし、この経験がGrubの仕組みを理解する貴重な機会となったのです。
Grub設定ファイルの基本と編集方法
RHEL7以降の設定ファイル構造
RHELでは、主に以下の設定ファイルが重要です:
主要設定ファイル
/etc/default/grub
– Grubの基本設定/boot/grub2/grub.cfg
– 実際の設定ファイル(直接編集禁止)/etc/grub.d/
– 設定生成用スクリプト
安全な編集手順
重要な注意点: Grub設定を変更する前は、必ずシステムのバックアップを取得してください。
# 1. 設定ファイルのバックアップ
sudo cp /etc/default/grub /etc/default/grub.backup
# 2. 設定ファイルの編集
sudo vi /etc/default/grub
# 3. 設定の反映
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
カーネルパラメータの設定・変更方法
一時的なパラメータ変更(緊急時)
起動時にGrubメニューで「e」キーを押すことで、一時的にカーネルパラメータを変更できます:
- 起動時にGrubメニューが表示されたら「e」キーを押す
linux16
またはlinux
行を探す- 行末にパラメータを追加(例:
single
、rd.break
) Ctrl+X
で起動
永続的なパラメータ変更
/etc/default/grub
ファイルのGRUB_CMDLINE_LINUX
行を編集します:
# 例:静かな起動とネットワーク設定
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0"
RHEL7からRHEL8/9への移行時の変更点
主な変更点
RHEL7以前
- Grub Legacy使用
- 設定ファイル:
/boot/grub/grub.conf
RHEL8/9
- Grub2使用
- 設定ファイル:
/boot/grub2/grub.cfg
- BLS(Boot Loader Specification)対応
移行時の注意点
# RHEL8/9でのBLS確認
sudo grubby --info=ALL
# BLS設定の有効/無効確認
grep GRUB_ENABLE_BLSCFG /etc/default/grub
Grubトラブルシューティングと復旧方法
レスキューモードからの復旧手順
私が実際に行った復旧手順をご紹介します:
1. レスキューモードでの起動
サーバ起動時にレスキューモードに入る方法は複数あります:
方法A: Grubメニューが表示される場合
- サーバの電源を入れる
- Grubメニューが表示されたら、矢印キーで起動したいカーネルを選択
- 選択した状態で「e」キーを押して編集モードに入る
linux16
またはlinux
で始まる行を探す- 行の最後(
rhgb quiet
の後など)にカーソルを移動 - スペースを空けて以下のパラメータを追加:
rd.break
または
single
Ctrl + X
キーを押して起動
方法B: Grubメニューが表示されない場合
通常、RHELではGrubメニューが非表示になっている場合があります。手動で表示する方法:
- サーバの電源を入れる
- POST画面(BIOSロゴなど)が表示されている間に以下のいずれかを試す:
Shift
キーを連打するEsc
キーを連打するF8
キーを押す(一部のシステム)Space
キーを連打する
- Grubメニューが表示されたら、上記の方法Aを実行
永続的にGrubメニューを表示させる設定 もし頻繁にGrubメニューを使用する場合は、設定ファイルで常に表示するよう変更できます:
# /etc/default/grub を編集
sudo vi /etc/default/grub
# 以下の行を変更または追加
GRUB_TIMEOUT=5 # 5秒間メニューを表示
GRUB_TIMEOUT_STYLE=menu # メニュー形式で表示
# 設定を反映
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
方法C: インストールメディアを使用
- RHELのインストールメディア(DVD/USB)からサーバを起動
- インストール画面で「Troubleshooting」を選択
- 「Rescue a Red Hat Enterprise Linux system」を選択
- 画面の指示に従ってレスキューモードに入る
各パラメータの詳細説明
rd.break
: initramfs段階で停止し、緊急シェルに入るsingle
: シングルユーザーモードで起動(rootパスワードが必要)emergency
: 最小限のシステムで起動rescue
: レスキューモードで起動
2. ファイルシステムのマウント
# ルートファイルシステムの確認
lsblk
# ルートパーティションのマウント
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot
# chrootでシステム環境に入る
chroot /mnt/sysimage
3. Grubの再インストール
# Grub2の再インストール
grub2-install /dev/sda
# 設定ファイルの再生成
grub2-mkconfig -o /boot/grub2/grub.cfg
よくあるエラーと対処法
「grub rescue>」プロンプトが表示される場合
# 利用可能なパーティションを確認
grub rescue> ls
# ルートパーティションを設定
grub rescue> set root=(hd0,msdos2)
# 正常なGrubメニューを読み込み
grub rescue> insmod normal
grub rescue> normal
予防策とベストプラクティス
定期的な確認項目
- 設定ファイルのバックアップ
sudo cp /etc/default/grub /etc/default/grub.$(date +%Y%m%d)
- Grub設定の整合性確認
sudo grub2-mkconfig -o /tmp/grub.cfg.test
- ディスク容量の監視
df -h /boot
安全な運用のために
- カーネルアップデート後は必ず再起動確認
- 複数の古いカーネルを保持する設定
- レスキューメディアの準備
まとめ:落ち着いて対応するために
今回の体験を通じて学んだ最も重要なことは、「Grubの仕組みを理解していれば、起動トラブルが発生しても落ち着いて対応できる」ということです。
エラーが発生した瞬間は確かに焦りましたが、Grubの基本的な仕組みを理解し、適切な復旧手順を知っていることで、システムを安全に復旧させることができました。
重要なポイント
- 事前のバックアップは必須
- レスキューモードの使い方を覚えておく
- 設定変更は段階的に行う
- エラーメッセージを正確に読み取る
Grubの基本を押さえて、安心してRHEL環境を運用していただければと思います。トラブルは学習の機会でもあります。適切な知識と準備があれば、必ず解決できるはずです。
コメント