web-dev-qa-db-ja.com

iノードテーブルはどこに保存されますか?

Iノードを含むテーブルがどこにあるのか本当にわかりません。私の先生は、各物理ディスクにはiノードのテーブルがあり、その後にファイルのデータがあると言いました。しかし、インターネット上では、各ディレクトリに、その中のファイルに関連付けられたiノードと名前の独自のテーブルがあることがわかりました。

これらの2つの異なるテーブル(概念)ですか、それとも一方が間違っていますか?

ありがとうございました。

3

私の先生は、各物理ディスクにはiノードのテーブルがあり、その後にファイルのデータがあると言いました。

これは広く正しいです。より正確には、各ファイルシステムにiノードのテーブルがあり、各パーティションに個別のファイルシステムがあります。 (物事はより複雑になる可能性がありますが、ここではこれらの複雑な問題に取り組む必要はありません。)

ファイルシステムのiノードテーブルはiノード番号ファイルメタデータにマッピングします。これは通常、固定サイズの構造の大きな配列です。たとえば、この配列の要素番号1234はiノード番号1234です。iノードには、ファイルのアクセス許可、変更時刻、ファイルタイプなどの情報と、ファイルの内容がどこにあるかが示されます。

しかし、インターネット上で、各ディレクトリには、その内部のファイルに関連付けられたiノードと名前の独自のテーブルがあることがわかりました。

これは、ファイル名iノード番号にマップするテーブルです。つまり、ディレクトリはエントリのリスト(またはより高度なデータ構造)であり、リストの各要素にはファイル名とiノード番号が含まれています。ファイルのメタデータとコンテンツを見つけるために、システムはディレクトリからiノード番号を読み取り、次にiノードテーブル内の指定されたエントリを読み取ります。パスが指定されたファイルを見つけるために、システムはルートiノードから開始し、それがディレクトリであることを見つけ、最初の要素のディレクトリエントリを見つけ、そのiノードを読み取ります。

これはファイルシステムの典型的な設計ですが、可能な唯一の設計ではないことに注意してください。ほとんどのUnix指向のファイルシステムはこの設計に従いますが、他の設計も存在します。

1つの誤解は、iノードは物理ディスクの属性ではなく、特定のfilesystemsの属性であるというものです。たとえば、FAT32にはiノードがありません。階層の簡単な要約は次のようになります。

物理ディスクには、いくつかのセクターが含まれています。これらは、データが格納されるディスク上の物理的な場所です。

物理ドライブは通常、パーティションに分割されます。これらは、ディスク上の(論理的に)隣接する物理データストレージ領域の論理的な分離です。

これらのパーティションは(LVMと同様に)論理ボリュームにさらに分割できますが、これは必須ではありません。実装すると、これらの論理ボリュームはほとんどパーティションと同じように機能しますが、たとえば容量を追加するなどの操作を簡単に実装できます。

パーティション(または論理ボリューム)にはfilesystemsを含めることができます(例:ext3fs、VFAT、hpfs)。各ファイルシステムは、その組織構造などを追跡することに関して、独自の方法で組織化されます。通常、Linuxホスト(例:ext?fs)にデプロイされる多くのファイルシステムは、この目的でiノードを使用するか、同等のメカニズム(例:reiserfs)を使用します。

3
DopeGhoti