第26章 GRUB 2 での作業

Red Hat Enterprise Linux 7 は、GNU GRand Unified Bootloader (GRUB 2) のバージョン 2 とともに配布され、ユーザーはシステム起動時にオペレーティングシステムまたはカーネルを選択できます。また GRUB 2 により、ユーザーはカーネルに引数を渡すことができます。

26.1. GRUB 2 について

GRUB 2 は、従来の BIOS ベースのマシンの /boot/grub2/grub.cfg ファイルおよび UEFI マシンの /boot/efi/EFI/redhat/grub.cfg ファイルから設定を読み取ります。このファイルにはメニュー情報が含まれています。

GRUB 2 の設定ファイルである grub.cfg はインストール中に生成されるか、/usr/sbin/grub2-mkconfig ユーティリティーを呼び出すことによって生成され、新しいカーネルがインストールされるたびに grubby によって自動的に更新されます。grub2-mkconfig を使用して手動で再生成さすると、ファイルは /etc/grub.d/ にあるテンプレートファイルと/etc/default/grub ファイル内のカスタム設定に従って生成されます。grub.cfg の編集内容は、grub2-mkconfig を使用してファイルを再生成するときに失われるため、手動による変更は /etc/default/grub にも反映するようにする必要があります。

新しいカーネルの削除や追加などの grub.cfg における通常の操作は、grubby ツール (スクリプトには new-kernel-pkg ツール) を使用して行う必要があり ます。grubby を使用してデフォルトのカーネルを変更する場合、変更内容は新しいカーネルがインストールされたときに継承されます。grubby の詳細は「grubby ツールを使用した GRUB 2 メニューの永続的な変更」 を参照してください。

この /etc/default/grub ファイルは、インストールプロセスの際に grub.cfg を作成するときに anaconda で使用される grub2-mkconfig ツールにより使用されます。たとえばブートローダーの設定を再作成する必要がある場合は、システム障害時に使用することができます。通常、最後の手段でない限り、手動で grub2-mkconfig を実行して grub.cfg ファイルを置き換えることは推奨されません。/etc/default/grub への手動の変更には、grub.cfg ファイルの再ビルドが必要な点に留意してください。

grub.cfg のメニューエントリー

grub.cfg 設定ファイルには、多くのコードスニペットやディレクティブに加えて、1 つまたは複数の menuentry ブロックが含まれています。それぞれは、単一の GRUB 2 ブートメニューエントリーを示しています。これらのブロックは、常に menuentry キーワードで始まり、タイトル、オプションのリスト、および開きの波括弧で始まり、最後は閉じの波括弧で終わります。これらのブロックは、常に menuentry キーワードで始まり、それにタイトル、オプションリスト、および中括弧が続きます。以下は、Linux カーネル 3.8.0-0.40.el7.x86_64 を使用する Red Hat Enterprise Linux 7 のサンプル menuentry ブロックの例です。

menuentry 'Red Hat Enterprise Linux Server' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c60731dc-9046-4000-9182-64bdcce08616' {
    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-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 19d9e294-65f8-4e37-8e73-d41d6daa6e58
    else
     search --no-floppy --fs-uuid --set=root 19d9e294-65f8-4e37-8e73-d41d6daa6e58
    fi
    echo  'Loading Linux 3.8.0-0.40.el7.x86_64 ...'
    linux16  /vmlinuz-3.8.0-0.40.el7.x86_64 root=/dev/mapper/rhel-root ro rd.md=0 rd.dm=0 rd.lvm.lv=rhel/swap crashkernel=auto rd.luks=0 vconsole.keymap=us rd.lvm.lv=rhel/root rhgb quiet
    echo  'Loading initial ramdisk ...'
    initrd /initramfs-3.8.0-0.40.el7.x86_64.img
}

インストール済み Linux カーネルを表す各 menuentry ブロックには、64 ビット IBM POWER シリーズには linux 、x86_64 BIOS ベースのシステムには linux16、および UEFI ベースのシステムには linuxefi が含まれます。initrd ディレクティブの後には、それぞれカーネルへのパスと initramfs イメージへのパスが指定されます。別の /boot パーティションが作成された場合、カーネルと initramfs イメージへのパスは /boot との相対パスになります。上記の例では、initrd /initramfs-3.8.0-0.40.el7.x86_64.img 行は、root ファイルシステムがマウントされるときに (カーネルパスの場合も同様) initramfs イメージが実際に /boot/initramfs-3.8.0-0.40.el7.x86_64.img に配置されていることを示しています。

linux16 /vmlinuz-kernel_version 行で指定したカーネルバージョン番号は、各 menuentry ブロックの initrd /initramfs-kernel_version.img 行で指定される initramfs イメージのバージョン番号と一致する必要があります。初期 RAM ディスクイメージの検証方法は、『Red Hat Enterprise 7 カーネル管理ガイド』の「初期 RAM ディスクイメージの検証」を参照してください。

注記

menuentry では、initrd 指示文は同じカーネルバージョンに対応する /boot/ ファイルの位置 (別のパーティションの場合、initramfs ディレクトリーに対して相対的) を指している必要があります。初期 RAM ディスクイメージを作成した以前のツール、initrdmkinitrd と呼ばれるファイルを作成したために、この指示文は initrdと呼ばれます。grub.cfg ディレクティブは、他のツールとの互換性を維持するために initrd を維持します。初期 RAM ディスクイメージを作成するために dracut ユーティリティーを使用するシステムのファイル命名の規則は、initramfs-kernel_version.img です。

Dracut の使用に関する詳細は、『Red Hat Enterprise 7 カーネル管理ガイド』を参照してください。

26.2. GRUB 2 の設定

GRUB 2 メニューへの変更は、起動時に一時的に行ったり、システムの実行中に単一システムに対して永続的に行ったり、新しい GRUB 2 設定ファイルの作成の一部として行ったりできます。

26.3. GRUB 2 メニューの一時的な変更

カーネルメニューエントリーの一時的な変更

