質問: iノードとは何ですか? 重複の可能性: スーパーブロック、inode、dentry、およびファイルとは unixファイルシステムのドキュメントには、多くの場合、「inode」という用語が含まれています。それは何ですか、それは何ですか? dos/windowsファイルシステムにiノードがない(またはある)のはなぜですか?
回答: 「inode」は、unixファイルシステムが単一のファイルに関連する情報を保持するために使用するディスク上のデータのチャンクを指す非公式の用語です。 「iノード」は伝統的に、ファイルの実際の内容を保持するディスクブロックのブロック番号を保持します。従来、ディレクトリエントリにはファイル名、ファイルタイプなどが含まれていました。データの2つのチャンクは分離されていました。とは言うものの、多くのunixyのものはそこから外れます。従来、ファイル名はiノードの一部ではありませんでした。ファイル名は、ファイル名をiノード番号に一致させたファイル(独自のiノードと内容を持っていた)である「ディレクトリ」から取得されました。 cプリプロセッサマクロを使用すると、コードを計算せずにiノード番号からディスクブロックに移動できます。したがって、多くの名前が同じiノードを参照する可能性があります。これからハードリンクが出てきます。 「。」を持つ能力もそうです。常に現在のディレクトリをだまさずに参照してください。ディレクトリには常に「。」が含まれます。および「..」ファイル名。ディレクトリ自体のiノード番号と、ディレクトリが存在するディレクトリに対応します。 「」 「..」ファイル名には、すべてのディレクトリにエントリがあります。これらは、実際にはどこにもデータがないファイルシステムコードの特殊なケースではありません。unixファイルの階層はiノードから出てきます。ディスクは基本的に、512バイト、1キロバイト、4キロバイトなどの特定のサイズの「ブロック」の線形配列です。 iノード0は常に指定されたディスクブロックにあり、unixカーネルは「inode0」を知っているだけでファイルシステムのルートを見つけることができ、「/」をiノード9に関連付けることができます。iノード0もディレクトリファイルでした。 「usr」、「bin」、「tmp」、「dev」などのiノード0にはエントリがあります。したがって、iノードを使用すると、データブロックの線形リストをディスクから階層構造にマッピングできます。iノードはディスク上にありました。元のunixファイルシステムでは、ディスクの最初の3分の1または4分の1がiノードでした。残りはデータブロックであり、必要に応じてファイルに割り当てられ、そのディスクブロック番号は最終的にiノードになりました。長年にわたるさまざまなファイルシステム(bsd ffsなど)は、ディスク上のさまざまな場所にiノードのゾーンを配置することにより、ディスクの実際の物理的ジオメトリを考慮に入れようとしました。winodws ntの「ntfs」ファイルシステムには、マスターファイルテーブルのエントリであるiノードにすぐに似たものがあります。 ntfsは、その祖先であるdec vmsfiles-11からそれを継承しているようです。ファイル-11個の「ファイルヘッダー」は、$ mftのエントリとほぼ同じように見えます。私は他のwindows/dosファイルシステム(fat、fat32など)の専門家ではありませんが、ファイルアロケーションテーブルのレコードは、ディレクトリエントリとiノードを組み合わせたものに類似しているように見えます。ネーミングと階層をディスクブロックデータと組み合わせることで、fatファイルシステムは非常に壊れやすくなると思います。個別のiノードのディスク上のデータをプログラムで組み合わせて、見つかったファイルを「lost + found」に入れることはできません。ファイルアロケーションテーブルが破損すると、ファイルデータのメンバーシップが失われ、ファイルのメンバーシップが失われます。ディレクトリ。