そのため、古いラップトップから新しいラップトップに移動する途中で、古いラップトップのハードドライブに物理的な損傷が発生しました。 badblocks
は64個の不良セクタを報告します。 /
パーティションと/home
パーティションが分割された2か月前のUbuntuGNOMEセットアップがありました。私の知る限り、/
のいくつかのセクターが損傷しましたが、それは問題ではありません。一方、/home
のパーティションは、この注釈付きのddrescueログを提供します。
# Rescue Logfile. Created by GNU ddrescue version 1.17
# Command line: ddrescue -d -r -1 /dev/sdb2 home.img home.log
# current_pos current_status
0x6788008400 -
# pos size status
0x00000000 0x6788000000 +
0x6788000000 0x0000A000 -
first 10 sectors of the ext4 journal
0x678800A000 0x2378016000 +
0x8B00020000 0x00001000 -
inode table entries for /pietro (my $HOME) and a few folders within
0x8B00021000 0x00006000 +
0x8B00027000 0x00001000 -
unknown (inode table?)
0x8B00028000 0x00004000 +
0x8B0002C000 0x00001000 -
unknown (inode table?)
0x8B0002D000 0x001DC000 +
0x8B00209000 0x00001000 -
unknown (inode table?)
0x8B0020A000 0x00090000 +
0x8B0029A000 0x00001000 -
unknown (inode table?)
0x8B0029B000 0x4420E65000 +
Debugfsのicheck
およびtestb
コマンドを使用して注釈を付けました。損傷したすべてのブロックは使用済みとしてマークされます。いくつかのスーパーブロック統計:
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 972
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
だから私の質問は:
icheck
は言いたくありません。もしそうなら、どのiノードを見つけることができますか?私はfsck
でこのデータ復旧をしたくありません。これは、すべてのファイルを/lost+found
で、フラット化されたディレクトリ構造と重複ファイルの巨大な混乱にダンプするだけです...
ありがとう。
さて、最初の質問では、debugfs
stats
コマンドが、グループのすべてのセクションの開始ブロックが何であるかを示していることがわかりました。さらに、iノードテーブルへのオフセットの基本的な追加とimap
コマンドにより、最初のインバーが得られたので、インバーは連続して増加する必要があると推測しました。それはまた、私のブロックグループの計算がそれが間違ったグループにあることを示した最後の不良セクタについての私の疑いを確認しました。
byte address block group what first inumber
0x8B00020000 145752096 4448 inode table block 0 36438017
0x8B00027000 145752103 4448 inode table block 7 36438129
0x8B0002C000 145752108 4448 inode table block 12 36438209
0x8B00209000 145752585 4448 inode table block 489 36445841
0x8B0029A000 145752730 4449 inode table block 122 36448161
ブロックは4096バイトで、各iノードテーブルエントリは256バイトであるため、ブロックごとに16個のiノードがあります。これで、80個すべてのiノードテーブルエントリがinumberによって失われました。
それでは、ジャーナルに目を向けましょう。私は書いた 小さなツール ジャーナルの各ブロックに情報をダンプします。ジャーナルのスーパーブロックが欠落していたため、これに必要な2つの情報が失われました。
幸い、これらのスイッチの1つ(または両方)を強制的にオンにすると、ジャーナル内の記述子ブロックの一部がそのブロックをオーバーフローし、それらのフラグが設定されていないことを証明しました。
1つのawkスクリプト(fulllog.awk
)後で、フォームのログがあります
0x0002A000 - descriptors
0x0002B000 -> block 159383670
0x0002C000 -> block 159383671
0x0002D000 -> block 0
0x0002E000 -> block 155189280
0x0002F000 -> block 195559440
0x00030000 -> block 47
0x00031000 -> block 195559643
0x00032000 -> block 195568036
0x00033000 -> block 159383672
0x0002B000 - invalid/data block
0x0002C000 - invalid/data block
0x0002D000 - invalid/data block
0x0002E000 - invalid/data block
0x0002F000 - invalid/data block
0x00030000 - invalid/data block
0x00031000 - invalid/data block
0x00032000 - invalid/data block
0x00033000 - invalid/data block
0x00034000 - commit record
commit time: 2014-12-25 16:53:13.703902604 -0500 EST
これで、別のawkスクリプト(dumpallfor.awk
)すべてのブロックをダンプします:
byte address block number of journaled blocks
0x8B00020000 145752096 6
0x8B00027000 145752103 10
0x8B0002C000 145752108 206
0x8B00209000 145752585 1
0x8B0029A000 145752730 0
そのため、最後のブロックは本当に失われます:(運が良ければ、debugfs
のncheck
コマンドでどのファイルがあったかを知ることができます。
だから私はたくさんのブロックを持っています。そして、それらはすべて異なっているように見えます!それで?
失効レコードをできましたですが、その構造を意味のある形で解析できないようです。コミットレコードのタイムスタンプをできましたですが、それを試す前に、各iノードテーブルブロックがどのように異なるかを確認したいと思います。だから私は書いた 別のクイックプログラム (diff.go
)それを見つけるために。
ほとんどの場合、異なるファイルはタイムスタンプのみが異なるため、最新のタイムスタンプを持つファイルを選択するだけで済みます。後で行います。他のすべてのファイルについては、次のようになります。
36438023 - size differs
36438139 - OSD1 (file version high dword) differs
36438209 - OSD1 differs
うーん、それは良くありません...サイズの異なるファイルが問題になり、2つのOSD1ファイルをどうすればよいかわかりません。また、debugfs
のncheck
を使用してファイルが何であるかを確認しようとしましたが、一致するものがありません。
次に、どのブロックダンプが今のところ最新のタイムスタンプを持っているかを見つけました(同じリポジトリ、latest.go
)。注意すべき重要な点は、コミット時間ごとにブロックを時系列でスキャンしたことです。 これは必ずしもブロック番号による番号順と同じではありません。ジャーナルは常に時系列で昇順で保存されるとは限りません。
ただし、結局のところ、(コミット時間による)最新のブロックは実際に最新のタイムスタンプを持つブロックです!
これらの最新のブロックを試して、それらから何かを回復できるかどうかを確認してみましょう。
Sudo dd if=BLOCKFILE of=DDRESCUEIMG bs=1 seek=BYTEOFFSET conv=notrunc
その後、私のホームディレクトリが戻ってきました!
それでは、これら3つの異なるファイルが何であったかを調べてみましょう...
Inode Pathname
36438023 /pietro/.cache/gdm/session.log
36438209 /pietro/.config/liferea
36438139 /pietro/.local/share/zeitgeist/fts.index
そこにある唯一の重要なことはLifereaの構成ディレクトリですが、それが壊れているとは思いません。それは was OSD1の1つでした-異なるもの。
そして、最後のブロックにある16個のiノードについて調べてみましょう。これは回復できませんでした。
Inode Pathname
36448176 /pietro/k2
36448175 /pietro/Downloads/sOMe4P7.jpg
36448174 /pietro/Downloads/picture.png
36448164 /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
36448169 /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.Zip
36448165 /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
36448173 /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
36448162 /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
36448163 /pietro/.cache/upstart/dbus.log.7.gz
36448171 /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
36448161 /pietro/.local/share/applications/Knytt Underground.desktop
36448166 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
36448170 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
36448172 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
36448168 /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
36448167 /pietro/Documents/transactions/transaction 4315883542.pdf
要するに:
したがって、犠牲者が出ないわけではありませんが、完全な損失ではありません。その過程で、ext4について詳しく学びました。とにかくありがとう!
[〜#〜]更新[〜#〜]
これをそこに出すこともできます:
NOT YET /pietro/k2
FOUND /pietro/Downloads/sOMe4P7.jpg
NOT YET /pietro/Downloads/picture.png
FOUND /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
GOOGLEIT /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.Zip
FOUND /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
FOUND /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
UNNEEDED /pietro/.cache/upstart/dbus.log.7.gz
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
UNNEEDED /pietro/.local/share/applications/Knytt Underground.desktop
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
NOT YET /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
NOT YET /pietro/Documents/transactions/transaction 4315883542.pdf
そして、私が十分に奇妙ではない場合のために、ダウンロードされた写真は次のとおりでした:
sOMe4P7.jpg
( "&KNUCKLES" が追加されたLaw&Orderタイトルカードのパロディー)tumblr_nfjvg292T21s4pk45o1_1280.png
( J。K.Rowlingからのこのツイート のスクリーンショット)tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
(「Windowsは正常にシャットダウンしませんでした。」スポーツイベントのように見えるビルボードのエラーメッセージの写真)1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
( この漫画 )これらはすべてチャットで友達によって共有されました。
私はこれを更新し続けると思いますか? (違いが出るとは限りません...)私はすべてを回復できることを知っています。唯一の問題は、= Pの場合です。