ファイル/ディレクトリアドレスを指定するためにインデックス(アノード番号)を使用するツリー操作(検索)

ファイル/ディレクトリアドレスを指定するためにインデックス(アノード番号)を使用するツリー操作(検索)

(「一般的なUnix / Linux」ソリューションが必要なため、オペレーティングシステムの言及は削除されました。)

処置:「検索モード」でファイル/ディレクトリに対して操作を実行しますが、プロセス中にファイル/ディレクトリのパス名が変更される可能性があるとします。

「find」の一般的な問題は、項目の名前が変更されると、findがエンティティの数をカウントしようとし、そのエンティティが見つからないと報告することです。インデックスを使用して動作する場合、これらの問題は存在しません(リバースルックアップ、inode - >パス名、および追加の名前の一致を犠牲にして)。

現在のテーマファイル/ディレクトリのリストを取得し、そのインデックスをインポートしてから、「find path -inum index」などのものを使用して、ファイルを操作する現在の名前を取得します。その結果、スクリプトはやや恥ずかしいようです。

キャッシュされたパス名の代わりにインデックスを使用して機能できる「find」の複製など、よりエレガントな方法はありますか?

答え1

文脈上「インデックス」と書くと、実際にはインデックスノード。インデックスを意味する場合は、ディレクトリがインデックスを意味することに注意してください。いいえ「インデックス3のファイルが欲しい」と言うことができる明確に定義された順序のファイルのリストで構成されています。ディレクトリは名前で索引付けされます。 「I want files names」と言いますfoo。ディレクトリ内のファイルの順序はいつでも変更できます。

inodeを意味すると仮定すると、inodeを介してファイルにアクセスできません。これは意図的に設計されています。ファイルパスは、権限が適用される方法です。 inodeを介してファイルにアクセスすると、そのファイルを含むディレクトリに対するすべての権限チェックは無視されます。また、APIが要求するため、inode番号を虚空から取得するのではなく、設計上inodeの概念を持つファイルシステムでのみ可能です。したがって、ファイルのinodeだけを知っている場合は、名前が見つかるまで検索することがファイルを操作する唯一の方法です。

inodeでファイルを見つける方法があっても問題は解決せず、わずかに移動するだけです。findファイルを見つけたら、操作を実行する前に名前を変更すると、ファイルが透明になります。ただし、ファイルを削除して同じinodeを使用して別のファイルを作成すると、find間違ったファイルにアクセスする可能性があります。

ファイルAPIはディレクトリツリーのアトミックスナップショットを取得できません。問題に対する解決策はいくつかあります。お客様に適したソリューションはユースケースによって異なります。

  • ジョブが実行されているツリーに対する修正を処理できることを確認してください。
  • ジョブの実行中にディレクトリツリーを変更するすべてのアプリケーションが一時停止していることを確認します。
  • 低レベルのAPIを使用してスナップショットを撮り(読み取り専用)、スナップショットを操作します。一部のファイルシステム(zfsやbtrfsなど)は、ボリュームタイプ(LVMなど)と同様にこれを行うことができます。

関連情報