起動後にカーネルinodeキャッシュを埋めるためのきちんとした方法は何ですか?

起動後にカーネルinodeキャッシュを埋めるためのきちんとした方法は何ですか?

さまざまなStackExchangeサイトのさまざまな回答がこのトピックの一部をカバーしていますが、このシナリオと正確に一致するものはありません。マウントされた各標準ファイルシステムを識別し、すべてのファイルとディレクトリを繰り返してカーネルinodeキャッシュを準備する方法は?次の制約を想定します。

  • 通常の起動には影響しません。
  • 通常の起動プロセスを延長しません。
  • 基本ユーティリティまたは非常に広く使用されているユーティリティのみを使用してください。

私は私の専門知識と他の答えのアイデアを組み合わせてこの1行を作りましたが、完全に安全ではなく、珍しい文字を持つインストールターゲットをベルトするなど、さまざまな問題に直面しないため、他のシェルゴルファーがこれを改善できると確信しています。

findmnt --list --real --fstab --noheadings --output TARGET | egrep '^/' | xargs -P 0 -i bash -c 'find "{}" -xdev -type f,d,l -printf "" &>/dev/null &'

このバージョンでは、いくつかの注意事項とともに、次の手順を実行します。

  1. ツリー形式やヘッダーなしで表示される実際のFSタイプを使用して、fstab内のすべてのマウントを見つけます。これは、巡回中に異常に動作したり、RAM上で巡回が意味のない仮想FSを除外します。
  2. メモ:noneegrepを使用せずに、スワップパーティションなどのターゲットfstabエントリをスキップするきちんとした方法が見つかりません。 1回の呼び出しでfindmnt包含フィルタと除外フィルタを混在させることはできません(よりfind一般的でこれを実行できるフィルタとは異なり)、私が知っている限り、複数の呼び出しrsyncにわたってフィルタリングを分割する良い方法はありません。findmnt
  3. 他のマウント先を巡回せずに、各マウント先のすべてのディレクトリ、ファイル、またはシンボリックリンクに対して無制限の並列巡回を実行し、findコンソールノイズや起動遅延を防ぐために、バックグラウンドで可能なすべての出力を抑制して無視します。xargs ... bash ...一部(すべてではない) 珍しい文字に対する安全のために使用されます。
  4. にコマンドを入れると、/etc/rc.local最新のsystemdディストリビューションにデフォルトで含まれていなくても、そのコマンドが実行されます(存在して実行可能な場合)rc.localrc-local.serviceこのようなマイナーな作業を行うために、より多くの設定ファイルとスクリプトファイルを使用するよりもきれいに見えますが、より良い方法がありますか?

関連情報