業界トップクラスのデータ復旧率!最新の設備とベテランエンジニアが大切なデータを復旧・復元します。
特定のフォルダー以下のファイルを開けない。開こうとすると「このファイルは壊れています」という旨のメッセージが表示される。
論理障害と判定。
2週間程度
対象となったフォルダーのデータ600MB(3000ファイル)程度復旧
前回の続きです。
復旧対象のUSBメモリは、Directory Entryと呼ばれるファイルの情報を管理している部分のサイズ情報の破損のせいでファイルが開けないという状態でした。
また、FAT1と呼ばれるファイルのデータの割り当てを行う箇所も破損していることが分かりました。
正常なのはFAT2だけ。どうやって復旧を行うのか…。
まずはFATの特徴をおさらいします。
A: FATはファイルのデータの実体がどこにあるのかマッピングしている。
B: そのマッピングは鎖のように繋がっている。
FATが壊れた状態では、上記Aが出鱈目になってしまうので、仮に正確なファイルサイズが分かっても、ファイルの中身はぐちゃぐちゃに混ざった不正確なものになってしまいます。
そのため、最低限、FAT1の修復を行う必要があります。
FAT1とFAT2は本来同一のデータとなるはずなので、破損したFAT1をFAT2で上書きするだけでokです。
しかし、これだけでは足りません。
Directory Entryに記述されたファイルのサイズがおかしな値(4096バイト)になっているので、FATのマッピングがどれだけ正しくても、鎖を全部追ってくれず、そのサイズ分までしかデータを見てくれません。
開けるようなファイルにするには、どうしてもDirectory Entry内のファイルのサイズ情報も正しくする必要があります。
実は、この4096バイトというのも全く無関係な数字というわけではなく、今回の場合においては鎖1個分に相当するサイズなのです。
Directory Entryは、ファイルの名前や作成日時、サイズだけではなく、ファイルの割り当て場所を示すFAT内の鎖の最初の部分まで記述しています。
Directory Entryのサイズ情報がおかしくなった経緯をFATの鎖に注目して考えると、
①システムがDirectory Entryを通じて「鎖の最初の部分」を参照する
② 最初の鎖を見に行き、そこに記述してある次の鎖を追ったら、無効な値であった
③ 鎖の長さは1であるので、当該ファイルは鎖1個分のサイズである
④ Directry Entry内のファイルサイズが鎖1個分のサイズとして更新される
という事態になったのではないかと推測します。
鎖1個分のサイズが分かり(=4096バイト)、なおかつ、鎖の最初の部分が分かるのであれば、鎖の長さをカウントしながら鎖を追跡していけば、鎖の長さからファイルのサイズを逆算できます。
逆算したサイズは、ファイルシステムによりそのファイルに割り当てられている容量であり、これは鎖1個分のサイズの倍数になるので、正確なファイルサイズではありませんが、十分な大きさになるならファイルを開けそうです。
したがって、FAT2の正常なデータでFAT1を上書きし、さらに、FAT2から逆算したサイズになるようにDirectory Entryのサイズ情報を更新すれば、正確なデータではないにせよ、(カービングに頼らない)十分有用な復旧できるという寸法です。
では、その計算を行いたいところですが、そういったことができるツールがあるのかというと…。どこかに存在するのか、単に知らないだけなのか…。
少なくとも弊社で揃えている論理障害用のツール(多くのデータ復旧会社で使われているデファクトスタンダードなツールです)では対応していませんでした。
このような障害は実際には結構あるのではないかと思うのですが、案外対応していないようです。
というわけで、自分でそういうツールを作ることにしました。
(次回に続きます。)