ファイルが不思議なほど空です。回復するオプション?


9

削除されたファイルの復元に関するいくつかの投稿を見てきましたが、この状況は異なります。妻にはJournal.odtというファイルがあり、子供たちに関する特別な思い出など、多くの重要な個人情報が保存されていました。先日彼女がOpenOfficeでそれを開こうとしたとき、それはフォーマットについて文句を言いました。私は彼女のヒットキャンセルとバックアウトをさせました。私catがファイルするとき、それは完全に空です。lsファイルが0バイトであると言います。

彼女が誤ってファイル内のすべてのテキストを選択し、バックスペースを押して保存した場合でも、ファイルにはOpenOfficeメタ情報が残っています。

私はすぐに彼女のラップトップをシャットダウンして、何かを思いつくまでディスクに変更を加えないようにしました。

私は過去にdd生のテキストをディスクから回復するために使用するなどのいくつかの複雑なことをしましたが、私はここで何をすべきかわかりません。odtファイルはフラットテキストではないので、ディスク全体をgrepでパイプ処理することはできません。

任意の提案をいただければ幸いです。

また、何が問題だったのかについて誰かが洞察を持っているなら、私はそれを聞きたいです。

ありがとう


1
ファイルが誤って削除された場合などは異なりますが、テキストエディターなどでファイルを保存すると、「インプレース」で書き込みが行われ、フォレンジック強度の回復で回復できたものはすべて効果的にワイプされます。システムをすぐにシャットダウンしなかった方がよかったのですが、Ctrl + Zキー(Open Officeの「元に戻す」機能に組み込まれています)を数回押すと問題が修正されたと思います。
Tim

@ティム私はあなたの要点を理解していますが、残念ながらファイルは数日前に空にされていました。ファイルの最終変更時刻は数日前です。私の説明では、彼女がオブジェクト指向でそれを開いたとき、それはすでに空でした。ありがとう。
jcbwlkr

2
死んだ馬を倒したり、倒れた男を蹴ったりしようとはしていませんが、この経験からバックアップソリューションを検討できると思います。Linux対応のシンプルなバックアップアプリケーションについては、「Areca Backup」をご覧ください。
Tim

おそらくディスクがいっぱいですか?確認df -h
jippie 2012

@Timファイルが0バイトの場合、OOドキュメントではありません。Ctrl+ZファイルがOOによってそのまま保存されなかったので、何もしなかったでしょう。@ jacobwalker0814 ODTファイルはzipファイルであるため、testdiskなどの回復ツールはそれらを見つける可能性があります。ただし、保証はありません。データがまだ存在する場合でも、他の多くのzipファイルを調べなければならない場合があります。そして将来のために、バックアップしてください!
Gilles「SO-悪をやめる」

回答:


3

ext3ファイルシステムを使用している場合は、Carlo WoodのHOWTOに従ってください。

一言で言えば、

  • ext3grep $ IMAGE --ls --inode 2を使用します| grep your_fileは、uが探しているファイルを検索します($ IMAGEは、/ dev / sda2などのurパーティションです)。
  • 未割り当て領域のジャーナルを含むファイルシステムブロックを見つけます。
  • 以前に見つかったブロックを参照するすべてのジャーナル記述子を見つけます。
  • ddでブロックをコピーします。
  • ファイルを編集して、末尾のゼロを削除します。
  • どこにいてもファイルを猫

ソースから:

「章手動リカバリの例

次の例では、小さなファイルを手動で復元します。スペースを節約し、例を読みやすくするために、部分的な出力のみが示されています。

ext3grep $ IMAGE --ls --inodeを使用して、リカバリするファイルの名前を見つけます。

$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Thu Feb 7 03:41:43 2008 drwxr-xr-x carlo

$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $' | head -n 1 34 35 d 309540 D 1202352104 Thu Feb 7 03:41:44 2008 drwxr-xr-x bin

$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Thu Feb 7 03:24:53 2008 rrwxr-xr-x start_azureus

明らかに、iノード309631は消去され、このファイルのブロック番号はありません。

$ ext3grep $ IMAGE --print --inode 309631 [...] Inode is Unallocated Group:19 Generation Id:2771183319 uid / gid:1000/1000 mode:rrwxr-xr-x size:0 num of links:0セクタ: 0(-> 0間接ブロック)。

Inode Times:Accessed:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deletion time:1202351093 = Thu 2008年2月7日03:24:53

直接ブロック:

したがって、ジャーナルでそれより古いコピーを探すようにします。最初に、このiノードを含むファイルシステムブロックを見つけます。

$ ext3grep $ IMAGE --inode-to-block 309631 | grepは、Inode 309631がブロック622598のオフセット0xf00に常駐します。

次に、ブロック622598を参照するすべてのジャーナル記述子を見つけます。

$ ext3grep $ IMAGE --journal --block 622598 [...]ブロック622598を参照するジャーナル記述子:4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 4381707 1465 4381709 2132 4381755 2945 4381961 4382137 6672 4382138 7536 4382139 7984 4382140 8931