これから実行する起動プロセスでのみカーネルパラメーターを変更するには、以下の手順を実行します。

  1. システムを起動し、GRUB 2 ブート画面で、編集するメニューエントリーにカーソルを移動し、編集のために e キーを押します。
  2. カーソルを下に移動してカーネルコマンドラインを見つけます。カーネルコマンドラインは、64 ビット IBM Power シリーズでは linux、x86-64 BIOS ベースのシステムでは linux16、または UEFI システムでは linuxefi で始まります。
  3. カーソルを行の最後に移動します。

    Ctrl+aCtrl+e を押して行の最初または最後に移動します。システムによっては、HomeEnd が機能するものもあります。

  4. 必要に応じてカーネルパラメーターを編集します。たとえば、緊急モードでシステムを実行するには、linux16 行の最後に emergency パラメーターを追加します。

    linux16   /vmlinuz-3.10.0-0.rc4.59.el7.x86_64 root=/dev/mapper/rhel-root ro rd.md=0 rd.dm=0 rd.lvm.lv=rhel/swap crashkernel=auto rd.luks=0 vconsole.keymap=us rd.lvm.lv=rhel/root rhgb quiet emergency

    システムメッセージを有効化するには、rhgbquiet のパラメーターを削除する必要があります。

    この設定は永続的なものではなく、これから実行するブートにのみ適用されます。システムでメニューエントリーの変更を永続的に行うには、grubby ツールを使用します。grubby の使用の詳細は 「GRUB 2 メニューエントリーに対する引数の追加および削除」 を参照してください。

26.4. grubby ツールを使用した GRUB 2 メニューの永続的な変更

grubby ツールは、grub.cfg ファイルから情報を読み取ったり、そのファイルに永続的な変更を行ったりするために使用できます。たとえば、GRUB 2 メニューエントリーを変更してシステム起動時にカーネルに渡す引数を指定したり、デフォルトのカーネルを変更したりできます。

Red Hat Enterprise Linux 7 では、GRUB 2 設定ファイルを指定せずに grubby を手動で呼び出すと、/etc/grub2.cfg ファイル (場所はアーキテクチャーに依存します) へのシンボリックリンクである grub.cfg がデフォルトで検索されます。このファイルが見つからない場合は、アーキテクチャー依存のデフォルトのファイルが検索されます。

デフォルトのカーネルの一覧表示

デフォルトのカーネルのファイル名を見つけるには、以下のようにコマンドを入力します。

~]# grubby --default-kernel
/boot/vmlinuz-3.10.0-229.4.2.el7.x86_64

デフォルトのカーネルのインデックス番号を見つけるには、以下のようにコマンドを入力します。

~]# grubby --default-index
0

デフォルトのブートエントリーの変更

デフォルトのカーネルとして指定されるカーネルの変更を永続的に行うには、以下のように grubby コマンドを使用します。

~]# grubby --set-default /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64

カーネルの GRUB 2 メニューエントリーの表示

すべてのカーネルメニューエントリーを一覧表示するには、以下のようにコマンドを入力します。

~]$ grubby --info=ALL

UEFI システムでは、すべての grubby コマンドは root として入力する必要があります。

特定のカーネルの GRUB 2 メニューエントリーを表示するには、以下のようにコマンドを入力します。

~]$ grubby --info /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
index=0
kernel=/boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
args="ro rd.lvm.lv=rhel/root crashkernel=auto rd.lvm.lv=rhel/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet LANG=en_US.UTF-8"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
title=Red Hat Enterprise Linux Server (3.10.0-229.4.2.el7.x86_64) 7.0 (Maipo)

タブ補完を試行して /boot/ ディレクトリー内の利用可能なカーネルを確認します。

GRUB 2 メニューエントリーに対する引数の追加および削除

この --update-kernel オプションは、--args と併用して新しい引数と --remove-arguments を追加し、既存の引数を削除する場合にメニューエントリーを更新するのに使用できます。これらのオプションは、引用符で囲まれたスペースを受け入れます。GRUB 2 メニューエントリーから引数を同時に追加および削除するコマンドは、以下の形式になります。

grubby --remove-args="argX argY" --args="argA argB" --update-kernel /boot/kernel

カーネルの GRUB 2 メニューエントリーに対して引数を追加および削除するには、以下のようにコマンドを使用します。

~]# grubby --remove-args="rhgb quiet" --args=console=ttyS0,115200 --update-kernel /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64

このコマンドにより、Red Hat グラフィカルブート引数が削除され、ブートメッセージの表示が可能になり、シリアルコンソールが追加されます。コンソール引数は行の最後に追加されるため、新しいコンソールは設定された他のすべてのコンソールよりも優先されます。

変更を確認するには、次のように --info コマンドオプションを使用します。

~]# grubby --info /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
index=0
kernel=/boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
args="ro rd.lvm.lv=rhel/root crashkernel=auto rd.lvm.lv=rhel/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us LANG=en_US.UTF-8 ttyS0,115200"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
title=Red Hat Enterprise Linux Server (3.10.0-229.4.2.el7.x86_64) 7.0 (Maipo)

同じ引数を使用したすべてのカーネルメニューの更新

すべてのカーネルメニューエントリーに同じカーネルブート引数を追加するには、以下のようにコマンドを入力します。

~]# grubby --update-kernel=ALL --args=console=ttyS0,115200

--update-kernel パラメーターには、DEFAULT またはカーネルインデックス番号のコンマ区切りリストも指定できます。

カーネル引数の変更

既存のカーネル引数の値を変更するには、引数を、必要に応じて値を変更して再び指定します。たとえば、仮想コンソールのフォントサイズを変更するには、以下のようにコマンドを使用します。

~]# grubby --args=vconsole.font=latarcyrheb-sun32 --update-kernel /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
index=0
kernel=/boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
args="ro rd.lvm.lv=rhel/root crashkernel=auto rd.lvm.lv=rhel/swap vconsole.font=latarcyrheb-sun32 vconsole.keymap=us LANG=en_US.UTF-8"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
title=Red Hat Enterprise Linux Server (3.10.0-229.4.2.el7.x86_64) 7.0 (Maipo)

その他のコマンドオプションは、grubby(8) man ページを参照してください。

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/ ディレクトリーからのスクリプトはアルファベット順に読み取られるので、名前を変更して特定のメニューエントリーの起動順を変更できます。

重要

ブート可能なカーネル一覧を表示しないようにするには、GRUB_TIMEOUT では、/etc/default/grub を 0 に設定しないでください。このように設定すると、システムが常にデフォルトのメニューエントリーで直ちに起動し、デフォルトのカーネルが起動に失敗した場合に、古いカーネルを起動することができなくなります。

代わりに、システムの起動時に GRUB 2 が起動可能なカーネルの一覧を表示しないようにするには、以下のように /etc/default/grub ファイルで GRUB_TIMEOUT_STYLE オプションを設定します。

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 ユーザーが表示できます。

