最終更新:ID:O5ZM6pXQ7g 2011年07月05日(火) 14:19:07履歴
- 画像はunderstanding the Linux Kernel Third Edition より引用
- 効率的で堅牢なファイルシステム
- ブロックグループの概念、起動時にファイルシステム状態の整合性を確認する、など
- 幾つかの機能が外部パッチで拡張可能
- ブロックのフラグメント化など
- 各データブロックに1つずつ、ブロックグループ0のスーパーブロックの複製がある
- カーネルはブロックグループ0のスーパーブロックのみ使用
- iノードの総数、ブロックの総数、ブロック長などを保持(表18-1)
グループディスクリプタ
ビットマップ
- ブロックグループ0以外は複製を保持
- ブロックグループの空きブロック数や空きiノード数などを保持
- 全てのブロックグループの情報がブロックグループ0のグループディスクリプタ(群)に保持される
- 新しいiノードやデータブロックの割り当てなどに使用
ビットマップ
- 対応するiノードやデータブロックが空き/使用中の状態をビット値(0,1)で示すためのビット列
- ブロック長に応じて 8192,16384,32768個のブロックの状態を表現可能
- 連続した複数のブロックを使用
- 大きさ128バイトのiノードを持つ
- 1つのブロックに含まれるiノード数は固定(ブロック長/128 個)なので、iノード番号からデータの位置を簡単に割り出せる
- ファイルの実際の長さ、ファイルに割り当てたデータブロック数などを保持
- ファイルの実際の長さ = ファイルに割り当てたデータブロック数にならない場合もある
- ファイルの最大長は32ビットアーキテクチャで2GB(一部の64ビットプロセッサは4GBまで扱える)
- iノードが128バイト固定であることによる問題を回避するための拡張機能
- 属性名と属性値からなり、実際の情報はiノードとは別のブロックに置かれる
- ACLを実装するため作成された機能
- ファイルシステムのマウント時にディスク上のデータ構造の情報をほとんどRAMへ読み込む
- ディスク読み込みを減らすため
- データ構造は頻繁に更新されるため、データの一部はページキャッシュに常に保持されている
- 常にキャッシュ:スーパーブロック、ブロックグループディスクリプタ
- キャッシュしない:空きiノード、空きブロック
- 動的にキャッシュ:その他のブロック
- スーパーブロックのメンバや、スーパーブロックを読み込んだバッファの位置などを保持する構造体ext2_sb_info
- Ext2ファイルシステムのマウント時はこの構造体を初期化
- マウント後もメモリに残り続ける
- ディスクのフォーマット→ファイルシステムの生成の手順をとる
- ハードディスクなどは出荷時にフォーマット
- mke2fsユーティリティプログラムで作成
- スーパーブロックとブロックグループディスクリプタを初期化
- 各ブロックグループに必要なブロック(5種)を予約して、初期化
- ルートディレクトリを作成
- ルートディレクトリを作成したブロックグループを更新
- 関係の薄いディレクトリが、異なるブロックグループに配置されるように考慮
- ブロックグループ内の通常ファイルとディレクトリ数の釣り合いを取るために、負債の概念を導入
- ディレクトリの新規作成ごとに増加、その他のファイルの作成ごとに減少
- 負債の少ないブロックグループに優先的にディレクトリを作成
ディレクトリ作成の場合
- 親ディレクトリがルートの場合、空きiノード数と空きブロック数が平均以上のブロックグループに作成
- 同じディレクトリ階層のディレクトリは、親ディレクトリと同じブロックグループに配置(条件あり)
- ブロックグループのディレクトリが多すぎない
- iノードが十分残っている
- 負債が少ない
- 上の条件を満たせない場合、全てのブロックグループから条件に合うグループを選択
- 親ディレクトリから順番にブロックグループを走査し、空きiノードが十分にあるブロックグループに作成
iノード作成の場合
- 親ディレクトリが存在するブロックグループから、空きiノードがあるグループを対数的検索で走査
- 空きiノードが見つからなければ線形検索
- 発見したグループのiノードビットマップから空きiノードを検索してディスクに割り当てる
- データ書き出しのためのdirtyフラグを立てる
- iノードオブジェクトやACLを初期化
- ハッシュテーブルに挿入
- 書き戻しのためにディスクからブロックを読み出す
- ファイルの断片化を避けるため、そのファイルへ最後に割り当てたブロックの近くへ新しいファイルを割り当てようとする
- ファイルを割り当てるとき、隣接したデータブロックを予約しておく
- ディスクが大きくなると、ファイルの整合性検査に膨大な時間がかかるようになる
- 最近の更新情報を格納するジャーナルを用いて、ファイルシステムの整合性検査を低コストで実現
- ファイルシステムの更新にジャーナルを挟むことで、システム復旧時の処理を簡単にする
- メタデータ(データブロック以外のブロックに格納されたデータ)だけジャーナルに書き込むことも出来る
- メタデータのみの記録ではファイルが壊れるのを防げないが、処理が高速になる
最新コメント