パソコン活用研究マニアック道(アセンブラ、DOS、Windows、旧型PCの活用研究)

ファイルシステム超基本 −削除したファイルが復元できるなぞ


普通にWindowsを使用している分には、ほとんど”ファイルシステム”なんて意識することもありませんが、
削除したファイルを復元(復旧)できるソフト(「ファイナルデータ」とかが有名ですね)なんかを使うと、
どうして復元(復旧)できるのだろうと疑問に思ってしまったりすることがあるかもしれません。
あるいは、数種類出回っている復元(復旧)ソフトの機能の違いについてもっとよく知りたいと思ったら、
ファイルシステム”の知識は必須になります。

今回は、”ファイルシステム”について基本中の基本をまとめてみました。
本来は、Windowsのファイルシステムをとりあげるが本道ですが、Windowsのファイルシステムは複雑で
やさしく説明するのが難しいので、祖先のMS-DOS時代のファイルシステム(FAT12というやつ)で説明
いたします。FAT12でファイルシステムとは何?という概要がつかめれば、Windowsのファイルシステムも
格段に理解しやすくなるでしょう。

では、MS-DOSのフロッピーディスク(以下FDと略します)のファイルシステムをとりあげます。

1 ファイルシステム(FAT12)概要
MS-DOSのFDは以下のような領域に分かれています。
とりあえず、クラスタという言葉を覚えておいて下さい。クラスタというは、FDをいくつかの区画に区切り
ますが、その各区画のことを言います。クラスターは更にセクターという単位に分割されます。
MS-DOSの1.44Mフォーマットの場合、1セクターは512byte、9セクターで1クラスターになります。
MS-DOS以外のFDでは、これとは違った形式のフォーマットが採用されています。例えばFM-7/8の
場合は、FM-7/8復活作戦 Diskイメージファイル作成などを参照してみて下さい。

システム領域 システムが使う領域です。
ディスクの先頭 Sector に配置され、ディスクの情報と OS をロードするプログラム
( IPL ) を含む。
FAT領域 これが目録その1
FD内の各クラスタが使用中か、未使用か、各クラスタのつながりに関する情報
が格納される。
ディレクトリエントリ 目録その2
そのFDにあるファイルの、ファイル名、ファイルサイズ、作成日、ファイルの格納されている
先頭クラスタなどの情報があります。
データ領域 データ本体が格納される領域です。

システム領域は、今回は説明しません。
FATとディレクトリエントリが、いわゆるファイルがどこにあるのかを記述した住所録のような場所です。
そして、データ本体はデータ領域に格納されます。

2 ディレクトリエントリ
まずは、ディレクトリエントリからみてみましょう。
DOSプロンプトでdebugを使って、FDに直接アクセスして読み込んで見ました。

A:\>debug
-L 0 0 13 1
-D 00 FF
364A:0000 41 62 00 63 00 74 00 32-00 35 00 0F 00 87 30 00 Ab.c.t.2.5....0.
364A:0010 2E 00 6C 00 7A 00 68 00-00 00 00 00 FF FF FF FF ..l.z.h.........
364A:0020 42 43 54 32 35 30 20 20-4C 5A 48 20 00 59 27 87 BCT250 LZH .Y'.
364A:0030 8C 2A 29 34 00 00 F3 83-8C 2A 02 00 33 81 02 00 .*)4.....*..3...
364A:0040 41 69 00 6E 00 73 00 74-00 6D 00 0F 00 B2 73 00 Ai.n.s.t.m....s.
364A:0050 69 00 2E 00 30 00 30 00-31 00 00 00 00 00 FF FF i...0.0.1.......
364A:0060 49 4E 53 54 4D 53 49 20-30 30 31 20 00 4C 2B 87 INSTMSI 001 .L+.
364A:0070 8C 2A 29 34 00 00 C1 86-8C 2A 43 01 08 8F 00 00 .*)4.....*C.....
364A:0080 41 69 00 6E 00 73 00 74-00 6D 00 0F 00 E3 73 00 Ai.n.s.t.m....s.
364A:0090 69 00 2E 00 42 00 43 00-54 00 00 00 00 00 FF FF i...B.C.T.......
364A:00A0 49 4E 53 54 4D 53 49 20-42 43 54 20 00 8A 2C 87 INSTMSI BCT ..,.
364A:00B0 8C 2A 29 34 00 00 C1 86-8C 2A 8B 01 3E 00 00 00 .*)4.....*..>...
364A:00C0 48 45 4C 4C 4F 20 20 20-54 58 54 20 18 11 23 66 HELLO TXT ..#f
364A:00D0 9D 34 9D 34 00 00 24 66-9D 34 8C 01 05 00 00 00 .4.4..$f.4......

