web-dev-qa-db-ja.com

initramfs systemdサービスの内省-どのように?

バックグラウンド

  • 私はArchLinuxを実行しており、systemdバイナリを使用して、initramfsの一部として必要なサービス(ルートfsの復号化、マウントなど)を開始しています。
  • この段階の一部としてどのsystemdユニットがいつ開始されるかを調べたいと思います。
  • systemd-analyze plotは、スイッチルートが実行された後のすべてのユニットのタイムグラフのみを表示します。
  • スイッチルートユニット(定義上、initrdブートシーケンスの最後のユニット)は次のように述べています。

    [Service]
    # ...
    ExecStart=/usr/bin/systemctl --no-block --force switch-root /sysroot
    # ...
    
  • Switch-root systemコマンドのsystemctlのマニュアルページには、次のように書かれています。

    switch-root ROOT [INIT]

    別のルートディレクトリに切り替えて、その下にある新しいシステムマネージャプロセスを実行します。これは、初期RAMディスク( "initrd")での使用を目的としており、initrdのシステムマネージャープロセス(別名 "init"プロセス)からロードされるメインシステムマネージャープロセスに移行します。実際のホストボリューム。この呼び出しには2つの引数が必要です。新しいルートディレクトリになるディレクトリと、その下にある新しいシステムマネージャバイナリへのパスで、PID 1として実行されます。後者が省略されているか、空の文字列の場合、systemdバイナリは自動的に検索され、initとして使用されます。システムマネージャのパスが省略されている場合、空の文字列に等しいか、systemdバイナリへのパスと同じである場合、initrdのシステムマネージャプロセスの状態がに渡されます。メインシステムマネージャー。これにより、initrdブートフェーズに関連するサービスの状態を後で調べることができます。

    そして、initrdsの問題については静かです...

質問

起動後、上記のようにinitrd起動フェーズに関連するサービスの状態を内省したり、実行されたユニットを検出したりするにはどうすればよいですか(一部は動的に生成されます)。

6
Benjamin

https://freedesktop.org/wiki/Software/systemd/Debugging/journalctl -bを使用して起動時のログメッセージを表示することをお勧めします。

3
ptman