LinuxにおけるGRUB2ブートメニューのカスタマイズ

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、Linux環境でGRUB2ブートメニューをカスタマイズする方法を学びます。GRUB2(GRand Unified Bootloader)は、コンピュータの起動時に最初に実行されるプログラムであり、Linuxカーネルをロードする役割を担っています。主要な設定ファイルである /etc/default/grub を操作し、ニーズに合わせて起動時の動作を変更する実践的な経験を積みます。

まず、デフォルトのGRUB2設定にアクセスして内容を確認します。次に、ブートメニューの表示時間を変更する GRUB_TIMEOUT や、デフォルトの起動エントリを設定する GRUB_DEFAULT といった主要なパラメータを修正します。最後に、grub2-mkconfig コマンドを使用して新しいGRUB2設定ファイルを生成し、カスタマイズが正しく適用されたことを確認する方法を学びます。

注意: LabExの仮想環境は一時的で使い捨てであるため、実際にシステムを再起動してブートメニューの変更を確認することはできません。その代わり、生成されたGRUB2ファイルを調べることで設定の変更を検証する方法を学びます。これは、システム管理者が本番環境で再起動を行う前に設定を検証するために不可欠なスキルです。

GRUB2デフォルト設定ファイル /etc/default/grub へのアクセス

このステップでは、GRUB2のメイン設定ファイルにアクセスして内容を確認する方法を学びます。GRUB2(GRand Unified Bootloader, version 2)は、ほとんどの現代的なLinuxディストリビューションでデフォルトのブートローダーとして採用されています。これはコンピュータ起動時に最初に実行されるプログラムであり、Linuxカーネルをメモリにロードしてオペレーティングシステムを起動する役割を果たします。

GRUB2の動作をカスタマイズするために操作する主要な設定ファイルは /etc/default/grub です。このファイルには、ブートメニューのタイムアウト時間、デフォルトで起動するオペレーティングシステム、その他のカーネルパラメータなどを制御するキーと値のペアが含まれています。

変更を加える前に、現在の設定を確認することが重要です。/etc/default/grubroot ユーザーが所有するシステムファイルであるため、アクセスするには sudo コマンドを使用する必要があります。ここでは cat コマンドを使用して、ターミナルにファイルの内容を表示します。

以下のコマンドを実行して、GRUB2のデフォルト設定ファイルの内容を表示してください。

sudo cat /etc/default/grub

後で比較できるように、現在のタイムアウト設定とデフォルトエントリ設定をホームディレクトリのファイルに保存しておきます。

sudo grep -E "^(GRUB_TIMEOUT|GRUB_DEFAULT)" /etc/default/grub | tee ~/grub-current-settings.txt >/dev/null

以下のような出力が表示されます。正確な値はシステムの構成によって多少異なる場合があります。

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 no_timer_check iommu=pt crash_kexec_post_notifiers=1 nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

このファイルに含まれる2つの重要なパラメータを簡単に見てみましょう。

  • GRUB_TIMEOUT: デフォルトのエントリを自動的に起動する前に、GRUB2メニューを表示しておく時間(秒単位)を決定します。
  • GRUB_DEFAULT: デフォルトで起動するオペレーティングシステムやカーネルを指定します。

次のステップでは、これらのパラメータを修正してブートメニューの動作を変更する方法を学びます。

GRUB_TIMEOUT および GRUB_DEFAULT パラメータの修正

このステップでは、GRUB2設定ファイルを修正してブートメニューの動作を変更します。具体的には、メニューのタイムアウト時間を延長し、特定のデフォルト起動エントリを設定します。/etc/default/grub ファイルを編集するために、シンプルで直感的なコマンドラインテキストエディタである nano を使用します。これはシステムファイルであるため、編集に必要な権限を得るために sudo を使用する必要があります。

まず、sudo 権限で nano を使用してファイルを開きます。

sudo nano /etc/default/grub

