web-dev-qa-db-ja.com

スーパーブロック、inode、Dentry、およびファイルとは何ですか?

M. Tim Jonesによる記事 Linuxファイルシステムの構造 から、Linuxはすべてのファイルシステムを共通のオブジェクトセットの観点から表示し、これらのオブジェクトはsuperblockinodedentryおよびファイル。パラグラフの残りの部分で上記について説明していますが、私はその説明にそれほど慣れていませんでした。

誰かがこれらの用語を私に説明できますか?

132
Sen

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

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

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

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

A fileは、Wordが提示されたときに人間が通常考えるものであることに加えて、実際には論理的に関連する任意のデータの単なるブロックです。それらを追跡するために行われたすべての作業(上記)を考慮すると、比較的非常に退屈です。

いくつかの文はこれらの概念の完全な説明を提供していないことを十分に理解していますので、必要なときに必要な場所で追加の詳細をお気軽に尋ねてください。

144
Tok

ファイル

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

井のノード

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

エントリ

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

スーパーブロック

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

50
pingswept

superblock、インデックスノード(またはinode)、ディレクトリエントリ(またはdentry)、そして最後に、fileオブジェクトがvirtual file system(VFS)or virtual filesystem switch。 VFSの目的は、クライアントアプリケーションがさまざまなタイプの具象ファイルシステムに統一された方法でアクセスできるようにすることです。

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

enter image description here


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

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

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

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

ソース

14
Premraj

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

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

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

5
firo

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

4
jlliagre