ファイルに関する情報が保存されているかどうかを知りたいです。インデックスノードディレクトリに直接保存するよりも、追加のオーバーヘッドが価値があります。私がオーバーヘッドを過大評価しているか、重要なことを見落としているかもしれませんが、だからこそ見てください。
ハードリンクには「inode」のようなものが必要であることがわかりました。しかし、オーバーヘッドが実際に考えたのと同じ大きさであれば、何らかの理由正当化して下さい:
- バックアップにハードリンクを使用することは賢明ですが、バックアップの効率は通常の作業の効率に比べて十分に重要ではありません。
- ハードリンクの速度やサイズに不利益がないことは本当に重要です。なぜなら、この利点はただ存在するからです。複数のファイルについてアクセス時にハードリンクを使用するすべてのファイル間接費を負担する
- 同じ名前(たとえば、および
bunzip2
)を持つ複数のバイナリの一部のスペースを節約するbcat
ことは無視できます。
inode /ハードリンクが悪いか役に立たないと言うわけではありませんが、これは追加の間接参照コストを正当化しますか?
答え1
ハードリンクはポイントではありません。これはinodeを所有する理由ではありません。それらは副産物です。基本的に、合理的なUNIXに似たファイルシステム設計(この時点ではNTFSも十分に近い)には無料のハードリンクがあります。
inodeは、変更時間、権限など、ファイル内のすべてのメタデータが保存される場所です。また、ディスク上のファイルデータが保存される場所でもあります。このデータはどこかに保存する必要があります。
inodeデータをディレクトリに保存すると、わずかなオーバーヘッドが発生します。ディレクトリが大きくなるため、ディレクトリのリストが遅くなります。ファイルアクセスごとに1つのルックアップを保存できますが、ディレクトリ巡回(ファイルパスの各ディレクトリごとに1つずつ、ファイルにアクセスするために必要な複数の巡回)あたりのコストはわずかに高くなります。最も重要なことは、これがあるディレクトリから別のディレクトリにファイルを移動するのがより困難になることです。つまり、inodeへのポインタだけでなく、すべてのメタデータを移動する必要があります。
Unix システムでは、プロセスでファイルが開いていても、常にファイル名を変更したりファイルを削除したりできます。 (一部のUNIXバリアントではほとんど常に行われます。)これは実際には非常に重要な属性です。これは、アプリケーションがファイルを「ハイジャック」できないことを意味します。ファイル名を変更または削除してもアプリケーションには影響がなく、ファイルを読み書きすることができます。ファイルが削除されると、プロセスがファイルを再度開くまでデータは保持されます。これは、プロセスを inode と関連付けることによって促進されます。ファイル名はいつでも変更または消える可能性があるため、プロセスをファイル名に関連付けることはできません。
また、見ることができますスーパーブロック、アノード、ディレクトリエントリ、ファイルとは何ですか?
答え2
あなたが見逃すことができるいくつかの異なる要素があります。ディレクトリのファイル名からinodeを分離すると、ハードリンクが可能になります。ただし、ハードリンクがこの分離のための唯一の同期か元の同期であるかは疑わしいです。
私は1978年7月から8月までのBell System Technical Journalのコピーを持っています。これは彼らの特別な問題の一つです。「Unixタイムシェアリングシステム」。これは、Thompson、Ritchie、および会社がUnixバージョン6および7の説明とそれを介して実行できるタスクを公開する場所です。
inodeとファイルシステムの説明を見ましたが、デザインへの動機はありませんでした。 RitchieとThompsonは、システムコールがinodeを生成し、値を設定し、システムコールが追加のファイルアクセス時にinodeデータを格納できるオペレーティングシステムテーブルを埋めることに注意してくださいcreate
(BSTJのスペルとして)。open
主な段落の1つでは、i-listと呼ばれるinodeを保持するディスクブロックについて説明します。
i-listの概念はUNIXの珍しい機能です。実際、これらのファイルシステムの構成方法は非常に信頼性が高く、作業が容易であることが証明されています。 ...また、非常にシンプルで高速なアルゴリズムを使用してファイルシステムの一貫性を確認できます。 ...これは線形に構成されたiリストだけをスキャンするだけでよいため、ディレクトリ階層とは無関係です。
—源泉
当初、設計者はデータから inode を分離すると作業の信頼性が向上することがわかりました。
私は私たちが長年の経験を通してこれを達成できると信じています。ディレクトリ階層と割り当て(FAT)が混在するMS-DOSやその他のファイルシステムは非常に脆弱です。 FATの1セクタが破損した場合、回復は困難です。ただし、Unixディレクトリのセクタが不良になると、ディスクの他の場所にあるinodeがまだ存在し、ディレクトリに属していることを示すリンク数があるため、回復できます。
ディレクトリ内のinode番号を探し、inodeで権限やデータを探す明白なオーバーヘッドは、オペレーティングシステムのファイル処理をより簡単にしたり、信頼性を高めることで補償できるようです。
答え3
1つの実際のinodeの例:
名前の厳しいファイル(例:〜*)があるため、削除する必要があります。
ls
~*
rm -rf ~*
$HOME が破損しているため、別の方法で削除する必要があります。
読むここinodeでファイルを削除する方法
inodeを介してファイルを削除します。
find . -type f -inum 1234 - exec rm -rf {} /;
さて、特殊文字をエスケープし、rmで簡単に削除したり、トリックを使用できることを知っています。しかし、それでもそうです。
答え4
ハードリンクはファイルだけではありません。はファイルシステムの物理リンクなので、各ディレクトリにはフルパス名とリンク.
という少なくとも2つのファイルシステムリンクがあります。リンクを.
追加すると、..
ディレクトリに複数のハードリンクがある可能性があります。