26.10. ブート中のターミナルメニューの編集
ブート時にメニューエントリーを修正し、カーネルに引数を渡すことができます。これは、メニューエントリーエディターインターフェイスを使用して行い、このインターフェイスはブートローダーメニュー内で選択したメニューエントリーで e キーを押すと開始します。Esc キーはすべての変更を破棄し、標準メニューインターフェイスを再度読み込みます。c キーは、コマンドラインインターフェイスを読み込みます。
コマンドラインインターフェイスは最も基本的な GRUB 2 インターフェイスですが、制御が最も課せられます。コマンドラインでは、関連する GRUB 2 コマンドの入力が可能で、それに続けて Enter キーを押すとそのコマンドが実行します。このインターフェイスには、コンテキストをベースにした Tab キー自動入力や行頭に移動する Ctrl+a、行末に移動する Ctrl+e など、shell と同様の高度な機能が搭載されています。さらに、矢印、Home、End、Delete のキー動作は、bash シェルでの機能と同じになります。
26.10.1. レスキューモードでの起動
レスキューモードは、便利なシングルユーザー環境を提供し、通常の起動プロセスを完了できない状況においてシステムの修復を可能にします。レスキューモードでは、システムはすべてのローカルファイルシステムのマウントと、いくつかの重要なシステムサービスの開始を試みますが、ネットワークインターフェイスをアクティブにしたり、他のユーザーによるシステムへの同時ログインを許可したりすることはしません。Red Hat Enterprise Linux 7 では、レスキューモードはシングルユーザーモードと同等であり、root
パスワードを必要とします。
- システムの起動時にレスキューモードに入るには、GRUB 2 ブート画面で e キーを押して編集します。
64 ビット IBM Power シリーズの場合は
linux
行、x86-64 BIOS ベースシステムの場合はlinux16
行、または UEFI システムの場合はlinuxefi
行の最後に以下のパラメーターを追加します。systemd.unit=rescue.target
Ctrl+a か Ctrl+e を押して行の最初または最後に移動します。システムによっては、Home と End が機能するものもあります。
1
、s
、およびsingle
という同等のパラメーターをカーネルに渡すことも可能であることに注意してください。- Ctrl+x を押して、パラメーターでシステムを起動します。
26.10.2. 緊急モードでのブート
緊急モードは、可能な限り最小限の環境を提供し、システムがレスキューモードに入れない状態でもシステムの修復を可能にします。緊急モードでは、システムは root
ファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインターフェイスのアクティブ化も行わず、限定的な必須サービスのみを起動します。Red Hat Enterprise Linux 7 では、緊急モードでは root
パスワードが必要です。
- 緊急モードに入るには、GRUB 2 ブート画面で e キーを押して編集を行います。
64 ビット IBM Power シリーズの場合は
linux
行、x86-64 BIOS ベースシステムの場合はlinux16
行、または UEFI システムの場合はlinuxefi
行の最後に以下のパラメーターを追加します。systemd.unit=emergency.target
Ctrl+a か Ctrl+e を押して行の最初または最後に移動します。システムによっては、Home と End が機能するものもあります。
emergency
および-b
という同等のパラメーターをカーネルに渡すことも可能であることに注意してください。- Ctrl+x を押して、パラメーターでシステムを起動します。
26.10.3. デバッグシェルのブート
systemd
デバッグシェルは、起動プロセスの初期段階で systemd
関連のブート問題を診断するために使用できるシェルを提供します。デバッグシェルでは、systemctl list-jobs
や systemctl list-units
などの systemctl
コマンドを使用してブート問題の原因を調べることができます。さらに、デバッグ
オプションをカーネルコマンドラインに追加して、ログメッセージの数を増やすこともできます。systemd
では、カーネルコマンドラインオプションの debug
が、systemd.log_level=debug
のショートカットになりました。
デバッグシェルコマンドの追加
このセッションでのみデバッグシェルを有効にするには、以下の手順を実行します。
- GRUB 2 ブート画面で、編集するメニューエントリーにカーソルを移動し、e キーを押して編集できるようにします。
64 ビット IBM Power シリーズの場合は
linux
行、x86-64 BIOS ベースシステムの場合はlinux16
行、または UEFI システムの場合はlinuxefi
行の最後に以下のパラメーターを追加します。systemd.debug-shell
必要に応じて、
デバッグ
オプションを追加します。Ctrl+a か Ctrl+e を押して行の最初または最後に移動します。システムによっては、Home と End が機能するものもあります。
- Ctrl+x を押して、パラメーターでシステムを起動します。
必要な場合は、systemctl enable debug-shell
コマンドで有効にして、デバッグシェルがブート時に常に起動されるよう設定できます。また、grubby
ツールを使用して GRUB 2 メニューのカーネルコマンドラインへの変更を永続的に行うこともできます。grubby
の詳細は 「grubby ツールを使用した GRUB 2 メニューの永続的な変更」 を参照してください。
デバッグシェルを使用するには認証が必要ないため、デバッグシェルを永続的に有効にすることにはセキュリティー上のリスクがあります。デバッグシェルは、デバッグセッションが終了したときに無効にしてください。
デバッグシェルへの接続
ブートプロセス中に、systemd-debug-generator
により TTY9 にデバッグシェルが設定されます。
-
Ctrl+Alt+F9 を押してデバッグシェルに接続します。仮想マシンを使用している場合は、このキーの組み合わせを送信するには、仮想化アプリケーションからのサポートが必要です。たとえば、Virtual Machine Manager を使用している場合は、メニューから
を選択します。 -
デバッグシェルには認証が必要ないため、
[root@localhost /]#
のようなプロンプトが TTY9 に表示されます。 必要な場合は、以下のようなコマンドを実行して、デバッグシェルにいることを確認します。
/]# 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
- デフォルトのシェルに戻るには、ブートが成功した場合に 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 のようなシングルユーザーモードでパスワードの再設定を行いません。single-user
モードおよび emergency
モードでの操作には、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 パスワードのリセット
- システムを起動し、BIOS 情報が表示されたときに、ブートメニューのオプションを選択して、インストールディスクからのブートを選択します。
-
Troubleshooting (トラブルシューティング)
を選択します。 -
Rescue a Red Hat Enterprise Linux System (Red Hat Enterprise Linux システムのレスキュー)
を選択します。 -
デフォルトオプションである
Continue (選択)
を選択します。暗号化されたファイルシステムが見つかった場合は、この時点で、パスフレーズを入力するよう求められます。 - シェルプロンプトが表示されるまで OK を押して、表示された情報を承認します。
以下のようにファイルシステム
root
を変更します。sh-4.2# chroot /mnt/sysimage
-
passwd
コマンドを入力し、コマンドラインに表示される指示にしたがってroot
パスワードを変更します。 時間がかかるディスクの SELinux の再ラベルを防ぐために、
autorelable
ファイルを削除します。sh-4.2# rm -f /.autorelabel
-
exit
コマンドを入力して、chroot
環境を終了します。 -
exit
コマンドを再び実行して初期化を再開し、システム起動を完了します。
rd.break を使用した root パスワードのリセット
- システムを起動し、GRUB 2 ブート画面で e キーを押して編集を行います。
rhgb
パラメーターおよびquiet
パラメーターを、最後または末前 (linux16
行、UEFI システムの場合はlinuxefi
) から削除します。Ctrl+a か Ctrl+e を押して行の最初または最後に移動します。システムによっては、Home と End が機能するものもあります。
重要rhgb
およびquiet
パラメーターは、システムメッセージを有効化するために削除する必要があります。64 ビット IBM Power シリーズの場合は
linux
行、x86-64 BIOS ベースシステムの場合はlinux16
行、または UEFI システムの場合はlinuxefi
行の最後に以下のパラメーターを追加します。rd.break enforcing=0
enforcing=0
オプションを追加すると、時間がかかる SELinux の再ラベルプロセスを省略できます。initramfs
は、Linux kernel に制御が渡される前に停止するため、root
ファイルシステムで作業を行えます。initramfs
プロンプトは、Linux 行で指定された最後のコンソールに表示されます。Ctrl+x を押して変更したパラメーターでシステムを起動します。
暗号化されたファイルシステムでは、この時点ではパスワードが必要になります。ただし、パスワードプロンプトはロギングメッセージに隠れて表示されないことがあります。Backspace キーを押してプロンプトを表示させることができます。ログメッセージを無視して、キーを放し、暗号化されたファイルシステムのパスワードを入力します。
initramfs の
initramfs
switch_root
プロンプトが表示されます。ファイルシステムが
/sysroot/
で読み取り専用でマウントされます。ファイルシステムが書き込み可能になっていないと、パスワードの変更はできません。ファイルシステムを書き込み可能で再マウントします。
switch_root:/# mount -o remount,rw /sysroot
書き込みが有効な状態でファイルシステムが再マウントされます。
以下のようにファイルシステムの
root
を変更します。switch_root:/# chroot /sysroot
プロンプトが
sh-4.2#
に変わります。passwd
コマンドを入力し、コマンドラインに表示される指示にしたがってroot
パスワードを変更します。システムが書き込み可能でないと、passwd ツールは失敗し、以下のエラーメッセージが表示されます。
Authentication token manipulation error
パスワードファイルを更新すると、SELinux セキュリティーコンテキストが正しくないファイルが作成されます。次回のシステムのブート時にすべてのファイルを再ラベルするには、以下のコマンドを入力します。
sh-4.2# touch /.autorelabel
また、手順 3 で
enforcing=0
オプションを指定した場合は、大きいディスクを再ラベルするのにかかる時間を節約するために、この手順を省略できます。ファイルシステムを読み取り専用で再マウントします。
sh-4.2# mount -o remount,ro /
-
exit
コマンドを入力して、chroot
環境を終了します。 exit
コマンドを再び実行して初期化を再開し、システム起動を完了します。暗号化されているファイルシステムの場合は、この時点でパスワードまたはパスフレーズが必要です。ただし、パスワードプロンプトはロギングメッセージに隠れて表示されないことがあります。Backspace キーを押して保持すると、プロンプトが表示されます。ログメッセージを無視して、キーを放し、暗号化されたファイルシステムのパスワードを入力します。
注記SELinux の再ラベルプロセスには長時間がかかることがあることに注意してください。このプロセスが完了すると、システムが自動的に再起動されます。
手順 3 で
enforcing=0
オプションを追加し、手順 8 でtouch /.autorelabel
コマンドを省略した場合は、以下のコマンドを入力して/etc/shadow
ファイルの SELinux セキュリティーコンテキストを復元します。~]# restorecon /etc/shadow
以下のコマンドを実行して、SELinux ポリシーの強制を再び有効にし、ポリシーの強制が有効になっていることを確認します。
~]# setenforce 1 ~]# getenforce Enforcing