ファイルシステムの構造(主に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=
4Bit=3Byteで2つのクラスタを表す。

   FAT16
  容量2GBまで、2Byteで1つのクラスタを表す。

   FAT32
    4Byteで1つのクラスタを表す。

   VFAT (LongName)
    FAT
の構造は旧来のまま、別途LongNameとの対応表をファイルとしてもっていて、LongNamexxxxxx~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までになる。