業界トップクラスのデータ復旧率!最新の設備とベテランエンジニアが大切なデータを復旧・復元します。
特定のフォルダー以下のファイルを開けない。開こうとすると「このファイルは壊れています」という旨のメッセージが表示される。
論理障害と判定。
2週間程度
対象となったフォルダーのデータ600MB(3000ファイル)程度復旧
復旧対象のUSBフラッシュメモリをPCに接続してみたところ、USBメモリ自体は問題なく認識。
クローン作製も全くエラー無しで完了したので、物理障害ではなく、論理障害ということが分かりました。
実際に症状を確認してみると、確かにファイルが破損している旨のエラーが表示されます。
(2枚目はExcelファイルです。「はい」を押すと開けたように見えますが、何もデータは書かれていませんでした。)
論理障害用の復旧ツールで解析してみますが、特段問題は見当たりません。
そこで、カービングというファイルの種類ごとの特徴に基づいて復旧を行う手法を使うと、開けるファイルがたくさん出てきました。
これで復旧完了、お仕事おわり…
でもいいのですが、このカービングという手法で復旧されたファイルは、元のファイルの名前も分かりませんし、どのフォルダーの中にあったのかも分かりません。正常に復旧できず、壊れている可能性も十分あります。
お客様にとっても不便なものに違いないので、可能であればカービング以外の方法で復旧したいのです。
壊れているファイルをよく見てみると…
(ファイル名は見えないようにしました)
どれもファイルサイズが4096バイトと小さい値になっています(上の図の赤枠)。
理由が分かりました。壊れているファイルはどれもファイルサイズがおかしいのです。
4096バイトしかないエクセルやpdfファイルは通常考えられるサイズより明らかに小さいので、これらが開けないのは当然です。
さて原因が分かったところでどうやって復旧するのか…。
カービングを使用したときは多くの正常なファイルを復旧できたので、ファイルの実体データそのもの生きていることがわかります。
もう少し調査して、どこが壊れていて、どこが壊れていないのか詳しく見ていきますが、その前にファイルシステムというものについて説明します。
ファイルシステムというのは、簡単に言ってしまえば、ファイルのデータをどのようなルールに基づいて保管・管理するかという仕組みです。
たとえ話になりますが、管理されていない地域はどこかに建物があっても、それがどこにあって、どんな大きさで、いつ作られたのか誰にも分かりません。
そこで、これらの情報を管理したり区画整理したりすることで、どこにどんな建物があって、それがいつ作られたのか、どの区画は空いているのか分かるようにしてくれる役所があると便利です。
これをドライブやファイルに対して実現するのがファイルシステムであり、どのファイルがどの番地にあって、いつ作られて、どれくらいの大きさであるのか明確になっています。
エクスプローラーのプロパティ情報をみると、作成日時やサイズ等の情報が表示されます(番地までは見せてくれませんが…)。
これらはファイルデータの内部(上記のたとえで言えば建物の中)に存在するのではなく、ファイルシステムによる管理領域(上記のたとえで言えば役所)に記録されています。
また、その区画整理の仕方やルールは様々で、WindowsであればNTFS、MacであればHFSやAPFS、LinuxであればExt4やXFS、Btrfsといったものがあります。
今回の復旧対象のUSBメモリはFAT32というファイルシステムでした。
FAT32の構造はざっくり言うと次のようになっています。
図の語句について説明します。
BPB (= BIOS Parameter Block ) : ファイルの管理に関する全般的なパラメータが記録されています。
FAT (= File Allocation Table ) : このファイルシステムを象徴する部分です。ファイルのデータがどの番地に割り当てられているかマッピングしています。このマッピングの仕方が特徴的で、鎖のように繋がっています。鎖のある位置がデータの番地を表し、鎖そのものは次の鎖の位置を示しています。FAT2はFAT1のコピーです。
Directory Entry : ファイルごとの名前や作成日時、サイズ、ファイルの割り当て場所を示すFAT内の鎖の最初の部分を記述しています。
File Data : ファイルのデータの実体です。
Data Area : 通常のデータの記録に使われるFAT内の領域です。
LBA (= Logical Block Address ) : 番地のことです。
破損したファイルは、サイズがどれも4096バイトでおかしな値になっていました。
ファイルサイズの情報はDirectory Entryが管理していますから、本案件ではこのDirectory Entryの一部が壊れていることは明白です。(ファイルの名前等は問題ありません。)
しかし、入念に調べてみると…
左はFAT1のデータ、右は対応する番地のFAT2のデータです。(デジタルデータは0と1で構成されていますが、それらが並んでいるだけだと見づらいので16進数で表示しています。)
FAT2はFAT1のコピーであるので、本来は両者ともに一致するはずですが、随分と雰囲気が違います。
左のFAT1はランダムなデータ、右のFAT2はそろった感じがします。
実は正しい方のデータはFAT2で、FAT1の方は異常な書き込みをされてデータが破損しています。
FATは鎖のように繋がっています。
鎖は次の鎖の番号を示すので、隣り合う場所に同じファイルのデータが割り当てられている場合、隣り合う鎖は連番になります。
つまり、大きいファイルでそれが断片化されていないなら、FATの対応する位置には連番がずらっと並ぶのです。
ここでは、FAT2が連番になっているので、右のFAT2が正しい(可能性が高い)データと言えます。
(4つずつ値をとり、それぞれを右から左の順に並べ変えると、連番になっています。「01 F4 01 00 02 F4 01 00」は4つずつ値を取ると「01 F4 01 00」と「02 F4 01 00」で、それぞれ右から左に並べ変えると「00 01 F4 01」と「00 01 F4 02」となって連番になっています。)
本案件のUSBメモリはFAT1が破損していて、かつ Directory Entry内のサイズ情報もおかしくなっている、という状態です。
これは推測ですが、おそらく、次のような順に障害が発生したのではないかと予想します。
① FAT1が何らかの原因で異常書き込みされ、データが壊れる。(実はこの事象はよく見かけます。)
② 壊れたFAT1の情報をもとに、Directory Entryのサイズ情報が誤ったものに更新される。(実際にそうなるのかは知りません。推測です)
③ Directory Entryのサイズが間違っているので、実際とは異なるサイズとして扱われ、ファイルを開けない。
復旧用のツールはDirectory Entryに記述されたサイズが正しいと考えるので、通常の方法では復旧できません。
先述のカービングでは、サイズ等のDirectory Entryの情報は完全に無視されるので開ける形でファイルを復旧できますが、ファイル名等の情報も一緒に無視するので、どれがどのファイルなのか分からなくなります。
また、ファイルのサイズはファイルごとに固有の情報なので、Directory Entryのサイズ情報が壊れている場合、完全に元の状態には復旧できません。
ではどうやってファイルのサイズを取り戻し、ファイル名も保持した状態で開けるファイルを復旧するのか…?
その答えはFATの仕組みにあります。
(長くなったので次回に続きます)