Linuxカーネルがファイルシステムを表示する方法

Linuxカーネルがファイルシステムを表示する方法

私はまだカーネルとファイルシステムの概念が混乱しています。

ファイルシステムには、さまざまなメモリ内のさまざまなファイルとディレクトリを取得するために使用されるinodeテーブルが含まれています。

このinodeテーブルはカーネルの一部ですか?つまり、カーネルが別のファイルシステムをマウントすると、inodeテーブルは更新されますか?

それとも、ファイルシステム自体の一部であり、カーネルはドライバとinodeテーブルアドレスを使用して何とか読み込みますか?

ベストアンサー1

カーネルのソースコードとドキュメントでは「inode」という用語を混乱させているので、ここにはいくつかの混乱があります。

ファイルシステムは、メモリのファイルシステムコードとデータ、ディスクのファイルシステムの2つの部分で構成されていると考えることができます。

ディスク上のファイルシステムは独立しており、ファイル内のすべての不揮発性データとメタデータを含みます。ほとんどのLinuxファイルシステムでは、これにはディスク上のinodeとファイルに関するその他のメタデータとデータが含まれます。

ただし、ファイルシステムがマウントされると、ファイルシステムコードはメモリ内で使用されるファイルのinodeのキャッシュコピーも保持します。すべてのファイルアクティビティはinodeのメモリコピーを使用して更新するため、カーネルコードは実際にはメモリコピーのみを考慮し、ほとんどのカーネルドキュメントではディスクinodeとメモリinodeを区別しません。メモリ内のinodeには、inodeのディスクコピーに含まれていない追加の一時メタデータ(ファイルのキャッシュされたページがメモリ内のどこにあるか、ファイルが開いているプロセスなど)も含まれています。メモリ内のinodeは定期的に同期され、ディスクに書き戻されます。カーネルはそうではありませんみんなメモリ内 inode - 使用中のファイルと最近使用したファイルの inode のみに該当します。最後に、メモリ内インデックスノードがフラッシュされ、メモリが解放されます。ディスクの inode は常に存在します。

UNIXのファイルアクティビティはinodeと密接に関連しているため、inodeを使用しないファイルシステム(vfatなど)には、カーネルメモリにファイルシステムコードによって動的に生成される仮想inodeがあります。これらのインメモリ仮想inodeは、必要に応じてディスク上のファイルシステムに同期するファイルメタデータを保持し続けます。

従来のUnixファイルシステムでは、inodeはファイルのコアデータ構造です。ファイル名は単にinodeへのポインタであり、inodeは複数のファイル名を連結できます。 inodeを使用しない他のファイルシステムでは、ファイルは通常1つの名前しか持たない可能性があり、メタデータはinodeではなくファイル名に関連付けられます。

おすすめ記事