ファイルに関する情報をディレクトリに直接ではなくiノードに保存することは、追加のオーバーヘッドの価値があるのではないかと思います。オーバーヘッドを過大評価したり、重要なことを見落としたりしているのは良いことかもしれませんが、それが私が求めている理由です。
ハードリンクには「iノード」のようなものが必要だと思いますが、オーバーヘッドが私が思うほど大きい場合は、何らかの理由でそれが正当化されるのではないかと思います。
- バックアップにハードリンクを使用するのは賢明ですが、通常の操作の効率と比較した場合、バックアップの効率は十分に重要ではありません。
- ハードリンクの速度やサイズのペナルティがないことは、実際には問題になる可能性があります。この利点は、少数のファイルにのみ当てはまるからです。 すべてのファイルへのアクセス中にハードリンクを利用する オーバーヘッドに苦しむ
-
bunzip2
のような同じ名前のバイナリのいくつかのためにスペースを節約する およびbcat
無視できる
iノード/ハードリンクが悪いまたは役に立たないと言っているわけではありませんが、余分な間接参照のコストを正当化できますか(キャッシングは確かに大いに役立ちますが、特効薬ではありません)?
承認された回答:
ハードリンクは重要ではありません。それらはiノードを持つ理由ではありません。これらは副産物です。基本的に、合理的なUNIXライクなファイルシステム設計(およびNTFSでさえこの点で十分に近い)には、無料のハードリンクがあります。
iノードは、ファイルのすべてのメタデータ(変更時刻、アクセス許可など)が格納される場所です。また、ディスク上のファイルデータの場所が保存される場所でもあります。このデータはどこかに保存する必要があります。
iノードデータをディレクトリ内に保存すると、独自のオーバーヘッドが発生します。ディレクトリが大きくなるため、ディレクトリリストの取得に時間がかかります。ファイルアクセスごとにシークを保存しますが、各ディレクトリトラバーサル(ファイルにアクセスするにはいくつか必要であり、ファイルパス上のディレクトリごとに1つ)のコストは少し高くなります。最も重要なことは、ファイルをあるディレクトリから別のディレクトリに移動するのが非常に難しくなることです。iノードへのポインタだけを移動するのではなく、すべてのメタデータを移動する必要があります。
Unixシステムでは、プロセスでファイルが開いている場合でも、ファイルの名前を変更したり、ファイルを削除したりできます。 (一部のUNIXバリアントでは、ほとんどの場合これを作成します。)これは実際には非常に重要なプロパティです。つまり、アプリケーションがファイルを「ハイジャック」できないことを意味します。ファイルの名前を変更したり削除したりしても、アプリケーションには影響しません。ファイルの読み取りと書き込みを続行できます。ファイルが削除された場合、ファイルが開かれなくなるまでデータは残ります。これは、プロセスをiノードに関連付けることで容易になります。プロセスはファイル名に関連付けることができません。ファイル名はいつでも変更されたり、消えたりする可能性があるためです。
関連:SQLエージェントジョブを視覚化するための優れたツールは何ですか?