~]# 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-default 2

一覧内でのメニューエントリーの場所は、ゼロで始まる数字で示されることに注意してください。したがって、上記の例では、3 番目のエントリーがロードされます。この値は、次回にインストールされるカーネルの名前で上書きされます。

システムが常に特定のメニューエントリーを使用するように強制するには、/etc/default/grub ファイルの GRUB_DEFAULT ディレクティブにメニューエントリー名をキーとして使用します。利用可能なメニューエントリーを一覧表示するには、root で以下のコマンドを実行します。

~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

ファイル名 /etc/grub2.cfggrub.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

26.5.2. メニューエントリーの編集

新しい GRUB 2 ファイルを異なるパラメーターで準備する必要がある場合は、ファイル内の GRUB_CMDLINE_LINUX キーの値を編集し /etc/default/grub ます。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

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.

このファイルは、編集またはコピーが可能です。有効なメニューエントリーには、少なくとも以下のものを含める必要があることに注意してください。

menuentry "<Title>"{
<Data>
}

26.5.4. カスタムメニューの作成

メニューエントリーの自動更新を希望しない場合は、カスタムメニューを作成できます。

重要

次に進む前に、後で変更を戻す必要に迫られた場合に備えて、/etc/grub.d/ ディレクトリーのコンテンツのバックアップを作成してください。

注記

/etc/default/grub ファイルを修正しても、カスタムメニューの作成には影響がないことに注意してください。

  1. BIOS ベースのマシンでは、/boot/grub2/grub.cfg の内容をコピーします。あるいは、UEFI マシンでは、/boot/efi/EFI/redhat/grub.cfg の内容をコピーします。grub.cfg の内容は、既存のヘッダー行の下にある /etc/grub.d/40_custom ファイルに配置します。40_custom スクリプトの実行可能な部分は、維持される必要があります。
  2. /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
    }
  3. 以下を除いて、すべてのファイルを /etc/grub.d/ ディレクトリーから削除します。

    • 00_header,
    • 40_custom,
    • 01_users (存在する場合)
    • ならびに README

      別の方法では、/etc/grub2.d/ ディレクトリーのファイルを維持したい場合は、chmod a-x <file_name> コマンドを使用して実行不可にします。

  4. 40_custom ファイル内のメニューエントリーを希望に合わせて編集、追加、削除します。
  5. 以下のように grub2-mkconfig -o コマンドを実行して grub.cfg ファイルを再構築します。

    • BIOS ベースのマシンでは、root で以下のコマンド実行します。

      ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    • UEFI ベースのマシンでは、root で以下のコマンド実行します。

      ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

26.6. パスワードを使用した GRUB 2 の保護

GRUB 2 では、以下の 2 種類のパスワード保護が選択できます。

  • メニューエントリーの修正にはパスワードが必要ですが、既存のメニューエントリーの起動には 必要ありません
  • メニューエントリーの修正にはパスワードが必要で、かつメニューエントリーのいずれかまたは複数、もしくはすべての起動にもパスワードが必要。

エントリー修正のみにパスワードを必要とする GRUB 2 の設定

GRUB 2 エントリーの修正にパスワード認証を必要とするには、以下の手順に従います。

  1. root で、grub2-setpassword コマンドを実行します。

    ~]# grub2-setpassword
  2. パスワードを入力し、確認します。

    Enter password:
    Confirm password:

この手順により、パスワードのハッシュを含む /boot/grub2/user.cfg ファイルが作成されます。このパスワードのユーザー root は、/boot/grub2/grub.cfg ファイルで定義されます。この変更により、ブート中にブートエントリーを修正する場合は、root ユーザー名とパスワードの確認が必要になります。

エントリーの修正と起動にパスワードを必要とする GRUB 2 の設定

grub2-setpassword を使用してパスワードを設定すると、権限のない修正からメニューエントリーは保護されますが、権限のない起動からは保護されません。エントリーの起動にもパスワードを必要とするには、grub2-setpassword でパスワードを設定した後に、以下の手順を実行します。

警告

GRUB 2 パスワードを忘れると、以下の手順で再設定したエントリーは起動できなくなります。

  1. /boot/grub2/grub.cfg ファイルを開きます。
  2. menuentry で始まる行を検索し、パスワード保護するブートエントリーを見つけます。
  3. --unrestricted パラメーターを削除します。以下に例を示します。

    [file contents truncated]
    menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.18.2.rt56.223.el7_2.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-c109825c-de2f-4340-a0ef-4f47d19fe4bf' {
        load_video
        set gfxpayload=keep
    [file contents truncated]
  4. ファイルを保存してから閉じます。

これでエントリーの起動にも root ユーザー名とパスワードの入力が必要になります。

注記

新しいカーネルバージョンがインストールされる際は、/boot/grub2/grub.cfg への手動の変更が残ります。ただし、grub2-mkconfig コマンドを使用して grub.cfg を再生成すると失われます。このため、パスワード保護を維持するには、grub2-mkconfig を使用した後、毎回上記の手順を実行する必要があります。

注記

/boot/grub2/grub.cfg ファイル内のすべてのメニューエントリーから --unrestricted パラメーターを削除すると、新しくインストールされたすべてのカーネルに、--unrestricted なしでメニューエントリーが作成されます。そのため、パスワードは自動的に継承されます。

Red Hat Enterprise Linux 7.2 への更新前でのパスワード設定

grub2-setpassword ツールは Red Hat Enterprise Linux 7.2 で追加され、GRUB 2 パスワード設定の標準メソッドになっています。Red Hat Enterprise Linux の以前のバージョンでは、/etc/grub.d/40_custom ファイルでブートエントリーを手動で指定し、/etc/grub.d/01_users ファイルでスーパーユーザーを指定する必要がありました。

GRUB 2 へのユーザーの追加

--unrestricted パラメーターなしでエントリーを起動するには、rootパスワードが必要です。ただし、GRUB 2 では、パスワードを提供せずにこのエントリーを起動できる root 以外のユーザーも作成できるようになります。エントリーの変更にも root パスワードが必要です。このようなユーザーの作成については、 GRUB 2マニュアルを参照してください。

26.7. GRUB 2 の再インストール

