Show Table of Contents
25.5. GRUB 2 設定ファイルのカスタマイズ
GRUB 2 スクリプトはユーザーのコンピューターを検索して、スクリプトが見つけたオペレーティングシステムに基づくブートメニューを構築します。最新のシステムブートオプションを反映させるために、カーネルが更新されるか新規カーネルが追加されると、ブートメニューは自動的に再構築されます。
しかし、特定のエントリーを含むメニューの構築や、エントリーの特定の順番をユーザーが希望する場合もあります。GRUB 2 では基本的なブートメニューのカスタマイズが可能で、画面に表示されるものをユーザーが制御できます。
GRUB 2 は、メニューの構築に一連のスクリプトを使用します。これらは、
/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 はシステム起動時に起動可能なカーネル一覧を表示しません。起動時にこの一覧を表示するようにするには、BIOS 情報が表示されている間に英数字のいずれかのキーを押し続けます。すると、GRUB 2 は GRUB メニューを表示します。
25.5.1. デフォルトのブートエントリーの変更
デフォルトでは、
/etc/default/grub ファイルのGRUB_DEFAULT ディレクティブのキーは saved という単語です。これにより、/boot/grub2/grubenv にある GRUB 2 環境ファイルの saved_entry ディレクティブで指定されたカーネルを GRUB 2 がロードするよう指示されます。grub2-set-default コマンドを使って別の GRUB レコードをデフォルトにすることもできます (この結果、GRUB 2 環境ファイルが更新されます)。
デフォルトでは、
saved_entry 値がパッケージタイプ kernel の最新インストール済みカーネルの名前に設定されます。これは UPDATEDEFAULT ディレクティブと DEFAULTKERNEL ディレクティブにより /etc/sysconfig/kernel で定義されます。このファイルは以下のように root ユーザーが表示できます。
~]# cat /etc/sysconfig/kernel
# UPDATEDEFAULT specifies if new-kernel-pkg should make
# new kernels the default
UPDATEDEFAULT=yes
# DEFAULTKERNEL specifies the default kernel package type
DEFAULTKERNEL=kernel
DEFAULTKERNEL ディレクティブはデフォルトで使用するパッケージタイプを指定します。DEFAULTKERNEL がパッケージタイプ kernel に設定されている場合は、タイプ kernel-debug のパッケージをインストールしても、デフォルトのカーネルは変更されません。
GRUB 2 では、オペレーティングシステムが読み込まれるデフォルトの順番を
saved_entry ディレクティブのキーに数値を使うことで変更できます。どのオペレーティングシステムを最初に読み込むかを指定するには、その数字を grub2-set-default コマンドに渡します。例を示します。
~]#grub2-set-default2
一覧内でのメニューエントリーの場所は、ゼロで始まる数字で示されることに注意してください。このため、上記の例では、3 番目のエントリーが読み込まれます。この値は、次回にインストールされるカーネルの名前で上書きされます。
システムが常に特定のメニューエントリーを使用するようにするには、
/etc/default/grub ファイルの GRUB_DEFAULT ディレクティブにメニューエントリー名をキーとして使用します。利用可能なメニューエントリーを一覧表示するには、root で以下のコマンドを実行します。
~]# 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 - UEFI ベースのマシンでは、
rootで以下のコマンド発行します。~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
25.5.2. メニューエントリーの編集
新しい GRUB 2 ファイルを異なるパラメーターで準備する必要がある場合は、
/etc/default/grub ファイルの GRUB_CMDLINE_LINUX キーの値を編集します。GRUB 2 ブートメニューでパラメーターを追加する場合と同様に、GRUB_CMDLINE_LINUX キーには複数のパラメーターを指定できます。例を以下に示します。 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 - UEFI ベースのマシンでは、
rootで以下のコマンド発行します。~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
25.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.
このファイルは、編集またはコピーが可能です。有効なメニューエントリーには、少なくとも以下のものを含める必要があることに注意してください。
menuentry "<Title>"{ <Data> }
25.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スクリプトの例です。#!/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 'First custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.10.0-67.el7.x86_64-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-3.10.0-67.el7.x86_64 root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet LANG=en_US.UTF-8 initrd16 /initramfs-3.10.0-67.el7.x86_64.img } menuentry 'Second custom entry' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c-advanced-32782dd0-4b47-4d56-a740-2076ab5e5976' { load_video insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7885bba1-8aa7-4e5d-a7ad-821f4f52170a else search --no-floppy --fs-uuid --set=root 7885bba1-8aa7-4e5d-a7ad-821f4f52170a fi linux16 /vmlinuz-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap vconsole.keymap=us crashkernel=auto rhgb quiet initrd16 /initramfs-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c.img }- 以下を除いて、すべてのファイルを
/etc/grub.d/ディレクトリーから削除します。00_header40_custom01_users(存在する場合)README
別の方法では、/etc/grub2.d/ディレクトリーのファイルを維持したい場合、chmodコマンドを実行してこれらのファイルを実行可能ファイルにします。a-x<file_name> 40_customファイル内のメニューエントリーを希望に合わせて編集、追加、削除します。- 以下のように
grub2-mkconfigコマンドを実行して、-ogrub.cfgファイルを再構築します。- BIOS ベースのマシンでは、
rootで以下のコマンド発行します。~]#
grub2-mkconfig -o /boot/grub2/grub.cfg - UEFI ベースのマシンでは、
rootで以下のコマンド発行します。~]#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.