nano エディタが開き、ファイルの内容が表示されます。ここで、以下の2つの変更を行います。

  1. GRUB_TIMEOUT 値の変更: GRUB_TIMEOUT で始まる行を探します。おそらく 1 に設定されています。矢印キーを使用してカーソルをその行に移動し、値を 1 から 15 に変更します。これにより、GRUB2メニューは自動起動するまで15秒間待機するようになります。

    変更後の行は以下のようになります。

    GRUB_TIMEOUT=15
    
  2. GRUB_DEFAULT パラメータの変更: GRUB_DEFAULT で始まる行を探します。値は saved になっているかもしれません。この値を 0 に変更します。GRUB_DEFAULT=0 を設定すると、GRUB2はメニューリストの最初のエントリを自動的に起動するようになります(リストは0から始まるインデックスであるため、0 が最初のエントリです)。

    変更後の行は以下のようになります。

    GRUB_DEFAULT=0
    

変更が完了したら、ファイルを保存して nano を終了します。

  • Ctrl + O を押して(「Write Out」コマンド)、変更を保存します。
  • nano が保存するファイル名の確認を求めてくるので、そのまま Enter を押します。
  • Ctrl + X を押して nano エディタを終了し、シェルプロンプトに戻ります。

これでGRUB2のデフォルト設定の修正が完了しました。次のステップでは、これらの変更を適用します。

GRUB2設定変更の適用と検証

このステップでは、前のステップで行った設定変更を適用し、GRUB2が正しく設定されたことを検証する方法を学びます。grub2-mkconfig コマンドを使用して、修正内容に基づいた新しい設定ファイルを生成します。

新しいGRUB2設定の生成

/etc/default/grub ファイルを修正したので、新しいGRUB2設定ファイルを生成して変更を適用する必要があります。grub2-mkconfig コマンドは、/etc/default/grub の設定と /etc/grub.d/ 内のスクリプトを読み込み、最終的なGRUB2設定を作成します。

以下のコマンドを実行して、新しい設定を生成してください。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

以下のような出力が表示されるはずです。

Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

このコマンドはシステム内の利用可能なカーネルをスキャンし、設定値を読み取って、最終的なGRUB2メニュー設定を作成します。

設定変更の検証

変更がGRUB2設定に正しく適用されたかを確認しましょう。まず、修正した設定が /etc/default/grub ファイルに反映されているかを確認します。

sudo grep -E "(GRUB_TIMEOUT|GRUB_DEFAULT)" /etc/default/grub

修正した値が表示されるはずです。

GRUB_TIMEOUT=15
GRUB_DEFAULT=0

次に、これらの設定が生成されたGRUB2設定ファイルに適用されているかを確認します。

sudo grep -E "(timeout|default)" /boot/grub2/grub.cfg | head -5

これにより、実際のGRUB2設定ファイル内で設定がどのように表示されているかを確認できます。

設定のバックアップ作成

変更を加える前に、重要な設定ファイルのバックアップを作成しておくことは常に良い習慣です。

sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup

これにより、必要に応じて復元できるバックアップコピーが作成されます。

GRUB2設定のトラブルシューティングと検証

この最後のステップでは、GRUB2設定の基本的なトラブルシューティング手法を学び、変更内容を検証する方法を理解します。これらのスキルは、本番環境で再起動を行う前にGRUB2の修正が正しく機能することを確認する必要があるシステム管理者にとって非常に重要です。

GRUB2設定の構文チェック

組み込みの構文チェッカーを使用して、GRUB2設定に構文エラーがないかを確認します。

sudo grub2-script-check /boot/grub2/grub.cfg

エラーがない場合、このコマンドは何も出力せずに終了します。構文エラーがある場合は行番号とともに表示されるため、問題の特定と修正に役立ちます。

GRUB2ディレクトリ構造の理解

GRUB2設定ディレクトリの構造を調べて、仕組みを理解しましょう。このディレクトリへのアクセスにはroot権限が必要です。

sudo ls -la /etc/grub.d/

これにより、GRUB2メニューの各部分を生成するすべてのスクリプトが表示されます。各スクリプトには実行順序を決定する番号のプレフィックスが付いています。以下のような様々なスクリプトが見つかるはずです。

  • 00_header: 基本的なGRUB2設定
  • 00_tuned: Tuned固有の設定
  • 01_users: ユーザー設定
  • 10_linux: Linuxカーネルの検索と追加
  • 20_linux_xen: Xenハイパーバイザーのサポート
  • 30_os-prober: 他のオペレーティングシステムの検索
  • 40_custom: ユーザー定義のメニューエントリ

実際のスクリプトは、システムの構成やインストールされているパッケージによって異なる場合があります。

