システム単位ファイル、特にデバイス単位ファイルを追跡する方法は?私はLinuxカーネルバージョン3.18を使用しています。私のボードでは、systemdが起動した後(mypartition).deviceが実行され、rootfsを再マウントしようとしています。 systemd-analyze図に示すように、完了するのに約2秒かかります。 rootfsを再マウントするのに多くの時間(通常は数ミリ秒)がかからないので、その2秒で何をするのか知りたいです。ユニットファイルが多すぎるsystemd-analyze図をどのように理解していますか?どのユニットに別のユニットを実行させるかを知ることができますか?私のシステムで.deviceユニットファイルを見つけましたが、何も見つかりませんでした。
答え1
カーネルバージョン3.18は2014年12月にリリースされたため、かなり古いバージョンです。これは長期的にサポートされているカーネルの1つであり、このカーネルバージョンは2017年1月に「正式な」寿命が終了しますが、まだGreg Kroah-Hartmanから時々更新されることがあります。したがって、このカーネルバージョンは、特に組み込みシステムで他のオペレーティングシステムコンポーネントの寿命を表す信頼できる指標である必要はありません。
システムは何を報告しますかsystemctl --version
?
最新バージョンのsystemdでは、ファイルシステムのマウントは単位で処理されます*.mount
。特に、ルートファイルシステムのマウント単位の内容を表示するには、解釈が(オプションではなく)単位名になるように強制する必要が-.mount
あります。このコマンドを使用すると、ルートファイルシステムを含むデバイスを表すデバイス/ターゲットに基づいてマウントデバイスが自動的にソートされることを確認できます。systemctl cat -- -.mount
-.mount
After=
これらの*.device
デバイスは、カーネルによって検出され、/sys
仮想ファイルシステムおよびudev
メンテナンスデバイスノード(該当する場合はデバイスノードなしで処理されるネットワークデバイスなど)からその表現を取得するデバイスとして表示されます。
これらのユニットは通常自動的に作成されるため、通常どこでもユニットファイルを見つける*.device
ことができません。*.device
逆に、udev ルールはデバイス単位の作成に影響を与える可能性があります。たとえば、udevルールがSYSTEMD_READY=0
デバイスのプロパティを設定すると、そのプロパティが削除または変更されるまでデバイスの作成は無視されますSYSTEMD_READY=1
。man systemd.device
詳細は参照してください。
デフォルトでは、これらの*.device
ユニットはハードウェアデバイスを表すために存在し、主に他のユニットがその依存関係を定義できるようにします。デフォルトでは、デバイスユニットは他のデバイスに依存せず、定義に従ってそのデバイスが表すユーザ空間アクセス可能デバイスに「依存」します。
表示される2秒は、次の操作の組み合わせによって発生する可能性があります。
- ディスクコントローラを含むバスを検出して準備します(システムアーキテクチャに該当する場合)。
- ディスクコントローラの自己検出とリセット
- Linuxカーネルドライバがディスクコントロールを取得すると、システムファームウェアが実行した後にディスクを既知の状態にインポートするためにディスクを検出してリセットします(これには2秒かかることがあります)。リセット時に実行される広範な内部セルフテストルーチンがある可能性があります)
- ディスク上のパーティションテーブルを読み取り、識別、および処理します(Linuxカーネルは複数のパーティションテーブル形式をサポートしています。ハードウェアアーキテクチャによっては2つ以上が適している可能性があります)。