つまり、シーケンス番号4381294のトランザクションには、ブロック26582にブロック622598のコピーがあり、以下同様です。一番下の最大のシーケンス番号は、ディスクに書き込まれた最後のデータである必要があります。したがって、ブロック8931は現在のブロック622598と同じである必要があります。最後の削除されていないコピーを見つけるには、一番下から始めて作業する必要があります上向き。

そのようなブロックを印刷しようとすると、ext3grepは、それがiノードテーブルのブロックであることを認識し、32のiノードすべての内容を出力します。ただし、iノード309631のみを表示したいだけです。したがって、スマートgrepを使用します。

$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Generation Id:2771183319 uid / gid:1000/1000モード:rrwxr-xr-xサイズ:0リンクの数:0セクター:0(-> 0間接ブロック)。

Inode Times:Accessed:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deletion time:1202351093 = Thu 2008年2月7日03:24:53

直接ブロック:

これは確かにブロック622598で見たのと同じです。次に、削除時間が0のシーケンス番号が見つかるまで、小さいシーケンス番号を調べます。最初に見つかったもの(ボトムアップ)はブロック6073です。

$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Generation Id:2771183319 uid / gid:1000/1000モード:rrwxr-xr-xサイズ:40リンクの数:1セクター:8(-> 0間接ブロック)。

Inode Times:Accessed:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified:1189688692 = Thu Sep 13 15:04:52 2007 Deletion time:0

直接ブロック:645627

上記は自動化されており、コマンドラインオプション--show-journal-inodesを使用すると、はるかに高速に実行できます。このオプションは、iノードが属するブロックを検出し、そのブロックのすべてのコピーをジャーナルで検出し、その後、これらの各ブロックから要求されたiノードのみを出力します(ご存知のとおり、各iノードには32のiノードが含まれます)。 :

$ ext3grep $ IMAGE --show-journal-inodes 309631グループ数:75最小/最大ジャーナルブロック:1115/35026ジャーナル記述子を読み込んでいます...完了ジャーナルトランザクション4381435が循環し、一部のデータブロックがこのトランザクションで失われた可能性があります。ジャーナル内の記述子の数:30258; 最小/最大シーケンス番号:4379495/4382264ジャーナルで見つかったiノード309631のコピー:

-------------- Inode 309631 ----------------------- Generation Id:2771183319 uid / gid:1000/1000モード:rrwxr-xr-xサイズ:0リンクの数:0セクター:0(-> 0間接ブロック)。

Inode Times:Accessed:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deletion time:1202351093 = Thu 2008年2月7日03:24:53

直接ブロック:

-------------- Inode 309631 ----------------------- Generation Id:2771183319 uid / gid:1000/1000モード:rrwxr-xr-xサイズ:40リンクの数:1セクター:8(-> 0間接ブロック)。

Inode Times:Accessed:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified:1189688692 = Thu Sep 13 15:04:52 2007 Deletion time:0

直接ブロック:645627

ファイルは確かに小さいです:1ブロックだけ。前に示したように、このブロックをddでコピーします。

$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 of = block.645627 1 + 0レコード、1 + 0レコード、4096バイト(4.1 kB)コピー、0.0166104秒、247 kB / s

次に、ファイルを編集して末尾のゼロを削除するか、最初の40バイト(ファイルの指定サイズ)をコピーします。

$ dd if = block.645627 bs = 1 count = 40 of = start_azureus 40 + 0 records in 40 + 0 records out 40 bytes(40 B)copy、0.000105397 seconds、380 kB / s

$ cat start_azureus cd / usr / src / azureus / azureus ./azureus&

回復した!」


調べてみたいのですが、リンクが切れているようです。
jcbwlkr

3
私には死んでいないようです。
リスター氏

うん、私もそれにアクセスできます。
java_xof 2012

現在は正常に機能しています。それは間違いなく以前ではなかった。知るか?ありがとう、java。見てみます。
jcbwlkr 2012

問題ありません。これがあなたを助けてくれることを願っています。犯罪はありませんが、妻<->コンピュータの相互作用について知っています。;)
java_xof

2

testdiskとphotorecを試してみてください。しかし、私があなたの記述を理解する方法は、おそらく定期的なバックアップの価値を知るのが難しい方法です。また、ハードディスクがさらに変更されないようにするために、CDから起動することもできます。私は個人的にはこのためにシステムレスキューディスクが好きですが、主にコマンドラインベースです。


1

デジタルフォレンジック用の特別なLinuxディストリビューションであるCaineを使用します。それはファイルとハードディスクの回復のためのたくさんのツールです。


ありがとう。そのディストリビューションを調べて、何かあるかどうかを確認します。特定のツールや問題に対処する方法についての推奨はありますか?ここでの問題は、多くのツールが対処しているように見えるファイルが削除されなかったことです。内容を失っただけです。
jcbwlkr

1
Open Officeは、以前に保存されたドキュメントを含む隠しファイルを作成することがあります。運が良ければ、たとえば "extundelete"または "testdisk"を使用して回復を試みることができますcgsecurity.org/wiki/TestDisk
PsyStyle

〜/ .openoffice.org / 3 / user / backup /または〜/ .libreoffice.org / 3 / user / backup /を見てください。これらのディレクトリをクリアするスクリプトを作成して、削除した機密事項がまだ存在しないようにしました。
Joe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.