利用可能なブートエントリの表示

生成された設定で利用可能なブートエントリを確認しましょう。

sudo grep "menuentry" /boot/grub2/grub.cfg | head -10

このコマンドは、メニューエントリの参照と実際のメニューエントリを表示します。出力には、設定変数(menuentry_id_option など)と実際のブートメニューエントリの両方が含まれる場合があります。完全なメニューエントリ定義を含む行を探してください。

タイムアウトとデフォルト設定の確認

タイムアウトとデフォルト設定が正しく構成されているかを確認します。

sudo grep -E "set timeout|set default" /boot/grub2/grub.cfg

設定ファイル内に複数のタイムアウトおよびデフォルト設定が表示されます。これは、GRUB2が状況に応じて異なるタイムアウト値を使用するため、正常な動作です。

  • メインのタイムアウト(設定通り15秒)
  • 特殊な状況下での条件付きタイムアウト
  • 異なるタイムアウトスタイル(メニュー、非表示)

確認すべき重要な設定は以下の通りです。

  • set default="0" - 最初のエントリをデフォルトに設定
  • set timeout=15 - メインメニューのタイムアウトを15秒に設定

GRUB2リカバリについて

GRUB2のリカバリを理解することは、起動トラブルの解決に不可欠です。緊急時には以下の操作が可能です。

  1. GRUB2コマンドラインへのアクセス: GRUB2メニューで c を押してコマンドラインモードに入る
  2. ブートエントリの編集: 起動前に e を押してブートエントリを編集する
  3. レスキューモードの使用: GRUB2が設定を見つけられない場合、レスキューモードに移行する

一般的なリカバリコマンドは以下の通りです。

  • ls: 利用可能なパーティションとファイルを表示
  • set root=(hd0,1): ルートパーティションを設定
  • linux /boot/vmlinuz root=/dev/sda1: カーネルをロード
  • boot: 起動プロセスを開始

最終的な設定検証

最後に、GRUB2設定全体を最終確認します。

sudo cat /etc/default/grub | grep -E "(TIMEOUT|DEFAULT)"

これにより、基本的な設定がソース設定ファイルに正しく保存されていることが確認できます。

達成したこと:

  • GRUB2のタイムアウトとデフォルト起動設定の変更
  • grub2-mkconfig を使用した設定変更の適用
  • GRUB2設定の検証およびトラブルシューティング方法の習得
  • 重要なブートファイルのバックアップ手順の作成
  • GRUB2のディレクトリ構造とリカバリオプションの理解
  • システム再起動前に設定を検証するスキルの習得

これで、GRUB2設定は15秒のタイムアウトと最初のエントリをデフォルトとする設定に正しくカスタマイズされました。本番環境では、これらの変更は次回のシステム再起動時に反映され、よりユーザーフレンドリーな起動体験を提供します。

まとめ

この包括的な実験を通じて、GRUB2ブートローダーのカスタマイズとトラブルシューティングに関する実践的な経験を積みました。まずデフォルトのGRUB2設定を確認し、GRUB_TIMEOUTGRUB_DEFAULT などの主要パラメータを修正してブートメニューの動作をカスタマイズしました。また、grub2-mkconfig コマンドを使用して変更を適用し、修正が正しく実装されたことを検証する方法を学びました。

習得した主なスキルには、GRUB2設定構造の理解、/etc/default/grub ファイルの安全な修正、設定変更の適切な適用、および適切な検証とバックアップ手順の実施が含まれます。さらに、構文チェック、設定の検証、およびシステム管理者にとって不可欠なGRUB2リカバリオプションの理解など、重要なトラブルシューティング手法も学びました。

この実験では、システム管理者が実環境で必要とする実践的なスキル、特に本番システムに適用する前にGRUB2設定を検証する能力を重視しました。構文検証のための grub2-script-check コマンドや、変更が生成された設定ファイルに正しく適用されたことを確認するための様々な grep コマンドの使用方法を学びました。

これらのスキルにより、エンタープライズLinux環境において、ブート設定のシナリオに自信を持って対応し、起動関連の問題を効果的にトラブルシューティングできるようになります。練習した検証手法は、本番システムを再起動する前にGRUB2設定が正しいことを確認するために非常に価値があります。