ベストアンサー
要するに
各ファイルシステムにはスーパーブロックがあり、次のようなファイルシステムに関する情報が含まれています。
- ファイルシステムの種類
- サイズ
- ステータス
- 他のメタデータ構造に関する情報
詳細 span>
スーパーブロックファイルシステムを表す構造です。これには、操作中にファイルシステムを管理するために必要な情報が含まれています。これには、ファイルシステム名(ext4など)、ファイルシステムのサイズとその状態、ブロックデバイスへの参照、およびメタデータ情報(フリーリストなど)が含まれます。スーパーブロックは通常、ストレージメディアに保存されますが、存在しない場合はリアルタイムで作成できます。スーパーブロックの構造は./linux/include/linux/fs.hにあります。
1つスーパーブロックの重要な要素は、スーパーブロック操作の定義です。この構造は、ファイルシステム内のLinuxを管理するための一連の関数を定義します。たとえば、Linuxはalloc\_inode
で割り当てたり、削除したりできます。 destroy\_inode
を使用します。read\_inode
およびwrite\_inode
を使用して、Linuxの読み取りと書き込みを行うか、ファイルを同期できます。 sync\_fs
のシステム。super\_operations
構造は./linux/include/linux/fs.hにあります。各ファイルシステムは操作を実装し、VFSレイヤーに共通の抽象化を提供する独自のinodeメソッド。
物理構造
Ext2ファイルシステムの物理的構造はレイアウトの影響を強く受けていますBSDファイルシステムの。ファイルシステムはブロックグループで構成されています。ブロックグループはBSDFFSのシリンダーグループに類似しています。ただし、最近のドライブはシーケンシャルアクセス用に最適化され、オペレーティングシステムに物理ジオメトリを隠す傾向があるため、ブロックグループはディスク上のブロックの物理レイアウトに関連付けられていません。
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
各ブロックグループには、重要なファイルシステム制御情報(スーパーブロックとファイルシステム)の冗長コピーが含まれています記述子)であり、ファイルシステムの一部(ブロックビットマップ、iノードビットマップ、iノードテーブルの一部、およびデータブロック)も含まれます。ブロックグループの構造は、次のテーブルで表されます。
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
ブロックグループの使用は、信頼性の点で大きなメリットです。制御構造は各ブロックグループに複製されるため、 eですスーパーブロックが破損しているファイルシステムから回復するのは簡単です。この構造は、優れたパフォーマンスを得るのにも役立ちます。iノードテーブルとデータブロック間の距離を短くすることで、ファイルのI / O中のディスクヘッドシークを減らすことができます。
回答
Linuxのファイルシステムはいくつかのレイヤーで動作します:A)aデバイス(つまりドライバー)と対話するためのプリミティブルーチンのセット、B)ファイルと呼ばれるものに対応するディスク上のレコードのセット、およびC) iノードと呼ばれる各ファイルに関するメタデータ情報。ファイルごとに1つのiノードがあります。これらのiノードは、ファイル属性が何であるか、ファイルの読み取り/書き込みがどのように定義されているかなどを追跡します。
これは不完全な図であることがわかります。つまり、各種類のファイルシステムが、ディスク上で好きな方法でiノードを配置することを選択する前です。iノードのディスク上の表現でさえ、ファイルシステムによって異なる場合があります。重要なのはビューで提供されるiノード構造は一致します。したがって、Linux自体は、ファイルシステム内の個々のファイル/ノードにアクセスする方法を決定しません。
この問題は、 struct file\_system と structを使用することで適切に処理されます。 super\_block タイプ。後者はディスク上に存在し、前者はメモリ内にのみ存在します。たとえば、ファイルシステムをマウントする場合は、
mount -t ext4 / dev / usb1 / mnt / usb1
ext4タイプを定義する file\_system オブジェクトには、 mount()ルーチン。スーパーブロックオブジェクトをディスクから読み取る方法を指定します。このスーパーブロックオブジェクトは、デバイス内のiノードにアクセスするために必要なすべてのもの(割り当て、削除、読み取り、右、デバイスとメモリ間の同期など)を指定します。このスーパーブロックオブジェクトがメモリにフェッチされたら、その lookup()操作を使用して、ディスクからメモリにiノードを読み取ります。 次に、これらのiノードを順番に使用してファイルシステムにアクセスします。 それは階層的で、本当に、そしてかなりきちんとしています!