スーパーブロック、iノード、デントリ、ファイルとは何ですか?


125

M. Tim Jones の記事Linuxファイルシステムの構造から、Linuxはすべてのファイルシステムを共通のオブジェクトセットの観点から表示し、これらのオブジェクトはスーパーブロックiノードデントリ、およびファイルであると読みました。残りの段落では上記について説明していますが、私はその説明にそれほど満足していませんでした。

誰かがこれらの用語を説明してもらえますか?

回答:


136

何よりもまず、それがあなたの質問の用語の1つではなかったことに気付きました。メタデータを理解する必要があります。簡潔に、そしてウィキペディアから盗まれたメタデータは、データに関するデータです。つまり、メタデータには、データに関する情報が含まれています。たとえば、車を所有している場合、車に関する情報のセットを持っていますが、それは車自体の一部ではありません。登録番号、メーカー、モデル、製造年、保険情報などの情報。これらの情報はすべて、まとめてメタデータと呼ばれます。LinuxおよびUNIXのファイルシステムでは、メタデータは組織の複数のレベルに存在します。

スーパーブロックは本質的に、システムのメタデータファイルとファイルシステムのタイプ、サイズ、状態、および他のメタデータ構造(メタデータのメタデータ)に関する情報を定義しています。スーパーブロックはファイルシステムにとって非常に重要であるため、各ファイルシステムの複数の冗長コピーに保存されます。スーパーブロックは、ファイルシステムの非常に「高レベル」のメタデータ構造です。たとえば、パーティションのスーパーブロック/ varが破損した場合、問題のファイルシステム(/ var)はオペレーティングシステムによってマウントできません。通常、このイベントでは、実行する必要がありますfsckスーパーブロックの代替バックアップコピーが自動的に選択され、ファイルシステムの復旧が試行されます。バックアップコピー自体は、ファイルシステム全体に広がるブロックグループに保存され、最初のパーティションはパーティションの先頭から1ブロックのオフセットに保存されます。これは、手動回復が必要な場合に重要です。dumpe2fs /dev/foo | grep -i superblock手動で回復を試みた場合に役立つコマンドを使用して、スーパーブロックバックアップに関する情報を表示できます。dumpe2fsコマンドが行を出力すると仮定しBackup superblock at 163840, Group descriptors at 163841-163841ます。この情報、およびファイルシステム構造に関する追加の知識を使用して、このスーパーブロックバックアップの使用を試みることができます/sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo。この例では、1024バイトのブロックサイズを想定していることに注意してください。

iノードは、中に存在する、または上のファイルシステムを、ファイルに関するメタデータを表します。明確にするために、LinuxまたはUNIXシステムのすべてのオブジェクトはファイルです。実際のファイル、ディレクトリ、デバイスなど。iノードに含まれるメタデータには、人間が考えるファイル名はありません。これは後で重要になることに注意してください。iノードには、基本的に所有権(ユーザー、グループ)、アクセスモード(読み取り、書き込み、実行権限)およびファイルタイプに関する情報が含まれています。

dentryは、ファイル名にiノード番号を関連付けることにより、iノードとファイルを一緒に保持している接着剤です。デントリーは、ディレクトリキャッシングでも役割を果たし、理想的には、最も頻繁に使用されるファイルを手元に置いて、アクセスを高速化します。ファイルシステムトラバーサルは、ディレクトリとそのファイル間の関係を維持するため、デントリーの別の側面です。

ファイルは、一般的に単語を提示する場合を考える人間が何であることに加えて、論理的に関連する任意のデータの本当にわずか1ブロックです。それらを追跡するために行われたすべての作業(上記)を考慮すると、比較的非常に退屈です。

いくつかの文章ではこれらの概念の完全な説明が提供されていないことを十分に理解しているため、必要なときに必要な場所で追加の詳細をお気軽にお問い合わせください。


@Tok :(回答に示されているように)このようにダンプしますか:163840-163841でグループ記述子を163840でバックアップするか、1638401-163841でグループ記述子を163840でグループ記述子をバックアップしますか?それはタイプミスでしたか?:-)
Sen

@TOK:163840でのスーパーブロックのバックアップ、163841-163842でのグループ記述子、グループ記述子はどのような情報を伝えますか?
セン

@Sen -理論的にグループ記述子が複数のブロックにまたがることができますが、ほとんどのデスクトップ・システムのためにあなたがそれらを単一のブロックのみを取ると$((BackupBlock + 1))として参照され表示されます- $((BackupBlock + 1))
トック

@TOK:OK、私のシステムでは$((BackupBlock + 1))-$((BackupBlock + 2))のように見えます
Sen

@Sen-グループ記述子はブロックグループを記述します。どういう意味ですか?より多くのメタデータ。基本的に、グループ記述子には、ブロックビットマップ(ブロック割り当てビットマップのブロック番号)、iノードビットマップ(iノードの場合と同じ)、iノードテーブル(iノードテーブルの開始ブロックのブロック番号)、フリーブロックおよびiノードカウント、および使用済みディレクトリ数。これはすべてext2ファイルシステムに基づいています。グループ記述子は、適切なファイルシステム操作にとって非常に重要であり、スーパーブロックと一緒に複製されます。
トック

49

ファイル

ファイルとは、特定の順序で配置されたバイトの束を意味します。それは普通の人がファイルの内容と呼ぶものです。Linuxはファイルを開くときに、ファイルオブジェクトを作成します。ファイルオブジェクトには、ファイルの保存場所と、そのプロセスが使用しているプロセスに関するデータが保持されます。ファイルが閉じられると、ファイルオブジェクト(ファイルデータ自体ではありません)は破棄されます。