(図1)


00C0と00CDの行を見てみましょう。
まずは00C0です。
HELLO TXTというファイル名が記録されています。ファイル属性は20hですね。これは通常の
ファイルということです。

0 1 2 3 4 5 6 7 8 9 A B C D E F
00C0 48 45 4C 4C 4F 20 20 20 54 58 54 20 18 11 23 66
H E L L O T X T
ファイル名 ファイル属性

00D0をみてみましょう。ここもHELLO.TXTに関する情報が記録されています。
ファイルの更新日や先頭クラスタ(018Ch)やファイルサイズ(5バイト)の情報があります。

0 1 2 3 4 5 6 7 8 9 A B C D E F
00D0 9D 34 9D 34 00 00 24 66 9D 34 8C 01 05 00 00 00
ファイル更新時刻 ファイル更新日 先頭クラスタ ファイルサイズ


3 FAT領域
次はFAT領域をDebugで読み込んでみます。

-L 0 0 1 1
-D 00 FF
364A:0000 F0 FF FF 03 40 00 05 60-00 07 80 00 09 A0 00 0B ....@..`........
364A:0010 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 ......... ..@..`
364A:0020 01 17 80 01 19 A0 01 1B-C0 01 1D E0 01 1F 00 02 ................
364A:0030 21 20 02 23 40 02 25 60-02 27 80 02 29 A0 02 2B ! .#@.%`.'..)..+
364A:0040 C0 02 2D E0 02 2F 00 03-31 20 03 33 40 03 35 60 ..-../..1 .3@.5`
364A:0050 03 37 80 03 39 A0 03 3B-C0 03 3D E0 03 3F 00 04 .7..9..;..=..?..
364A:0060 41 20 04 43 40 04 45 60-04 47 80 04 49 A0 04 4B A .C@.E`.G..I..K
364A:0070 C0 04 4D E0 04 4F 00 05-51 20 05 53 40 05 55 60 ..M..O..Q .S@.U`
364A:0080 05 57 80 05 59 A0 05 5B-C0 05 5D E0 05 5F 00 06 .W..Y..[..].._..
364A:0090 61 20 06 63 40 06 65 60-06 67 80 06 69 A0 06 6B a .c@.e`.g..i..k
364A:00A0 C0 06 6D E0 06 6F 00 07-71 20 07 73 40 07 75 60 ..m..o..q .s@.u`
364A:00B0 07 77 80 07 79 A0 07 7B-C0 07 7D E0 07 7F 00 08 .w..y..{..}.....
364A:00C0 81 20 08 83 40 08 85 60-08 87 80 08 89 A0 08 8B . ..@..`........
364A:00D0 C0 08 8D E0 08 8F 00 09-91 20 09 93 40 09 95 60 ......... ..@..`
364A:00E0 09 97 80 09 99 A0 09 9B-C0 09 9D E0 09 9F 00 0A ................
364A:00F0 A1 20 0A A3 40 0A A5 60-0A A7 80 0A A9 A0 0A AB . ..@..`........
-L 0 0 2 1
-D 00 FF
364A:0000 15 57 81 15 59 A1 15 5B-C1 15 5D E1 15 5F 01 16 .W..Y..[..].._..
364A:0010 61 21 16 63 41 16 65 61-16 67 81 16 69 A1 16 6B a!.cA.ea.g..i..k
364A:0020 C1 16 6D E1 16 6F 01 17-71 21 17 73 41 17 75 61 ..m..o..q!.sA.ua
364A:0030 17 77 81 17 79 A1 17 7B-C1 17 7D E1 17 7F 01 18 .w..y..{..}.....
364A:0040 81 21 18 83 41 18 85 61-18
87 81 18 89 A1 18 FF .!..A..a........
364A:0050
FF FF FF 0F 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

(図2)

FATは、3バイトで2クラスタ分の状態(FATエントリ値という)を表示しており、説明すると結構面倒
な話なので割愛しますが、図2の赤の部分は、FAT番号(=クラスタ番号)186から18Dまでのクラスタ
の状態(FATエントリ値)を表しています。分析してわかりやすく表示すると以下の通りです。

