その2でFATの切り出しまで完了。
(2b)ディレクトリ情報の切り出し
FAT領域の次、ルートディレクトリはセクタ251〜282になる。
切り出してみると...どうみても壊れている。
FATも一部データが破損していたようだが、エクスプローラ上で文字化けしている第1の原因はこのルートディレクトリの破損のようだ。仕方ないのでルートディレクトリはあきらめる。
FATファイルシステムの場合は、サブディレクトリもルートディレクトリと同じ構成になっているが、ルートディレクトリと違って第1エントリには必ず「.」(自ディレクトリ)が、第2エントリには必ず「..」(親ディレクトリ)が登録されている。
なおディレクトリエントリは次のような構成になっている。1エントリは32バイトから構成されている。
オフセット |
内容 |
00h〜07h |
ファイル名(8文字) |
08h〜0Ah |
拡張子(3文字) |
0Bh |
属性 |
0Ch |
reserved |
0Dh |
ファイル作成時刻(ミリ秒) |
0Eh〜0Fh |
ファイル作成時刻(時分秒) |
10h〜11h |
ファイル作成日付 |
12h〜13h |
最終アクセス日 |
14h〜15h |
開始クラスタ番号(上位) FAT12,FAT16では常に0 |
16h〜17h |
最終更新時刻 |
18h〜19h |
最終更新日付 |
1Ah〜1Bh |
開始クラスタ番号(下位) |
1Ch〜1Fh |
ファイルサイズ |
ディレクトリを抜き出すために "2E 20 20 20 20 20 20 20 20 20 20" というバイナリ列で全セクタを検索する。これはサブディレクトリの第1エントリに必ず存在する(はず)の自ディレクトリ "." を表す。
C:\temp\070526復元\070526.000 : 00004000
C:\temp\070526復元\070526.000 : 00008000
C:\temp\070526復元\070526.000 : 0000C000
C:\temp\070526復元\070526.000 : 00010000
C:\temp\070526復元\070526.003 : 00388000
C:\temp\070526復元\070526.003 : 00390000
C:\temp\070526復元\070526.003 : 00394000
C:\temp\070526復元\070526.078 : 00354000
C:\temp\070526復元\070526.078 : 00360000
C:\temp\070526復元\070526.081 : 001F4000
C:\temp\070526復元\070526.081 : 00200000
C:\temp\070526復元\070526.081 : 00204000
12件見つかりました
これらは全てクラスタ境界(4000h単位)にあるので、全部サブディレクトリと推測される。クラスタ境界に無いものが見つかった場合は、関係ないデータの可能性が高いので基本的には無視する。
一つ一つ、ディレクトリデータとして切り出していく。
「.」「..」のエントリにも、開始クラスタ番号が格納されている。
「.」は自ディレクトリなので、今参照しているデータ自体のクラスタ番号を表しているはずである。もしクラスタ番号が一致しない場合は、参照しているディレクトリは、すでに削除された等、無効の可能性がある(それでも復元には役立つこともある)。
「..」は親ディレクトリのクラスタ番号を表しているので、この情報から親ディレクトリを知り、ディレクトリツリーを復元することができる。
C:\temp\070526復元\070526.000 : 00004000
(クラスタ#0002h…0*256+00004000h/4000h+1)
. -D---- 0002
.. -D---- 0000
__AVP AD---- 0005
C:\temp\070526復元\070526.000 : 00008000
(クラスタ#0003h…0*256+00008000h/4000h+2)
ファイル名の先頭1バイトが E5h の場合は、削除されたファイル/ディレクトリを示す。この場合は MOL001 というディレクトリが削除されたと推測される。
. -D---- 0003
.. -D---- 0000
?OL001 AD---- 0005
C:\temp\070526復元\070526.000 : 0000C000
(クラスタ#0004h…0*256+0000C000h/4000h+2)
. -D---- 0004
.. -D---- 0003
C:\temp\070526復元\070526.000 : 00010000
(クラスタ#0005h…0*256+00010000h/4000h+2)
. -D---- 0005
.. -D---- 0002
MARKLIST.ZDT A----- 03E1 00000008
C:\temp\070526復元\070526.003 : 00388000
(クラスタ#03E3h…3*256+00388000h/4000h+1)
. -D---- 03E3
.. -D---- 0000
ORDER.NJB A----- 03E4 00000011
TRANSMRK.NJB ------ 4ED2 000012F8
C:\temp\070526復元\070526.003 : 00390000
(クラスタ#03E5h…3*256+00390000h/4000h+1)
. -D---- 03E5
.. -D---- 0000
100NIKON -D---- 03E6
C:\temp\070526復元\070526.003 : 00394000
(クラスタ#03E6h…3*256+00394000h/4000h+1)
. -D---- 03E6
.. -D---- 03E5
DSCN0584.JPG A----- 03E7 00215112
DSCN0585.JPG A----- 046E 00226AFC
DSCN0586.JPG A----- 04F9 00237CCF
DSCN0587.JPG A----- 0588 00234809
DSCN0588.JPG A----- 0671 00219675
DSCN0589.JPG A----- 069F 0021D938
DSCN0590.JPG A----- 0728 0020DFFF
DSCN0591.JPG A----- 07AD 0022B909
DSCN0592.JPG A----- 0839 0022F45B
DSCN0593.JPG A----- 08C6 002590C7
DSCN0594.JPG A----- 095E 00220218
DSCN0595.JPG A----- 09E8 00208D98
DSCN0596.JPG A----- 0A6C 00222611
DSCN0597.JPG A----- 0AF6 0022486F
DSCN0598.JPG A----- 0B81 00224320
DSCN0599.JPG A----- 0C0C 0025A45F
DSCN0600.JPG A----- 0CA4 00232C6E
DSCN0601.JPG A----- 0D32 0020A81C
DSCN0602.JPG A----- 0DB6 00236D4A
DSCN0603.JPG A----- 0E45 002568FC
DSCN0604.JPG A----- 0EDC 00238E0B
DSCN0605.JPG A----- 0F6C 00229580
DSCN0606.JPG A----- 0FF8 00234E28
DSCN0607.JPG A----- 1087 002244B9
DSCN0608.JPG A----- 1112 002299AD
DSCN0609.JPG A----- 119E 0021DF3D
DSCN0610.JPG A----- 1226 001FE99E
DSCN0611.JPG A----- 12A7 0018711F
DSCN0612.JPG A----- 1309 00157CEC
DSCN0613.JPG A----- 135F 00177BC7
DSCN0614.JPG A----- 13BE 0022CC19
DSCN0615.JPG A----- 144B 002396D4
DSCN0616.JPG A----- 14DB 0022F17D
DSCN0617.JPG A----- 1568 00205665
DSCN0618.JPG A----- 15EB 001EA9C6
DSCN0619.JPG A----- 1667 002262BE
DSCN0620.JPG A----- 16F2 0021449B
DSCN0621.JPG A----- 1779 002284B9
DSCN0622.JPG A----- 1805 0023E44A
DSCN0623.JPG A----- 1896 002314E3
DSCN0624.JPG A----- 1924 0023DB98
DSCN0625.JPG A----- 19B5 0022F9BC
DSCN0626.JPG A----- 1A42 0020E8A8
DSCN0627.MOV A----- 1AC7 017A01F6
DSCN0628.JPG A----- 20B1 0024D677
DSCN0629.JPG A----- 2146 0022439A
DSCN0630.JPG A----- 21D1 0022B4DC
DSCN0631.JPG A----- 225D 0021A5E6
DSCN0632.JPG A----- 22E5 00250788
DSCN0633.JPG A----- 237B 002243DA
DSCN0634.JPG A----- 2406 00235962
DSCN0635.JPG A----- 2495 0023995E
DSCN0636.JPG A----- 2525 00232A21
DSCN0637.JPG A----- 25B3 0023ED40
DSCN0638.JPG A----- 2644 00224339
DSCN0639.JPG A----- 26CF 001FD498
DSCN0640.JPG A----- 2750 00228337
DSCN0641.JPG A----- 27DC 001C594F
DSCN0642.JPG A----- 284F 0023F471
DSCN0643.JPG A----- 28E0 00215B4C
DSCN0644.MOV A----- 2967 00E6E13A
DSCN0645.MOV A----- 2D04 01AF105E
DSCN0646.MOV A----- 33C2 03A0149E
DSCN0647.MOV A----- 4244 0323621A
DSCN0648.MOV A----- 4ED3 00AAB63A
C:\temp\070526復元\070526.078 : 00354000
(クラスタ#4ED6h…78*256+00354000h/4000h+1)
クラスタ番号が一致しない。
. -D---- 517E
.. -D---- 0000
ORDER.NJB A----- 5180 00000011
C:\temp\070526復元\070526.078 : 00360000
(クラスタ#4ED9h…78*256+00360000h/4000h+1)
クラスタ番号が一致しない。
. -D---- 5181
.. -D---- 0000
100NIKON -D---- 5182
C:\temp\070526復元\070526.081 : 001F4000
(クラスタ#517Eh…81*256+001F4000h/4000h+1)
. -D---- 517E
.. -D---- 0000
ORDER.NJB A----- 5180 00000011
TRANSMRK.NJB ------ 53F2 00000308
C:\temp\070526復元\070526.081 : 00200000
(クラスタ#5181h…81*256+00200000h/4000h+1)
. -D---- 5181
.. -D---- 0000
100NIKON -D---- 5182
C:\temp\070526復元\070526.081 : 00204000
(クラスタ#5182h…81*256+00204000h/4000h+1)
. -D---- 5182
.. -D---- 5181
DSCN0648.JPG A----- 5183 002674B8
DSCN0649.JPG A----- 521D 00268071
DSCN0650.JPG A----- 52B8 0027153A
DSCN0651.JPG A----- 5355 00273AB5
これらの情報からディレクトリツリーを復元する。
ルート
+[0003] ???
+[0004] ?OL001
+[0002] ???
+[0005] __AVP
+[03E3] ???
+[03E5] ???
+[03E6] 100NIKON
+[517E] ???
+[8181] ???
+[5182] 100NIKON
クラスタ#4ED6と#4ED9のサブディレクトリはクラスタ番号が一致しないため異常な状態と思われる。内容が似ているorまったく同じクラスタが存在するので、更新前のサブディレクトリ(削除済み)の可能性がある。
クラスタ#3-#4は、削除ディレクトリを含むので以前別の用途で使って削除したディレクトリと思われる。
ルートディレクトリが生きている場合はちゃんとルートディレクトリ直下のディレクトリ名もわかる。今回はルートディレクトリが残っていないので、正常なSDカードの情報を元にルートディレクトリ直下のディレクトリ名を推測する。
ルート
+[0002] ???
+[0005] __AVP
+[03E3] MISC
+[03E5] DCIM
+[03E6] 100NIKON
+[517E] MISC
+[8181] DCIM
+[5182] 100NIKON
クラスタ#2,#5も、以前別の用途で使って削除したサブディレクトリと思われる。正常なS10のSDカードには存在しない。
MISC、DCIM-100NIKONがダブっている。おそらく最初のものが破損してアクセスできなくなったために2つ目のものが作られたと考えられる。
また、1つめの100NIKON内にある(はずの)DSCN0648.MOVと2つ目の100NIKON内にある(はずの)DSCN0648.JPGは、ファイル名部分がダブっているため、DSCN0648.MOVに書込みを行っている最中または直後にカードデータの破損が発生した可能性がある。(デジカメのF/Wがファイル名のカウントアップに失敗している)
つづく!