ファイルシステムの構造(主にFATファイルシステムについて)
1.DISKの構造
http://www.linux.or.jp/JF/JFdocs/Multi-Disk-HOWTO-3.html
物理構造
セクター 読み書きの最小の単位
トラック 一回り分の エリア
シリンダー
通常ディスク枚数*2の面裏表にトラックがあり同じ位置のトラックを
まとめてシリンダとして管理する
ハードデスク以外のSDメモリーでも疑似的に存在し、トラック数等、値を読み出すことができる。
したがって物理的にシーク時間、回転待ち時間を考えなければ上位層は同一になる
ドライバーでもICの初期化、キャッシュサイズの違い(容量がぜんぜんちがうので)
転送方法(DMAを使うとか)SDはシリアルだがドライバーからは1バイトずつで
エンデアンの問題はでないが、IDEでは16Bitワード転送が基本なのでエンデアンチェンジ
が必要なときもある
など違うこともある。
論理構造
スマートメデアカードを除くメモリーカードの仲間はIDE−DISKをエミュレートしている
メモリーステックはいきなりFatFILEをエミュレートしているようです。
したがってSDメモリーからもIDEと同じ方法でブート可能です。
MBRとPBR
MBR
デスクの先頭セクターにある、1セクター512Byteの中に起動コード、パーテションテーブルがある
PBR
パーテションの先頭セクターにある、FATファイルシステムではBPBが格納されている。
BPB(Bios Parameter Block)
ディスクとファイルシステムの仕様が書き込まれている
Byte/セクター = 512
セクター/クラスター フォーマット時の決めによる
セクター/トラック ディスク固有
ヘッド数 ディスク固有
第一パーティションへのLBA
ルーとデレクトリーのクラスタ番号 = 2
ファイルシステム
FAT
各クラスタの空きと使用中ならチェーンが終わりかチェーンすべき次のクラスタNO.が入る。
破壊にそなえ通常2個同じものがあるが、連続した位置にあるので物理的破壊には弱い。FATxxのxxはこのNo.に何ビットを当てるかの違いで
FAT12
フロッピーディスク、初期のMSDOSで使われた、
12Bit*2=24Bit=3Byteで2つのクラスタを表す。
FAT16
容量2GBまで、2Byteで1つのクラスタを表す。
FAT32
4Byteで1つのクラスタを表す。
VFAT (LongName)
FATの構造は旧来のまま、別途LongNameとの対応表をファイルとしてもっていて、LongNameをxxxxxx~1.txtなどの実態に変換後読み書きする。
ファイル名は254バイトまで可能
デレクトリー
ルートデレクトリーはFATの次の物理位置にある、サブデレクトリーはファイルと同じ扱いでルートデレクトリーよりエントリーポイントを得る
FAT12/16ではルートデレクトリーのサイズは固定で194個、FAT32は任意に拡張可能
ルートデレクトリーの下にデレクトリー、ファイルが登録される、さらにそのデレクトリーにデレクトリーを登録するためツリー構造をもった階層構造となる。
aaaa\bbbb\cccc\dddd.txt
と言うフルパスネームは
aaaa
ルートデレクトリー
|
bbbbサブデレクトリー
|
ccccサブデレクトリー
|
dddd.txt
目的のファイル
とたどっていく。
セクター&クラスター
1セクターはハード的に512バイト(256バイトの時代もあった)と決まっている。
クラスターはFATで管理出来る数が限られるため数セクターをまとめてブロックとして管理している。
fat16では32kB/
クラスターで2Gまでになる。