FAT番号 186 187 188 189 18A 18B 18C 18D
FATエントリ値 187 188 189 18A FFF FFF FFF 000

FATエントリ値は以下のルールでつけらてています。
000 未使用クラスタ
FFF ファイルの最後
その他の数字 ファイルの続きが入っている次のクラスタ番号

このルールで分析すると、クラスタ186〜18Aはひつ続きのファイルが連続してあります。18Bと18C
には1クラスタしか使用しない小さなファイルがそれぞれあることがわかります。
図1のディレクトリエントリとあわせて分析すると、18Bにあるのは、INSTMSI.BCTというファイルで、
18CにあるのがHELLO.TXTであることがわかります。18D以降は未使用であることがわかります。


4 削除

hello.txtを削除した後のディレクトリエントリです。
どこがちがうでしょうか。
ファイル名 Hello.txtの 'H'の部分が48hからE5hになっただけですね。
削除しても、ただファイル名の先頭に削除マーク(E5h)がつくだけで、データ本体が抹消される
わけではないのです。

-L 0 0 13 1
-D 00 FF
364A:0000 41 62 00 63 00 74 00 32-00 35 00 0F 00 87 30 00 Ab.c.t.2.5....0.
364A:0010 2E 00 6C 00 7A 00 68 00-00 00 00 00 FF FF FF FF ..l.z.h.........
364A:0020 42 43 54 32 35 30 20 20-4C 5A 48 20 00 59 27 87 BCT250 LZH .Y'.
364A:0030 8C 2A 29 34 00 00 F3 83-8C 2A 02 00 33 81 02 00 .*)4.....*..3...
364A:0040 41 69 00 6E 00 73 00 74-00 6D 00 0F 00 B2 73 00 Ai.n.s.t.m....s.
364A:0050 69 00 2E 00 30 00 30 00-31 00 00 00 00 00 FF FF i...0.0.1.......
364A:0060 49 4E 53 54 4D 53 49 20-30 30 31 20 00 4C 2B 87 INSTMSI 001 .L+.
364A:0070 8C 2A 29 34 00 00 C1 86-8C 2A 43 01 08 8F 00 00 .*)4.....*C.....
364A:0080 41 69 00 6E 00 73 00 74-00 6D 00 0F 00 E3 73 00 Ai.n.s.t.m....s.
364A:0090 69 00 2E 00 42 00 43 00-54 00 00 00 00 00 FF FF i...B.C.T.......
364A:00A0 49 4E 53 54 4D 53 49 20-42 43 54 20 00 8A 2C 87 INSTMSI BCT ..,.
364A:00B0 8C 2A 29 34 00 00 C1 86-8C 2A 8B 01 3E 00 00 00 .*)4.....*..>...
364A:00C0
E5 45 4C 4C 4F 20 20 20-54 58 54 20 18 11 23 66 .ELLO TXT ..#f
364A:00D0 9D 34 9D 34 00 00 24 66-9D 34 8C 01 05 00 00 00 .4.4..$f.4......

FAT領域の方はどうでしょうか