iノード

iノード(「インデックスノード」の略)は、Linuxが保存するファイルに関する一連の属性です。ファイルごとに1つのiノードがあります(一部のファイルシステムでは、情報がファイルシステム全体に広がるため、Linuxは独自のiノードを作成する必要があります)。iノードには、ファイルの所有者、ファイルの大きさ、ファイルを開くことができるユーザーなどの情報が格納されます。各iノードには、ファイルシステムパーティションに固有の番号も含まれています。これは、そのiノードで記述されたファイルのシリアル番号のようなものです。

デントリー

dentry(「ディレクトリエントリ」の略)は、Linuxカーネルがディレクトリ内のファイルの階層を追跡するために使用するものです。各dentryは、iノード番号をファイル名と親ディレクトリにマップします。

スーパーブロック

スーパーブロックは、ファイルシステム内の一意のデータ構造です(ただし、破損を防ぐために複数のコピーが存在します)。スーパーブロックは、ファイルシステムに関するメタデータを保持します。たとえば、どのiノードが最上位ディレクトリであり、使用されるファイルシステムのタイプであるかなどです。


11

スーパーブロック、インデックスノード(またはiノード)、ディレクトリエントリ(またはdentry)、そして最後に、ファイルオブジェクトは仮想ファイルシステム(VFS)または仮想ファイルシステムスイッチの一部です。VFSの目的は、クライアントアプリケーションがさまざまなタイプの具体的なファイルシステムに均一にアクセスできるようにすることです。

VFSの主要なオブジェクトの関係

ここに画像の説明を入力してください


iノードは、 UNIX / Linuxのファイルシステム上のデータ構造です。iノードは、通常のファイル、ディレクトリ、またはその他のファイルシステムオブジェクトに関するメタデータを保存します。iノードは、ファイルとデータの間のインターフェイスとして機能します。iノードは、ファイル、ディレクトリ、または別のオブジェクトへのシンボリックリンクを参照できます。一意の番号(i番号)、名前、日付、サイズ、読み取り/書き込み許可などのファイルの属性、およびファイルの場所へのポインターが含まれています。これは、DOS / Windowsの世界のFATテーブルに相当します。

プログラム、サービス、テキスト、画像などはすべてファイルです。入力デバイスと出力デバイス、および一般的にすべてのデバイスは、システムに従ってファイルと見なされます

スーパーブロックは、ファイルシステムに関するハイレベルのメタデータのコンテナです。スーパーブロックは、ディスク(実際には、冗長性のためにディスク上の複数の場所)およびメモリにも存在する構造です。ファイルシステムの管理パラメーター(ブロックの総数、空きブロック、ルートインデックスノードなど)を定義するため、ディスク上のファイルシステムを扱うための基盤を提供します。

Dentryは、ファイルとiノード間のインターフェースです。デントリーは、ディレクトリキャッシングでも役割を果たし、理想的には、最も頻繁に使用されるファイルを手元に置いて、アクセスを高速化します。

ソース


5

単純化すると、dentryとinodeは同じものであり、ファイルまたはディレクトリの抽象化です。dentryとinodeの違いは、dentryがディレクトリ固有の操作を容易にするために使用されることです。inodeはファイルまたはディレクトリに関するメタデータの単なるコレクションです。スーパーブロックは、ファイルシステムの抽象化です。

struct file、Linuxカーネルでは、他の多く(例:)と誤って命名されておりstruct address_space、実際の「ファイル」(例:/ etc / passwd)の抽象化ではありません。開かれた「ファイル」またはディレクトリを表します。struct filesys_openカーネル内で作成されるため、プロセスstruct fileは同じファイルに対して多数のを持つことができます。

なぜデントリーが必要なのですか?パス名(例:/ etc / passwd)からiノードへの変換を高速化するために使用されます。Linuxカーネルは、inodeを使用して、名前ではなく「ファイル」またはディレクトリを操作します。


4

これらの用語はLinux固有ではなく、ファイルシステム固有であることに注意してください。現在のUnixおよびUnixのようなシステムで使用されるほとんどのファイルシステムは、スーパーブロックとiノードのイディオムを定義した元のUnixファイルシステムに由来するか、それに触発されています。Linuxは、スーパーブロックやiノードの概念がない複数のファイルシステムもマウントできます。最も一般的なのはFATです。もう1つのZFSは、スーパーブロックではなく、ユーバーブロックを使用します。


久しぶりにこのコメントを読んでいただければ幸いです。VFSには、たとえばEXT2のiノードとスーパーブロックに関係のないiノードとスーパーブロックがあると読みました。だから、あなたが言ったことを誤解しないように、すべてのLinuxがVFSを持っているので、彼らはすべてiノードとスーパーブロックを使用するべきですよね?
CuriousKimchi

1
@CuriousKimchi同じ名前であるにもかかわらず、ディスク(スーパーブロック/ iノード)に保存されている情報と、カーネルがファイルシステムとそのファイルにアクセスするために使用する構造を混同しないでください。すべてのファイルシステムには、ファイルシステムの特性を説明するディスク上のメタデータがいくつかあり、このメタデータはLinux VFSスーパーブロック構造を作成するために使用されます。同様に、ファイルはVFSの下にカーネルのinode構造を持っています。基礎となるファイルシステムにiノードの概念が欠けている場合、この構造にはOSによってオンザフライで作成された偽のiノード番号が含まれます。
jlliagre 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.