GRUB 2 の誤ったインストールやファイルの欠如、システムの破損などで引き起こされる特定の問題を解決するには、GRUB 2 の再インストールが便利な方法となる場合があります。GRUB 2 を再インストールする理由には、これらの他に以下のものがあります。

  • GRUB の以前のバージョンからのアップグレード
  • インストール済みのオペレーティングシステムを制御するために、ユーザーが GRUB 2 ブートローダーを必要としている。ただし、オペレーティングシステムのなかには独自のブートローダーとインストールされるものもあります。GRUB 2 を再インストールすることで、希望するオペレーティングシステムに制御が戻されます。
  • 別のドライブにブート情報を追加する。

26.7.1. BIOS ベースマシンへの GRUB 2 の再インストール

grub2-install コマンドを使用すると、ブート情報が更新され、不明なファイルが復元されます。ファイルは、破損していない場合のみ復元されます。

システムが正常に稼働している場合は、grub2-install device コマンドを使用して GRUB 2 を再インストールします。たとえば、sdaデバイス の場合は、以下のようになります。

~]# grub2-install /dev/sda

26.7.2. UEFI ベースマシンへの GRUB 2 の再インストール

yum reinstall grub2-efi shim コマンドを使用すると、ブート情報が更新され、不明なファイルが復元されます。ファイルは、破損していない場合のみ復元されます。

システムが正常に稼働している場合は、yum reinstall grub2-efi shim コマンドを使用して GRUB 2 を再インストールします。以下に例を示します。

~]# yum reinstall grub2-efi shim

26.7.3. GRUB 2 の再設定と再インストール

