実際に見てみよう!!


一通り、FATの仕組みを調べてみたので、実際に見てみる。
今回、生贄になるのは、手元にあった、USB HDD。
一応、中身が壊れても大丈夫なように、大事なデータは退避済み。


さて、それでは、MBRから。

PARTITION 1
BOOTABLE       = 00 [ブート不可]
firstSecotrCHS = 01 01 00 [head=01(1), sector=01(1), cylinder=000(0)]
type           = 0C [FAT32(LBA)]
lastSectorCHS  = FE FF FF [head=FE(254), sector=3F(63), cylinder=3FF(1023)]
firstSectorLBA = 0000003F (63)
allSectors     = 1299B262 (312062562)

PARTITION 2 [空のパーティション]

PARTITION 3 [空のパーティション]

PARTITION 4 [空のパーティション]


続けて、パーティション1のPBRです。

OEM NAME = MSWIN4.1
Bytes/Sector     = 512
Sectors/Cluster  = 64
予約セクタ       = 32
FATの数       = 2
ルートエントリ   = 0
全セクタ数       = 0
メディアタイプ   = F8
Sectors/FAT      = 0
Sectors/Track    = 63
ヘッド数         = 255
隠しセクタ       = 63
全セクタ数(BIG)  = 312062562
Sectors/FAT(BIG) = 38085
extFlags         = 00-00
version          = 0
ルート クラスタ  = 2
FSInfo セクタ    = 1
Backup セクタ    = 6
ドライブ番号     = 80
unused           = 00
extSignature     = 29
シリアル番号     = 011FD86A
ボリュームラベル = HD-PSGU2
ファイルシステム = FAT32

総容量           = 159776031744


ルートディレクトリを覗いてみます。

DIR 0001
NAME     = HD-PSGU2   
ATTR     = 28 [ボリュームIDアーカイブ]
reserved = 00
clusterH = 0000
clusterL = 0000
size     = 00000000(0)

DIR 0002
NAME     = APP        
ATTR     = 10 [ディレクトリ]
reserved = 00
clusterH = 0000
clusterL = 0003
size     = 00000000(0)

DIR 0003 [削除済み]

DIR 0004 [削除済み]

DIR 0005 [削除済み]

DIR 0006
NAME     = DATA       
ATTR     = 10 [ディレクトリ]
reserved = 00
clusterH = 0000
clusterL = 000D
size     = 00000000(0)

DIR 0007 [削除済み]

DIR 0008 [削除済み]

DIR 0009
NAME     = DVD        
ATTR     = 10 [ディレクトリ]
reserved = 00
clusterH = 0000
clusterL = 0013
size     = 00000000(0)

DIR 0010 [削除済み]

DIR 0011 [削除済み]

DIR 0012 [削除済み]

DIR 0013
SEQ     = 41
CRC     = 21
name1   = [         ]
name2   = [           ]
name3   = [   ]

DIR 0014
NAME     = RECYCLED   
ATTR     = 16 [隠しシステムディレクトリ]
reserved = 00
clusterH = 0021
clusterL = 027D
size     = 00000000(0)

DIR 0015 [削除済み]

DIR 0016 [削除済み]

結構、削除済みのエントリが多いのに、ちょっと驚きました。
もしかして、クラスタの内容を使い切った時点で、
削除済みエントリの再利用を始めるのでしょうか???


未使用領域手前の状態

DIR 0068 [削除済み]

DIR 0069 [削除済み]

DIR 0070
SEQ     = 42
CRC     = 72
name1   = [         ]
name2   = [           ]
name3   = [   ]

DIR 0071
SEQ     = 01
CRC     = 72
name1   = [         ]
name2   = [           ]
name3   = [   ]

DIR 0072
NAME     = SYSTEM~1   
ATTR     = 16 [隠しシステムディレクトリ]
reserved = 00
clusterH = 0000
clusterL = 0004
size     = 00000000(0)

DIR 0073 [削除済み]

DIR 0074 [削除済み]

DIR 0075 [削除済み]

DIR 0076 [未使用]
DIR 0077 [未使用]

この状態で、[DUMMY.DAT]とか適当な名前で、サイズ64KBのファイルを作る。


作成後の状態

DIR 0072
NAME     = SYSTEM~1   
ATTR     = 16 [隠しシステムディレクトリ]
reserved = 00
clusterH = 0000
clusterL = 0004
size     = 00000000(0)

DIR 0073 [削除済み]

DIR 0074 [削除済み]

DIR 0075 [削除済み]

DIR 0076
NAME     = DUMMY   DAT
ATTR     = 20 [アーカイブ]
reserved = 00
clusterH = 000D
clusterL = 64BC
size     = 00010000(65536)

DIR 0077 [未使用]

追加された...
クラスタ番号は、[000D-64BC]。
該当箇所を調べてみると、[000D-64BD]となっている。
更に、その隣を調べてみると、[0FFF-FFFF]となっている。
ふむ、ちゃんと2クラスタ分(64KB)、連続で領域を確保してくれた模様。


実体の位置は、ルートディレクトリエントリが2クラスタ目になるわけだから、
(クラスタ番号 − 2)*64(セクタ)って事になるはず。
(877,756 - 2) * 64 = 56,146,256
ルートディレクトリまでが、76,265なので、合計で 56,252,521。
ここからの128セクタ(64KB)分に書き込めば良いわけだな。