-L 0 0 1 1
-D 00 FF
364A:0000 F0 FF FF 03 40 00 05 60-00 07 80 00 09 A0 00 0B ....@..`........
364A:0010 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 ......... ..@..`
364A:0020 01 17 80 01 19 A0 01 1B-C0 01 1D E0 01 1F 00 02 ................
364A:0030 21 20 02 23 40 02 25 60-02 27 80 02 29 A0 02 2B ! .#@.%`.'..)..+
364A:0040 C0 02 2D E0 02 2F 00 03-31 20 03 33 40 03 35 60 ..-../..1 .3@.5`
364A:0050 03 37 80 03 39 A0 03 3B-C0 03 3D E0 03 3F 00 04 .7..9..;..=..?..
364A:0060 41 20 04 43 40 04 45 60-04 47 80 04 49 A0 04 4B A .C@.E`.G..I..K
364A:0070 C0 04 4D E0 04 4F 00 05-51 20 05 53 40 05 55 60 ..M..O..Q .S@.U`
364A:0080 05 57 80 05 59 A0 05 5B-C0 05 5D E0 05 5F 00 06 .W..Y..[..].._..
364A:0090 61 20 06 63 40 06 65 60-06 67 80 06 69 A0 06 6B a .c@.e`.g..i..k
364A:00A0 C0 06 6D E0 06 6F 00 07-71 20 07 73 40 07 75 60 ..m..o..q .s@.u`
364A:00B0 07 77 80 07 79 A0 07 7B-C0 07 7D E0 07 7F 00 08 .w..y..{..}.....
364A:00C0 81 20 08 83 40 08 85 60-08 87 80 08 89 A0 08 8B . ..@..`........
364A:00D0 C0 08 8D E0 08 8F 00 09-91 20 09 93 40 09 95 60 ......... ..@..`
364A:00E0 09 97 80 09 99 A0 09 9B-C0 09 9D E0 09 9F 00 0A ................
364A:00F0 A1 20 0A A3 40 0A A5 60-0A A7 80 0A A9 A0 0A AB . ..@..`........
-L 0 0 2 1
-D 00 FF
364A:0000 15 57 81 15 59 A1 15 5B-C1 15 5D E1 15 5F 01 16 .W..Y..[..].._..
364A:0010 61 21 16 63 41 16 65 61-16 67 81 16 69 A1 16 6B a!.cA.ea.g..i..k
364A:0020 C1 16 6D E1 16 6F 01 17-71 21 17 73 41 17 75 61 ..m..o..q!.sA.ua
364A:0030 17 77 81 17 79 A1 17 7B-C1 17 7D E1 17 7F 01 18 .w..y..{..}.....
364A:0040 81 21 18 83 41 18 85 61-18 87 81 18 89 A1 18 FF .!..A..a........
364A:0050 FF FF 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
364A:00F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

364A:0050 FF FF FF 0F 00 00 00 00-00 00 00 00 00 00 00 00
の部分が =>
364A:0050 FF FF 00 00 00 00 00 00-00 00 00 00 00 00 00 00
になっていますね。
細かい説明は省きますが、変更されたFF 0F 00==> 00 00 00の部分は
使用中のクラスタ(ファイルの最後のクラスタ)==>未使用のクラスタ
というように変更されています。
わかりやすく分析すると以下の通りです。18CがFFF→000(未使用)になりました。

FAT番号 186 187 188 189 18A 18B 18C 18D
FATエントリ値 187 188 189 18A FFF FFF 000 000


このように、削除では、ディレクトリエントリの一部とFATが書き換わるだけで、ファイル本体自体
はそのまま残っているのです。従って、ディレクトリエントリとFATを適切に書き戻してやれば、
データは復元(復旧)できるわけです。と言っても、手作業でそれをやるのは、それなりの知識と
根気が必要ですが。それを自動的に解析してやってくれるのが、復元ツールなわけです。
逆に言うと、OSから削除してもデータ本体は残っているので、完全にデータ本体まで消すには、
データ抹消ツールが必要になるわけです。そうしないと、データは復元(復旧)されてしまう可能性
があるわけです。

*昔は、といってもFM-7/8など8bit機の時代ですが、よく雑誌の記事を参考にしながら、自分で
半自動のデータ復元ツールなどを作ったものです。

5 フォーマット 
ちなみに、フォーマットをかけると全てのファイルが消えてFDがまっさらになってしまいますが、
フォーマットをかけるとFDの中身はどうなるのでしょうか。

フォーマットにはクイックフォーマットと通常フォーマットがあありますね。FDの場合は、クイックフォーマット
は、ディレクトリエントリとFATを00で埋めますが、データ領域はそのまま残ります。従って、復元ソフト
で復元(復旧)が可能です。商用の復元ソフト(ファイナルデータなど)の機能は強力で、ディレクトリエントリ
とFATがまっさらでも、データ領域だけを見て、ファイルのはじめと終わりを検出し、自動でファイルを復元
してくれます。ファイル名などの情報はまっさらになっていますので、ファイル名等はA001のように適当な
連番になってしまいますが。

通常フォーマットをかけると、FDの場合はデータ領域も00で埋められます。従って、こうなるといかに
復元ソフトでもどうしようもありません。

ちなみに、HDD(ハードディスク)の場合は、通常フォーマットをかけてもディレクトリエントリとFATが
まっさらになるだけで、データ領域はそのまま残ります。従って、フォーマットしても復元ソフトで、
データの復元(復旧)が可能です。
このためPCを廃棄する時に、フォーマットをかけただけでは、データを復元されてしまう可能性が大です。
是非、データ抹消ツールで完璧に消してから捨てましょう。

●関連ページ
データ復元裏技 上書きしたデータの復元

TopPage

inserted by FC2 system