2016-06-20 15 views
1

私は最近、Linuxカーネルについて学び始めました。ファイルのメタデータを含むデータ構造であるinodeについて知りました。iノードはどこに保存されていますか?

ここで、OSはファイルの関連inodeをどのように見つけますか? (パスの文字列を言う)。さらに、それらのiノードはどこに格納されていますか?明らかにそれらはディスクに保存されていますが、どのように管理されていますか?

1つの単純な解決策(私は思い付くことができます)は、ディスク上にinode専用に指定された領域を割り当てることです - 実際に何が行われましたか?

答えて

5

ファイルシステムの実装によって異なります。たとえば、ext2fs/ext3fsは、ブロックグループ内のデータブロックの前にinodeを格納することを選択します。 The Second Extended File system (EXT2)

すべてのブロックグループに格納されているinodeを覚えておいてください。たとえば、inode 1〜32768はBlock Group-0に格納され、inode 32768〜65536はBlock-Group-2に格納されます。 あなたの質問に対する答えは:inodeはinodeテーブルに格納され、パーティション内のすべてのブロックグループにはinodeテーブルがあります。 enter image description here

+0

ありがとうございます。OSは、指定されたパスのどこにこのブロックがあるのか​​をどのくらい正確に知っていますか? – LiorGolan

+2

@LiorGolan - 各ディレクトリエントリは、少なくともパスコンポーネント名だけでなく、その詳細(inode番号など)を見つける場所も指定する必要があります。ルートディレクトリにはよく知られたinode番号(たいていは#2)があります。 mik1904が示すように、iノード番号が分かっていれば、ディスク上のどこにファイルシステムがあるかを知ることができます。次に、1.指定されたiノードのディレクトリデータを読み込みます。2.次のパスコンポーネントの名前とその詳細を検索します。3.パスの最後のコンポーネントに達するまで繰り返します。 – Sparky

関連する問題