この方法ではすべての GRUB 2 設定ファイルとシステム設定が完全に削除されます。この方法は全設定をデフォルト値にリセットする場合に使用します。設定ファイルを削除し、GRUB 2 を再インストールすると、破損されたファイルと間違った設定によって引き起こされた障害が修復されます。これを行うには、root で以下の手順に従います。

  1. rm /etc/grub.d/* コマンドを実行します。
  2. rm /etc/sysconfig/grub コマンドを実行します。
  3. EFI システムのみの場合は、以下のコマンドを実行します。

    ~]# yum reinstall grub2-efi shim grub2-tools
  4. BIOS および EFI システムについては、以下のコマンドを実行します。

    ~]# yum reinstall grub2-tools
  5. 以下のように grub2-mkconfig -o コマンドを実行して grub.cfg ファイルを再構築します。

    • BIOS ベースのマシンでは、root で以下のコマンド実行します。

      ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    • UEFI ベースのマシンでは、root で以下のコマンド実行します。

      ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  6. 「GRUB 2 の再インストール」 にある手順に従い、/boot/ パーティション上の GRUB 2 を復元します。

26.8. GRUB Legacy から GRUB 2 へのアップグレード

Red Hat Enterprise Linux (RHEL) バージョン 6 を 7 へインプレースアップグレードを行う場合は、GRUB Legacy から GRUB 2 へのアップグレードは自動的に行われませんが、手動で実行できます。以下の理由から GRUB アップグレードを実行します。

  • RHEL 7 以降では、GRUB Legacy は維持されず、アップデートを受信しません。
  • GRUB Legacy/boot/ ディレクトリーなしでシステムで起動できない。
  • GRUB 2 はより機能が豊富で、信頼性に優れています。
  • GRUB 2 は、より多くのハードウェア設定、ファイルシステム、ドライブレイアウトをサポートしています。

オペレーティングシステムのインプレースアップグレード後に GRUB Legacy から GRUB 2 へアップグレード。

GRUB Legacy から GRUB 2 へのアップグレード

  1. GRUB Legacy パッケージが Red Hat Upgrade Tool によりアンインストールされていることを確認します。

    ~]# yum remove grub
    注記

    grub2 パッケージをアンインストールしても、インストールされている GRUB Legacy ブートローダーには影響しません。

  2. grub2 パッケージがインストールされていることを確認します。RHEL 7 へのアップグレード後に grub2 がシステムにない場合は、以下を実行して手動でインストールできます。

    ~]# yum install grub2
  3. EFI を使用してシステムを起動した場合は、以下のパッケージをインストールします。

    ~]# yum install grub2-efi-x64 shim-x64

GRUB 2 設定ファイルの生成

本セクションでは、GRUB 2 設定を削除せずに GRUB Legacy 設定を追加する方法を説明します。GRUB 2 が正しく機能しない場合には、この手順は GRUB Legacy 設定を維持します。

  1. 以下のオプションのいずれかを使用して、/etc/default/grub ファイルを手動で作成します。

  2. ブートローダーにより異なります。

    1. レガシー BIOS を使用してシステムを起動した場合には、GRUB 2 ファイルを /dev/device_name ディスクの /boot/grub/ ディレクトリーにインストールします。

      ~]# grub2-install --grub-setup=/bin/true /dev/device_name

      /dev/device_name を、起動可能なデバイスファイルに置き換えます。

      --grub-setup=/bin/true オプションを使用すると、古い GRUB Legacy 設定が削除されないようにします。

    2. EFI を使用してシステムを起動している場合は、shim ブートローダーのブートエントリーを作成し、BootOrder 変数を変更して、shimによってファームウェアブート GRUB 2 を設定します。

      ~]# efibootmgr -c -L 'Red Hat Enterprise Linux 7' -d /dev/device_name -p 1 -l '\EFI\redhat\shimx64.efi'

      /dev/device_name を、起動可能なデバイスファイルに置き換えます。

    警告

    設定ファイル拡張子の違いに気を付けてください。

    • .confGRUB 用です。
    • .cfgGRUB 2 用です。

    次の手順で、誤って古い GRUB 設定ファイルを上書きしないよう気を付けてください。

  3. GRUB 2 設定ファイルを生成します。

    1. システムがレガシー BIOS を使用する場合は、以下を行います。

      ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    2. システムが EFI を使用する場合は、以下を行います。

      ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    注記

    生成した GRUB 2 設定ファイルをカスタマイズするには、「GRUB 2 設定ファイルのカスタマイズ」 を参照してください。/boot/grub2/grub.cfg で直接行うのではなく、/etc/default/grub で変更を加える必要があります。それ以外の場合は、ファイルが再生成されるたびに /boot/grub2/grub.cfg の変更が失われます。

GRUB Legacy ブートローダーをインストールしたまま GRUB 2 のテスト

本セクションでは、GRUB Legacy 設定を削除せずに GRUB 2 をテストする方法を説明します。GRUB Legacy 設定は、GRUB 2 設定の検証が終わるまでそのままにします。GRUB 2 設定を安全にテストするためにも、GRUB Legacy から GRUB 2 を起動します。

注記

このセクションは、レガシー BIOS ブートにのみ適用されます。EFI の場合、古いブートローダーと新しいブートローダーの両方にブートエントリーが存在し、EFI ファームウェア設定で任意のブートエントリーを選択することで、古いレガシーの GRUB を起動できます。

  1. 新しいセクションを /boot/grub/grub.conf に追加します。

    システムに別の /boot パーティションがある場合は、以下を使用します。

    title GRUB 2 Test
    	root (hd0,0)
    	kernel /grub2/i386-pc/core.img
    	boot

    (hd0,0)GRUB Legacy ブート可能なデバイスの指定に置き換えます。

    システムに個別の /boot パーティションがない場合は、以下を使用します。

    title GRUB 2 Test
    	root (hd0,0)
    	kernel /boot/grub2/i386-pc/core.img
    	boot

    (hd0,0)GRUB Legacy ブート可能なデバイスの指定に置き換えます。

  2. システムを再起動します。
  3. GRUB Legacy メニューが表示されたら、GRUB 2 Test エントリーを選択します。
  4. GRUB 2 メニューが表示されたら、起動するカーネルを選択します。
  5. 上記がうまく機能しない場合は再起動し、次の起動時に GRUB 2 Test エントリーを選択しないでください。

BIOS を使用するシステムで GRUB Legacy ブートローダーの置き換え

GRUB 2 が正常に機能している場合は、以下を行います。

  1. GRUB Legacy ブートローダーを GRUB 2 ブートローダーに置き換えます。

    ~]# grub2-install /dev/sda
  2. 古い GRUB Legacy 設定ファイルを削除します。

    ~]# rm /boot/grub/grub.conf
  3. システムを再起動します。

    ~]# reboot

EFI を使用するシステムの GRUB Legacy の削除

GRUB 2 が正常に機能している場合は、以下を行います。

  1. /boot/efi/EFI/redhat/ ディレクトリーの内容を確認し、Legacy GRUB のみに関連する廃止されたファイルを削除します。

    ~]# rm /boot/efi/EFI/redhat/grub.efi
    ~]# rm /boot/efi/EFI/redhat/grub.conf
  2. Preupgrade Assistant ユーティリティーおよび Red Hat Upgrade Tool ユーティリティーを使用して RHEL 6 から RHEL 7 へのインプレースアップグレードを実行した場合は、.preupg 接尾辞が付いたファイルのバックアップコピーも削除します。

    ~]# rm /boot/efi/EFI/redhat/*.preupg
  3. efibootmgr コマンドを使用して、\EFI\redhat\grub.efi ファイルを参照する古いブートエントリーを見つけます。

    ~]# efibootmgr -v | grep '\\EFI\\redhat\\grub.efi'

    出力例:

    Boot0001* Linux    HD(1,GPT,542e410f-cbf2-4cce-9f5d-61c4764a5d54,0x800,0x64000)/File(\EFI\redhat\grub.efi)

    この場合のエントリー番号は 0001 です。

  4. 指定したブートエントリーを削除します。次のコマンドは、上記の例からブートエントリーを削除します。

    ~]# efibootmgr -Bb 0001

    複数のブートエントリーがある場合は、特定された古いブートエントリーをすべて削除します。

警告

アップグレードしたら、GRUB Legacy ブートローダーの GRUB 2 への手動アップグレードが正常に完了するまで、オペレーティングシステムはサポートされません。これは、メジャーリリース間でのパッケージのインストールがサポートされていないためです。RHEL 7 の場合は、RHEL 6 の GRUB Legacy とは異なり、GRUB 2 のみがサポート、開発、およびテストされています。

26.9. シリアルコンソールでの GRUB 2

本セクションでは、ディスプレイやキーボードのないマシンでのシリアル通信に GRUB 2 を設定する方法を説明します。

シリアル接続で GRUB 2 端末にアクセスするには、特定のカーネルがシリアル接続を監視するように、カーネル定義に追加オプションを追加する必要があります。

以下に例を示します。

console=ttyS0,9600n8

console=ttyS0 が使用するシリアルターミナルでは、9600 がボーレートで、n はパリティーなしで、8 は単語の長さ (ビット単位) です。たとえば、115200 のように非常に高いボーレートは、ログファイルの後のタスクに適しています。

シリアルコンソール設定の詳細は 「インストールできる外部のドキュメント」 を参照してください。

26.9.1. シングルブート用に GRUB 2 の構成

単一ブートプロセス中にのみシステムがシリアルターミナルを使用するよう設定するには、GRUB 2 ブートメニューが表示されたときに、起動したいカーネルにカーソルを移動し、e キーを押してカーネルパラメータを編集します。rhgb および quiet パラメーターを削除し、以下のように linux16 行の末尾にコンソールパラメーターを追加します。

linux16   /vmlinuz-3.10.0-0.rc4.59.el7.x86_64 root=/dev/mapper/rhel-root ro rd.md=0 rd.dm=0 rd.lvm.lv=rhel/swap crashkernel=auto rd.luks=0 vconsole.keymap=us rd.lvm.lv=rhel/root console=ttyS0,9600

この設定は永続的なものではなく、これから実行するブートにのみ適用されます。

26.9.2. 永続的な変更のための GRUB 2 の設定

システムでメニューエントリーの変更を永続的に行うには、grubby ツールを使用します。たとえば、デフォルトのカーネルのエントリーを更新するには、以下のようにコマンドを入力します。

~]# grubby --remove-args="rhgb quiet" --args=console=ttyS0,9600 --update-kernel=DEFAULT

--update-kernel パラメーターはキーワード ALL、またはカーネルインデックス番号のコンマ区切りの一覧も受け入れます。grubby の使用の詳細は 「GRUB 2 メニューエントリーに対する引数の追加および削除」 を参照してください。

26.9.3. 新しい GRUB 2 ファイルの設定

新しい GRUB 2 設定ファイルを構築する必要がある場合は、/etc/default/grub ファイルに次の 2 行を追加します。

GRUB_TERMINAL="serial"
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"

最初の行は、グラフィカルターミナルを無効にします。GRUB_TERMINAL キーを指定すると、GRUB_TERMINAL_INPUT および GRUB_TERMINAL_OUTPUT の値が上書きされることに注意してください。2 行目では、ボーレートやパリティーなどの値を使用中の環境とハードウェアに適合するように調整します。たとえば、115200 のように非常に高いボーレートは、ログファイルの後のタスクに適しています。/etc/default/grub ファイルを変更した場合は、GRUB 2 設定ファイルの更新が必要になります。

以下のように grub2-mkconfig -o コマンドを実行して grub.cfg ファイルを再構築します。

  • BIOS ベースのマシンでは、root で以下のコマンド実行します。

    ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
  • UEFI ベースのマシンでは、root で以下のコマンド実行します。

    ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

26.9.4. screen を使用したシリアルコンソールへの接続

screen ツールは、シリアルターミナルとして機能します。このツールをインストールするには、root で以下を実行します。

~]# yum install screen

シリアルコンソールを使用してマシンに接続するには、コマンドを以下のように使用します。

screen /dev/console_port baud_rate

デフォルトでは、オプションが指定されない場合、screen は標準の 9600 ボーレートを使用します。大きいボーレートを設定するには、以下のコマンドを入力します。

~]$ screen /dev/console_port 115200

console_portttyS0 または ttyUSB0 などの場合。

screen でセッションを終了するには、Ctrl+a を押して、:quit と入力し、Enter を押します。

追加オプションおよび詳細情報は、screen(1) man ページを参照してください。

26.10. ブート中のターミナルメニューの編集

ブート時にメニューエントリーを修正し、カーネルに引数を渡すことができます。これは、メニューエントリーエディターインターフェースを使用して行い、このインターフェースはブートローダーメニュー内で選択したメニューエントリーで e キーを押すと開始します。Esc キーはすべての変更を破棄し、標準メニューインターフェースを再度読み込みます。c キーは、コマンドラインインターフェースを読み込みます。

コマンドラインインターフェースは最も基本的な GRUB 2 インターフェースですが、制御が最も課せられます。コマンドラインでは、関連する GRUB 2 コマンドの入力が可能で、それに続けて Enter キーを押すとそのコマンドが実行します。このインターフェースには、コンテキストをベースにした Tab キー自動入力や行頭に移動する Ctrl+a、行末に移動する Ctrl+e など、shell と同様の高度な機能が搭載されています。さらに、矢印HomeEndDelete のキー動作は、bash シェルでの機能と同じになります。

26.10.1. レスキューモードでの起動

レスキューモードは、便利なシングルユーザー環境を提供し、通常の起動プロセスを完了できない状況においてシステムの修復を可能にします。レスキューモードでは、システムはすべてのローカルファイルシステムのマウントと、いくつかの重要なシステムサービスの開始を試みますが、ネットワークインターフェースをアクティブにしたり、他のユーザーによるシステムへの同時ログインを許可したりすることはしません。Red Hat Enterprise Linux 7 では、レスキューモードはシングルユーザーモードと同等であり、root パスワードを必要とします。

  1. システムの起動時にレスキューモードに入るには、GRUB 2 ブート画面で e キーを押して編集します。
  2. 64 ビット IBM Power シリーズの場合は linux 行、x86-64 BIOS ベースシステムの場合は linux16 行、または UEFI システムの場合は linuxefi 行の最後に以下のパラメーターを追加します。

    systemd.unit=rescue.target

    Ctrl+aCtrl+e を押して行の最初または最後に移動します。システムによっては、HomeEnd が機能するものもあります。

    1s、および single という同等のパラメーターをカーネルに渡すことも可能であることに注意してください。

  3. Ctrl+x を押して、パラメーターでシステムを起動します。

26.10.2. 緊急モードでのブート

緊急モードは、可能な限り最小限の環境を提供し、システムがレスキューモードに入れない状態でもシステムの修復を可能にします。緊急モードでは、システムは root ファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインターフェースのアクティブ化も行わず、限定的な必須サービスのみを起動します。Red Hat Enterprise Linux 7 では、緊急モードでは root パスワードが必要です。

  1. 緊急モードに入るには、GRUB 2 ブート画面で e キーを押して編集を行います。
  2. 64 ビット IBM Power シリーズの場合は linux 行、x86-64 BIOS ベースシステムの場合は linux16 行、または UEFI システムの場合は linuxefi 行の最後に以下のパラメーターを追加します。

    systemd.unit=emergency.target

    Ctrl+aCtrl+e を押して行の最初または最後に移動します。システムによっては、HomeEnd が機能するものもあります。

    emergency-b という同等のパラメーターをカーネルに渡すことも可能であることに注意してください。

  3. Ctrl+x を押して、パラメーターでシステムを起動します。

26.10.3. デバッグシェルのブート

systemd デバッグシェルは、起動プロセスの初期段階で systemd 関連のブート問題を診断するために使用できるシェルを提供します。デバッグシェルでは、systemctl list-jobs などの systemctl コマンドや systemctl list-units を使用することで、ブートの問題の原因を調べることができます。さらに、debug オプションをカーネルコマンドラインに追加して、ログメッセージの数を増やすこともできます。systemd では、カーネルコマンドラインオプション debugsystemd.log_level=debug のショートカットになりました。

デバッグシェルコマンドの追加

このセッションでのみデバッグシェルを有効にするには、以下の手順を実行します。

  1. GRUB 2 ブート画面で、編集するメニューエントリーにカーソルを移動し、e キーを押して編集できるようにします。
  2. 64 ビット IBM Power シリーズの場合は linux 行、x86-64 BIOS ベースシステムの場合は linux16 行、または UEFI システムの場合は linuxefi 行の最後に以下のパラメーターを追加します。

    systemd.debug-shell

    オプションで debug オプションを追加します。

    Ctrl+aCtrl+e を押して行の最初または最後に移動します。システムによっては、HomeEnd が機能するものもあります。

  3. Ctrl+x を押して、パラメーターでシステムを起動します。

必要な場合は、systemctl enable debug-shell コマンドを使用して有効にすることで、ブート時にデバッグシェルを起動して開始できます。また、grubby ツールを使用して GRUB 2 メニューのカーネルコマンドラインへの変更を永続的に行うこともできます。grubby の使用の詳細は、「grubby ツールを使用した GRUB 2 メニューの永続的な変更」 を参照してください。

警告

デバッグシェルを使用するには認証が必要ないため、デバッグシェルを永続的に有効にすることにはセキュリティー上のリスクがあります。デバッグシェルは、デバッグセッションが終了したときに無効にしてください。

デバッグシェルへの接続

起動プロセス中に、systemd-debug-generator は TTY9 でデバッグシェルを設定します。

  1. Ctrl+Alt+F9 を押してデバッグシェルに接続します。仮想マシンを使用している場合は、このキーの組み合わせを送信するには、仮想化アプリケーションからのサポートが必要です。たとえば、Virtual Machine Manager を使用している場合は、メニューから Send KeyCtrl+Alt+F9 を選択します。
  2. デバッグシェルには認証が必要ないため、[root@localhost /]# のようなプロンプトが TTY9 に表示されます。
  3. 必要な場合は、以下のようなコマンドを実行して、デバッグシェルにいることを確認します。

    /]# systemctl status $$
    ● debug-shell.service - Early root shell on /dev/tty9 FOR DEBUGGING ONLY
      Loaded: loaded (/usr/lib/systemd/system/debug-shell.service; disabled; vendor preset: disabled)
      Active: active (running) since Wed 2015-08-05 11:01:48 EDT; 2min ago
       Docs: man:sushell(8)
     Main PID: 450 (bash)
      CGroup: /system.slice/debug-shell.service
          ├─ 450 /bin/bash
          └─1791 systemctl status 450
  4. デフォルトのシェルに戻るには、ブートが成功した場合に Ctrl+Alt+F1 を押します。

起動時の問題を診断するために、特定の systemd ユニットは、カーネルコマンドラインで systemd.mask=unit_name を 1 回以上追加してマスクできます。ブートプロセス中に追加のプロセスを開始するには、カーネルコマンドラインに systemd.wants=unit_name を追加します。systemd-debug-generator(8) の man ページでは、これらのオプションについて説明します。

26.10.4. root パスワードの変更およびリセット

Red Hat Enterprise Linux 7 インストールでは、root パスワードを設定する必要があります。root パスワードが分からなくなった場合は、パスワードをリセットできます。ユーザーが wheel グループのメンバーである場合は、以下のように root パスワードを変更できます。

~]$ sudo passwd root

GRUB 2 では、Red Hat Enterprise Linux 6 での GRUB のようなシングルユーザモードでパスワードの再設定を行いません。emergency モードおよび single-user モードで操作するには、root パスワードが必要になりました。

root パスワードをリセットする 2 つの手順を以下に示します。

  • インストールディスクを使用した root パスワードのリセット では、GRUB 2 メニューを編集せずにシェルプロンプトにアクセスする方法について説明しています。この方法は 2 番目の手順よりも短く、推奨される方法でもあります。ブートディスクまたは通常の Red Hat Enterprise Linux 7 インストールディスクを使用できます。
  • rd.break を使用した root パスワードのリセット では、制御が initramfs から systemd に渡される前に、rd.break を使用して起動プロセスを中断します。この方法の欠点は、手順が多いことです。たとえば、GRUB 2 メニューを編集し、SELinux ファイルの再ラベル行いますが、時間がかかる可能性があります。または、SELinux 強制モードを変更し、ブート完了時に /etc/shadow/ の SELinux セキュリティーコンテキストを復元する必要があります。

インストールディスクを使用した root パスワードのリセット

  1. システムを起動し、BIOS 情報が表示されたときに、ブートメニューのオプションを選択して、インストールディスクからのブートを選択します。
  2. Troubleshooting を選択します。
  3. Rescue a Red Hat Enterprise Linux System を選択します。
  4. デフォルトオプションの Continue を選択します。暗号化されたファイルシステムが見つかった場合は、この時点で、パスフレーズを入力するよう求められます。
  5. シェルプロンプトが表示されるまで OK を押して、表示された情報を承認します。
  6. 以下のようにファイルシステム root を変更します。

    sh-4.2# chroot /mnt/sysimage
  7. passwd コマンドを入力し、コマンドラインに表示される指示にしたがって root パスワードを変更します。
  8. 時間がかかるディスクの SELinux の再ラベルを防ぐために、autorelable ファイルを削除します。

    sh-4.2# rm -f /.autorelabel
  9. exit コマンドを入力して chroot 環境を終了します。
  10. exit コマンドを再び実行して初期化を再開し、システム起動を完了します。

rd.break を使用した root パスワードのリセット

  1. システムを起動し、GRUB 2 ブート画面で e キーを押して編集を行います。
  2. rhgb および quiet パラメーターを、最後または末前、linux16 行、または UEFI システム の linuxefi から削除します。

    Ctrl+aCtrl+e を押して行の最初または最後に移動します。システムによっては、HomeEnd が機能するものもあります。

    重要

    システムメッセージを有効化するためには、rhgbquiet のパラメーターを削除する必要があります。

  3. 64 ビット IBM Power シリーズの場合は linux 行、x86-64 BIOS ベースシステムの場合は linux16 行、または UEFI システムの場合は linuxefi 行の最後に以下のパラメーターを追加します。

    rd.break enforcing=0

    enforcing=0 オプションを追加すると、時間がかかる SELinux の再ラベルプロセスを省略できます。

    initramfs は、Linux kernel に制御が渡される前に停止するため、root ファイルシステムで作業を行えます。

    initramfs プロンプトは、Linux 行で指定された最後のコンソールに表示されます。

  4. Ctrl+x を押して変更したパラメーターでシステムを起動します。

    暗号化されたファイルシステムでは、この時点ではパスワードが必要になります。ただし、パスワードプロンプトはロギングメッセージに隠れて表示されないことがあります。Backspace キーを押してプロンプトを表示させることができます。ログメッセージを無視して、キーを放し、暗号化されたファイルシステムのパスワードを入力します。

    initramfs switch_root プロンプトが表示されます。

  5. ファイルシステムが /sysroot/ で読み取り専用でマウントされます。ファイルシステムが書き込み可能になっていないと、パスワードの変更はできません。

    ファイルシステムを書き込み可能で再マウントします。

    switch_root:/# mount -o remount,rw /sysroot
  6. 書き込みが有効な状態でファイルシステムが再マウントされます。

    以下のようにファイルシステムの root を変更します。

    switch_root:/# chroot /sysroot

    プロンプトが sh-4.2# に変わります。

  7. passwd コマンドを入力し、コマンドラインに表示される指示にしたがって root パスワードを変更します。

    システムが書き込み可能でないと、passwd ツールは失敗し、以下のエラーメッセージが表示されます。

    Authentication token manipulation error
  8. パスワードファイルを更新すると、SELinux セキュリティーコンテキストが正しくないファイルが作成されます。次回のシステムのブート時にすべてのファイルを再ラベルするには、以下のコマンドを入力します。

    sh-4.2# touch /.autorelabel

    また、手順 3 で enforcing=0 オプションを指定した場合は、大きいディスクを再ラベルするのにかかる時間を節約するために、この手順を省略できます。

  9. ファイルシステムを読み取り専用で再マウントします。

    sh-4.2# mount -o remount,ro /
  10. exit コマンドを入力して chroot 環境を終了します。
  11. exit コマンドを再び実行して初期化を再開し、システム起動を完了します。

    暗号化されているファイルシステムの場合は、この時点でパスワードまたはパスフレーズが必要です。ただし、パスワードプロンプトはロギングメッセージに隠れて表示されないことがあります。Backspace キーを押して保持すると、プロンプトが表示されます。ログメッセージを無視して、キーを放し、暗号化されたファイルシステムのパスワードを入力します。

    注記

    SELinux の再ラベルプロセスには長時間がかかることがあることに注意してください。このプロセスが完了すると、システムが自動的に再起動されます。

  12. 手順 3 で /etc/shadow オプションを追加し、手順 8 で touch /.autorelabel コマンドを省略した場合は、以下のコマンドを入力して enforcing=0 ファイルの SELinux セキュリティーコンテキストを復元します。

    ~]# restorecon /etc/shadow

    以下のコマンドを実行して、SELinux ポリシーの強制を再び有効にし、ポリシーの強制が有効になっていることを確認します。

    ~]# setenforce 1
    ~]# getenforce
    Enforcing

26.11. Unified Extensible Firmware Interface (UEFI) セキュアブート

Unified Extensible Firmware Interface (UEFI) セキュアブートテクノロジーにより、ファームウェアに含まれる公開鍵のデータベースで承認された暗号化キーでシステムブートローダーが署名されているかどうかをシステムファームウェアがチェックするようになります。また、次の段階のブートローダーおよびカーネルでの署名確認により、信頼できるキーで署名されていないカーネルスペースコードの実行を阻止できます。

信頼チェーンは、次のようにファームウェアから署名済みドライバーおよびカーネルモジュールの方向で確立されます。第一段階のブートローダー shim.efi は UEFI 秘密鍵により署名されてから、認証局 (CA) により署名され、ファームウェアデータベースに保存された公開鍵により認証されます。shim.efi には、GRUB 2 ブートローダー grubx64.efi と Red Hat カーネルの両方を認証するのに使用する Red Hat 公開鍵 Red Hat Secure Boot (CA key 1) が含まれます。カーネルには、ドライバーおよびモジュールを認証する公開鍵が含まれます。

セキュアブートは、Unified Extensible Firmware Interface (UEFI) 仕様のブートパス検証コンポーネントです。この仕様は、以下を定義します。

  • 揮発性ではないストレージでの暗号で保護された UEFI 変数用のプログラミングインターフェース
  • 信頼できる X.509 root 証明書の UEFI 変数での保存方法
  • ブートローダーやドライバーなどの UEFI アプリケーションの検証
  • 既知の問題のある証明書およびアプリケーションハッシュを無効にする手順

UEFI Secure Boot は、第 2 ステージのブートローダーのインストールや削除を妨げたりせず、このような変更についてユーザーによる明示的な確認を必要としません。また、このような変更の明示的なユーザー確認を必要としません。したがって、UEFI セキュアブートはブートパスの操作を停止せず、承認されていない変更を検出するのに役立ちます。。新しいブートローダーまたはカーネルは、システムで信頼されている鍵で署名されている限り動作します。

26.11.1. Red Hat Enterprise Linux 7 での UEFI セキュアブートサポート

Red Hat Enterprise Linux 7 には UEFI セキュアブート機能が含まれているので、Red Hat Enterprise Linux 7 は UEFI セキュアブートが有効になっているシステム上でインストールし、実行できます。セキュアブートテクノロジーが有効になっている UEFI ベースのシステムでは、ロードされたすべてのドライバーが信頼できる鍵で署名されている必要があります。Red Hat が提供するすべてのドライバーは、Red Hat の秘密鍵のいずれかで署名され、カーネル内の対応する Red Hat 公開鍵によって認証されます。

Red Hat Enterprise Linux DVD では提供されていない外部構築のドライバーを読み込みたい場合は、これらのドライバーも署名されていることを確認してください。

カスタムドライバーの署名に関する情報は、『Red Hat Enterprise Linux 7 カーネル管理ガイド』の「Signing Kernel Modules for Secure Boot」を参照してください。

UEFI セキュアブートによる制限

Red Hat Enterprise Linux 7 の UEFI セキュアブートサポートは、カーネルモードコードをその署名が適切に認証された後にのみ実行するよう設計されています (制限が存在します)。

GRUB 2 モジュールの署名および検証を行うインフラストラクチャーがないため、GRUB 2 モジュールのロードは無効になります。これは、これらのロードを許可することで、セキュアブートが定義するセキュリティー境界内で信頼できないコードが実行されることがあることを意味します。代わりに、Red Hat は、すでに含まれている Red Hat Enterprise Linux 7 でサポートされるすべてのモジュールを含む署名済み GRUB 2 バイナリーを提供します。

詳細は、Red Hat ナレッジベースの記事 UEFI セキュアブートによる制約 を参照してください。

26.12. 関連資料

GRUB 2 ブートローダーに関する詳細情報は、以下のリソースを参照してください。

インストールされているドキュメント

  • /usr/share/doc/grub2-tools-version-number/: このディレクトリーには、GRUB 2 の使用および設定に関する情報が記載されています。version-number は、インストールされている GRUB 2 パッケージのバージョンに対応します。
  • info grub2: GRUB 2 情報ページにはチュートリアル、ユーザーリファレンスガイド、プログラマーリファレンスガイド、GRUB 2 とその使用方法に関する FAQ などが含まれています。
  • grubby(8): GRUB および GRUB 2 を設定するコマンドラインツールの man ページです。
  • new-kernel-pkg(8): カーネルインストールのスクリプトを記述するツールの man ページです。

インストールできる外部のドキュメント

  • /usr/share/doc/kernel-doc-kernel_version/Documentation/serial-console.txt: kernel-doc パッケージが提供するこのファイルには、シリアルコンソールに関する情報が含まれます。カーネルのドキュメントにアクセスする前に、root で以下のコマンドを実行する必要があります。

    ~]# yum install kernel-doc
  • Red Hat インストールガイド: このインストールガイドでは、インストール、用語、インターフェース、コマンドなど、GRUB 2 に関する基本的な情報を紹介しています。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。