Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

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

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

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

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

    systemd.debug-shell

    必要に応じて、デバッグオプションを追加します。

    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 ページを参照してください。