【RHEL】OS起動トラブルから学ぶGrubの設定と復旧方法

RHEL

今回は、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」キーを押すことで、一時的にカーネルパラメータを変更できます:

  1. 起動時にGrubメニューが表示されたら「e」キーを押す
  2. linux16またはlinux行を探す
  3. 行末にパラメータを追加(例:singlerd.break
  4. 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メニューが表示される場合

  1. サーバの電源を入れる
  2. Grubメニューが表示されたら、矢印キーで起動したいカーネルを選択
  3. 選択した状態で「e」キーを押して編集モードに入る
  4. linux16またはlinuxで始まる行を探す
  5. 行の最後(rhgb quietの後など)にカーソルを移動
  6. スペースを空けて以下のパラメータを追加:
    rd.break
    

    または

    single
    
  7. Ctrl + Xキーを押して起動

方法B: Grubメニューが表示されない場合

通常、RHELではGrubメニューが非表示になっている場合があります。手動で表示する方法:

  1. サーバの電源を入れる
  2. POST画面(BIOSロゴなど)が表示されている間に以下のいずれかを試す:
    • Shiftキーを連打する
    • Escキーを連打する
    • F8キーを押す(一部のシステム)
    • Spaceキーを連打する
  3. 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: インストールメディアを使用

  1. RHELのインストールメディア(DVD/USB)からサーバを起動
  2. インストール画面で「Troubleshooting」を選択
  3. 「Rescue a Red Hat Enterprise Linux system」を選択
  4. 画面の指示に従ってレスキューモードに入る

各パラメータの詳細説明

  • 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

予防策とベストプラクティス

定期的な確認項目

  1. 設定ファイルのバックアップ
    sudo cp /etc/default/grub /etc/default/grub.$(date +%Y%m%d)
    
  2. Grub設定の整合性確認
    sudo grub2-mkconfig -o /tmp/grub.cfg.test
    
  3. ディスク容量の監視
    df -h /boot
    

安全な運用のために

  • カーネルアップデート後は必ず再起動確認
  • 複数の古いカーネルを保持する設定
  • レスキューメディアの準備

まとめ:落ち着いて対応するために

今回の体験を通じて学んだ最も重要なことは、「Grubの仕組みを理解していれば、起動トラブルが発生しても落ち着いて対応できる」ということです。

エラーが発生した瞬間は確かに焦りましたが、Grubの基本的な仕組みを理解し、適切な復旧手順を知っていることで、システムを安全に復旧させることができました。

重要なポイント

  • 事前のバックアップは必須
  • レスキューモードの使い方を覚えておく
  • 設定変更は段階的に行う
  • エラーメッセージを正確に読み取る

Grubの基本を押さえて、安心してRHEL環境を運用していただければと思います。トラブルは学習の機会でもあります。適切な知識と準備があれば、必ず解決できるはずです。

【注意】

このブログは技術に関する知識や経験を共有することを目的としており、情報の正確性に努めていますが、その内容の正確性や完全性を保証するものではありません。ブログの情報を利用する場合は、自己の責任において行動してください。ブログの内容に基づいて行った行動や決定によって生じた損害や被害について、筆者は一切の責任を負いません。

 

記事の内容の一部は、生成AIで作成しています。

RHELITナレッジ
この記事の作者
StarTeller

30歳で異業種からITエンジニアへ転身し、10年以上にわたりインフラエンジニアとして様々な現場でシステム構築・運用に携わってきました。
得意分野はLinux/Windowsのサーバー構築・運用で、ネットワークやAWSなども実務で活用しています。このブログでは、これまでの業務で培った経験を基に、日々の業務で遭遇した問題の解決方法や、システム構築の具体的な手順を解説。現場のエンジニアが実際に「困ったとき」に参照できる情報を意識して投稿していこうと思っています。
※サーバ運用費がかかっているので、広告を掲載させて頂いてます。

StarTellerをフォローする
シェアする
StarTellerをフォローする

コメント

タイトルとURLをコピーしました