26.5. GRUB 2 設定ファイルのカスタマイズ
GRUB 2 スクリプトはユーザーのコンピューターを検索して、スクリプトが見つけたオペレーティングシステムに基づくブートメニューを構築します。最新のシステムブートオプションを反映させるために、カーネルが更新されるか新規カーネルが追加されると、ブートメニューは自動的に再構築されます。
しかし、特定のエントリーを含むメニューの構築や、エントリーの特定の順番をユーザーが希望する場合もあります。GRUB 2 では基本的なブートメニューのカスタマイズが可能で、画面に表示されるものをユーザーが制御できます。
GRUB 2 は、一連のスクリプトを使用してメニューを構築します。これらは /etc/grub.d/ ディレクトリーにあります。このスクリプトは /etc/grub.d/ ディレクトリーに格納されており、以下のファイルが含まれます。
-
00_header:/etc/default/grubファイルから GRUB 2 設定を読み込みます。 -
01_users:user.cfgファイルからスーパーユーザーのパスワードを読み取ります。Red Hat Enterprise Linux 7.0 および 7.1 では、インストール中にキックスタートファイルでブートパスワードが定義された場合にのみこのファイルが作成され、含まれるパスワードはプレーンテキストになります。 -
10_linux: Red Hat Enterprise Linux のデフォルトのパーティションでカーネルを見つけます。 -
30_os-prober。別のパーティションで見つかったオペレーティングシステム用にエントリーを構築します。 -
40_custom: 追加のメニューエントリー作成に使用可能なテンプレートです。
/etc/grub.d/ ディレクトリーからのスクリプトはアルファベット順に読み取られるので、名前を変更して特定のメニューエントリーの起動順を変更できます。
ブート可能なカーネルのリストを非表示にするには、/etc/default/grub で GRUB_TIMEOUT を 0 に設定しないでください。このように設定すると、システムが常にデフォルトのメニューエントリーで直ちに起動し、デフォルトのカーネルが起動に失敗した場合に、古いカーネルを起動することができなくなります。
代わりに、システムの起動時に GRUB 2 が起動可能なカーネルのリストを表示しないようにするには、以下のように /etc/default/grub ファイルの GRUB_TIMEOUT_STYLE オプションを設定します。
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT_STYLE=hidden
システムの起動時にリストを表示する場合は、キーボードまたは他のシリアルコンソールを使用して BIOS 情報が表示されている間に英数字キーを押し続けると、GRUB 2 で GRUB 2 メニューが表示されます。
26.5.1. デフォルトのブートエントリーの変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、/etc/default/grub ファイルの GRUB_DEFAULT ディレクティブのキーは saved という単語です。これにより、/boot/grub2/grubenv にある GRUB 2 環境ファイルの saved_entry ディレクティブで指定されたカーネルを読み込むように GRUB 2 が指示されます。grub2-set-default コマンドを使用して別の GRUB 2 レコードをデフォルトにすることもできます (この結果、GRUB 2 環境ファイルが更新されます)。
デフォルトでは、saved_entry 値は、パッケージタイプ kernel の最新のインストール済みカーネルの名前に設定されます。これは UPDATEDEFAULT ディレクティブと DEFAULTKERNEL ディレクティブにより /etc/sysconfig/kernel で定義されます。このファイルは以下のように root ユーザーが表示できます。
DEFAULTKERNEL ディレクティブはデフォルトで使用するパッケージタイプを指定します。DEFAULTKERNEL がパッケージタイプ kernel に設定されている場合は、kernel-debug タイプのパッケージをインストールしても、デフォルトのカーネルは変更されません。
GRUB 2 は、 saveed_entry ディレクティブのキーとして数値を使用して、オペレーティングシステムがロードされるデフォルトの順序を変更することをサポートしています。どのオペレーティングシステムを最初に読み込むかを指定するには、その数字を grub2-set-default コマンドに渡します。以下に例を示します。
grub2-set-default 2
~]# grub2-set-default 2
リスト内でのメニューエントリーの場所は、ゼロで始まる数字で示されることに注意してください。したがって、上記の例では、3 番目のエントリーがロードされます。この値は、次回にインストールされるカーネルの名前で上書きされます。
システムが常に特定のメニューエントリーを使用するようにするには、/etc/default/grub ファイルの GRUB_DEFAULT ディレクティブにメニューエントリー名をキーとして使用します。利用可能なメニューエントリーをリスト表示するには、root で以下のコマンドを実行します。
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
ファイル名 /etc/grub2.cfg は grub.cfg ファイル (場所はアーキテクチャーに依存します) へのシンボリックリンクです。信頼性を確保するために、シンボリックリンクは本章の他の例では使用されません。ファイルに書き込む場合 (特にシステムを修復する場合) は、絶対パスを使用することが推奨されます。
/etc/default/grub への変更は、以下のように grub.cfg ファイルの再構築を必要とします。
BIOS ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
26.5.2. メニューエントリーの編集 リンクのコピーリンクがクリップボードにコピーされました!
新しい GRUB 2 ファイルを異なるパラメーターで準備する必要がある場合は、/etc/default/grub ファイルの GRUB_CMDLINE_LINUX キーの値を編集します。GRUB 2 ブートメニューに複数のパラメーターを追加する際と同様に、GRUB_CMDLINE_LINUX キーには複数のパラメーターを指定できることに注意してください。以下に例を示します。
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
console=tty0 は最初の仮想ターミナルで、console=ttyS0 は使用するシリアルターミナルです。
/etc/default/grub への変更は、以下のように grub.cfg ファイルの再構築を必要とします。
BIOS ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
26.5.3. 新規エントリーの追加 リンクのコピーリンクがクリップボードにコピーされました!
grub2-mkconfig コマンドを実行すると、GRUB 2 は /etc/grub.d/ ディレクトリーにあるファイルに基づいて Linux カーネルと他のオペレーティングシステムを探します。/etc/grub.d/10_linux スクリプトは、インストールされている Linux カーネルを同じパーティションで検索します。/etc/grub.d/30_os-prober スクリプトは、他のオペレーティングシステムを検索します。また、カーネル更新時には、メニューエントリーがブートメニューに自動的に追加されます。
/etc/grub.d/ ディレクトリー内にある 40_custom ファイルはカスタムエントリー用のテンプレートで、以下のようになっています。
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above.
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
このファイルは、編集またはコピーが可能です。有効なメニューエントリーには、少なくとも以下のものを含める必要があることに注意してください。
menuentry "<Title>"{
<Data>
}
menuentry "<Title>"{
<Data>
}
26.5.4. カスタムメニューの作成 リンクのコピーリンクがクリップボードにコピーされました!
メニューエントリーの自動更新を希望しない場合は、カスタムメニューを作成できます。
次に進む前に、後で変更を戻す必要に迫られた場合に備えて、/etc/grub.d/ ディレクトリーのコンテンツのバックアップを作成してください。
/etc/default/grub ファイルを修正しても、カスタムメニューの作成には影響がないことに注意してください。
-
BIOS ベースのマシンでは
/boot/grub2/grub.cfgのコンテンツを、UEFI マシンでは/boot/efi/EFI/redhat/grub.cfgのコンテンツをコピーします。grub.cfgのコンテンツを既存のヘッダー行の下で/etc/grub.d/40_customファイルに置きます。40_customスクリプトの実行可能な部分は、維持される必要があります。 /etc/grub.d/40_customファイルに置かれたコンテンツからカスタムメニューの作成に必要となるのは、menuentryブロックのみです。/boot/grub2/grub.cfgファイルと/boot/efi/EFI/redhat/grub.cfgファイルには、関数の仕様と他のコンテンツがmenuentryブロックの上下に含まれる可能性があります。ここまでの手順でこれらの不要な行を40_customファイルに置いた場合は、削除します。以下は、カスタムの
40_customスクリプトの例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下を除いて、すべてのファイルを
/etc/grub.d/ディレクトリーから削除します。-
00_header, -
40_custom, -
01_users(存在する場合) および
README。別の方法では、
/etc/grub2.d/ディレクトリーのファイルを維持したい場合は、chmod a-x <file_name>コマンドを実行して、実行不可にします。
-
-
40_customファイル内のメニューエントリーを希望に合わせて編集、追加、削除します。 次のように
grub2-mkconfig -oコマンドを実行して、grub.cfgファイルを再構築します。BIOS ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンでは、
rootで以下のコマンド実行します。grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow