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

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

はじめに

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

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

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

これはガイド付きの実験(Guided Lab)であり、学習と実践を支援するためのステップバイステップの指示を提供します。各ステップの指示に従って進めることで、実務経験を積むことができます。これまでのデータによると、この実験は初心者レベルで、完了率は 98% です。また、学習者から 100% の高評価を得ています。

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

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

GRUB2 の動作をカスタマイズするために使用する主要な設定ファイルは /etc/default/grub にあります。このファイルには、ブートメニューのタイムアウト、デフォルトで起動する OS、追加のカーネルパラメータなどを制御するキーと値のペアが含まれています。

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

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

sudo cat /etc/default/grub

以下のような出力が表示されます。具体的な値は、システムの構成によって若干異なる場合があります。

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 コマンド)を押して変更を保存します。
  • 書き込むファイル名の確認を求められるので、そのまま 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 設定ファイル(grub.cfg)に適用されていることを確認します。

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 が設定ファイルを見つけられない場合、レスキューモード(rescue mode)に移行します。

一般的なリカバリコマンドには以下があります。

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

最終的な設定確認

ソースとなる設定ファイルに基本設定が正しく保存されているか、最後に確認します。

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 設定が正しいことを保証するために特に価値のあるものです。