削除されたファイルの回復に関するいくつかの投稿を見ましたが、今回は状況が異なります。私の妻は、私たちの子供たちのための特別な思い出のような重要な個人情報をたくさん含んでいるJournal.odtというファイルを持っています。ある日、彼女がOpenOfficeでファイルを開こうとしたとき、フォーマットの問題について文句を言いました。私は彼女にクリックを解除して終了するように頼んだ。私のcat
ファイルが完全に空のとき。ls
ファイルは0バイトと呼ばれます。
誤ってファイル内のすべてのテキストを選択し、バックスペースキーを押して保存しても、ファイルにはまだOpenOfficeメタ情報が含まれます。
私はすぐに彼女のラップトップをシャットダウンしました。
過去にdd
ディスクで生のテキストリカバリを使用するなど、いくつかの複雑な作業を行いましたが、ここで何をすべきかわかりません。 odtファイルはプレーンテキストではないため、grepを介してディスク全体をパイプすることはできません。
どんなアドバイスも本当にありがとうございます。
また、何が間違っている可能性があるかについての洞察力を持っている人がいる場合は、聞きたいと思います。
ありがとう
ベストアンサー1
ext3ファイルシステムを使用している場合は、以下を試してください。Carol WoodのHOWTO
要するに、
ext3grep $IMAGE --ls --inode 2 | grep your_file
探しているファイルを見つけるには($IMAGE
例:パーティションはどこにありますか/dev/sda2
?ext3grep
)- 未割り当て領域のログを含むファイルシステムブロックを見つけます。
- 以前に見つかったブロックを参照するすべてのログ記述子を見つけます。
- ブロックをコピーします
dd
。 - ファイルを編集して、次のゼロを削除します。
cat
目的の場所にファイルを配置します。
ソースから:
》章マニュアルの修復例
次の例では、小さなファイルを手動で復元します。スペースを節約し、例を読みやすくするために、部分出力のみが提供されます。
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
明らかにinode 309631が削除され、ファイルのブロック番号がありません。
$ ext3grep $IMAGE --print --inode 309631 [...] Inode 未割り当てグループ: 19 作成 ID: 2771183319 uid/gid: 1000/1000 モード: rrwxr-xr-x サイズ: 0 リンク数: 0 セクタ: 0( - > 0個の間接ブロック)。
Inode 時間: 接続: 1202350961 = 2008年2月7日木曜日 03:22:41 ファイルの修正: 1202351093 = 2008年2月7日木曜日 03:24:53 Inode 修正: 120232003 24:53 削除時間 : 12023510 93 = 2008年2月7日木曜日 03:24:53
直接ブロック:
したがって、私たちは日誌でそれより古いコピーを見つけようとします。まず、そのinodeを含むファイルシステムブロックを見つけます。
$ 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 2834 067 6 4381349 30986 4381350 31299 4381374 32718 4381707 1465 4381709 2132 4381755 2945 4381961 4606 4382098 6073 4382137 6672 4382138 7536 4382139 7984 4382140 8931
これは、シーケンス番号4381294のトランザクションにブロック26582にブロック622598のコピーがあることを意味する。一番下の最も高いシーケンス番号はディスクに書き込まれた最後のデータである必要があるため、ブロック8931は現在のブロック622598と同じでなければなりません。削除されていない最後のコピーを見つけるには、一番下から始めて上に作業する必要があります。
これらのブロックを印刷しようとすると、ext3grepはそれをinodeテーブルのブロックとして認識し、その中の32個のinodeの内容をすべて印刷します。しかし、私たちはinode 309631だけを見たいので、smart grepを使います。
$ ext3grep $ IMAGE --print --block 8931 | $ ext3grep $ IMAGE --print --block 8931 | $ ext3grep $IMAGE --print --block 8931 grep -A15 'Inode 309631' -------- ------Inode 309631--------- 作成 ID: 2771183319 uid / gid :1000 / 1000モード:rrwxr-xr-xサイズ:0リンク数:0セクタ:0(--> 0間接ブロック)。
Inode 時間: 接続: 1202350961 = 2008年2月7日木曜日 03:22:41 ファイルの修正: 1202351093 = 2008年2月7日木曜日 03:24:53 Inode 修正: 120232003 24:53 削除時間 : 12023510 93 = 2008年2月7日木曜日 03:24:53
直接ブロック:
これは実際にはブロック622598で見たものと同じである。次に、削除時間がゼロのシリアル番号が見つかるまで、より小さいシリアル番号を調べます。私たちが見つけた最初のもの(下から上へ)はブロック6073です:
$ ext3grep $ IMAGE --print --block 6073 | $ ext3grep $ IMAGE --print --block 6073 | $ ext3grep $IMAGE --print --block 6073 grep -A15 'Inode 309631' -------- ------Inode 309631--------- 作成 ID: 2771183319 uid / gid :1000 / 1000モード:rrwxr-xr-xサイズ:40リンク数:1セクタ:8(--> 0間接ブロック)。
Inode 時間: アクセス: 1202350961 = 2008年2月7日木曜日 03:22:41 ファイルの変更: 1189688692 = 2007年9月13日木曜日 15:04:52 2007 Inode 修正: 118 5 :04:52削除時間:0
直接ブロック:645627
上記の作業は自動化されており、コマンドラインオプション--show-journal-inodesを使用してより迅速に実行できます。このオプションは、inodeが属するブロックを見つけ、ログ内のそのブロックのすべてのコピーを見つけ、各ブロックから要求されたinodeのみを印刷します(ご存知のように、各ブロックには32個のinodeが含まれています)。重複項目は削除されます。
$ ext3grep $IMAGE --show-journal-inodes 309631 グループ数: 75 最小/最大ログブロック: 1115/35026 ログ記述子をロード中... 完了したログトランザクション 4381435 ラップアラウンド、一部のデータブロックがこのトランザクションで失われる可能性。ログ記述子数:30258、最小/最大シーケンス番号:4379495 / 4382264ログに見つかったinode 309631のコピー:
---------------Inode 309631--------------- 作成 ID: 2771183319 uid / gid : 1000 / 1000 モード: rrwxr-xr-xサイズ:0リンク数:0セクタ:0(--> 0間接ブロック)。
Inode 時間: 接続: 1202350961 = 2008年2月7日木曜日 03:22:41 ファイルの修正: 1202351093 = 2008年2月7日木曜日 03:24:53 Inode 修正: 120232003 24:53 削除時間 : 12023510 93 = 2008年2月7日木曜日 03:24:53
直接ブロック:
---------------Inode 309631--------------- 作成 ID: 2771183319 uid / gid : 1000 / 1000 モード: rrwxr-xr-xサイズ:40リンク数:1セクタ:8(--> 0間接ブロック)。
Inode 時間: アクセス: 1202350961 = 2008年2月7日木曜日 03:22:41 ファイルの変更: 1189688692 = 2007年9月13日木曜日 15:04:52 2007 Inode 修正: 118 5 :04:52削除時間:0
直接ブロック:645627
ファイルは本当に小さいです。ブロックは1つだけです。前述のようにddを使用してこのブロックをコピーします。
$ dd if=$IMAGE bs=4096 count=1 Skip=645627 of=block.645627 1+0 レコードの 1+0 コピー済み 4096バイト(4.1kB)、0.0166104秒、247kB/s
次にファイルを編集して、後続のゼロを削除するか、最初の40バイト(指定されたファイルサイズ)をコピーします。
$ dd if=block.645627 bs=1 count=40 of=start_azureus 40+0レコードのうち40+0レコードがコピーされます。 40バイト(40B)、0.000105397秒、380kB/s
$cat start_azureus cd /usr/src/azureus/azureus ./azureus &
回復しました! 」