実際に見てみよう!!
一通り、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)分に書き込めば良いわけだな。