2

現在、私のデータは、キャッシュディレクトリ(すべてのファイルが最初に作成または転送される場所)を持つボリュームに編成されています。その後、ボリューム上に適切なディレクトリがあり、そのサブディレクトリには、キャッシュ内のファイルにハードリンクされたファイルが含まれています。これは、同じiノード(ファイル)を複数のディレクトリで複数回ハードリンクできるようにするために行われます。

ボリュームをクリーンアップしようとすると、(キャッシュではなく)dirsを繰り返し調べ、特定の基準に基づいて、ファイルのリンクを解除します(これにより、基本的にキャッシュエントリのiノード数が1つ減ります)。最後のハードリンクを削除するときに、キャッシュエントリを直接削除する方法はありますか(つまり、カウントが2から1に減ります)。このようにして、キャッシュディレクトリ全体を手動で解析して、リンクカウントが1のiノードをクリアする必要がなくなります。

リンク解除/削除機能を実行しましたが、特定の用途が見つかりませんでした。これを内部的に処理するパージアルゴリズムはありますか?それなら、それを実装してみることができます。

これに関する助けをいただければ幸いです。迅速な返信を見越して。

4

2 に答える 2

2

これと、シェルからすべてのハードリンクを削除する方法を指示する他のいくつかの場所を見ました( find -samefile を使用し、各ファイルで remove を呼び出します)。システム経由で呼び出すこともできますが、一部の人には嫌われるかもしれません)。

于 2011-04-12T09:23:42.347 に答える
1

いいえ、すぐに使用できるものはありません。

ハードリンクのリンクを解除し、リンク数が 1 であることに気付いたときに削除を行うと便利な場合があります。その時点で inode はページ キャッシュにあるはずだからです。もちろん、これはキャッシュディレクトリ内のファイルの名前を知っていることに依存しています。

于 2011-04-12T09:54:49.803 に答える