破損したログファイルからddrescueを続行する

破損したログファイルからddrescueを続行する

数日前、180GB のパーティションで ddrescue を実行しましたが、3 日後 (最後に確認したときは 99.91 % の復旧でフェーズ 3 でした) にシステムがフリーズしたため、オフ ボタンを押し続け、コンピューターの電源をオフにしました。

電源を入れた時に、イメージファイルとログファイルのバックアップを取ったのですが、ログファイルは完全にコピーされず、コピー時にエラーが発生したと表示されましたが、106 kb のうち 104 kb がログファイルからコピーされました (奇妙なことです)。

そして、ddrescue コマンドを再度実行すると、「マップファイル discoC.Logfile、行 4092 にエラーがあります」というメッセージが表示されます。

指示:

sudo ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile

これは私のPasteBin のログファイルが不完全です4092 行目が最後の行です。これはログ ファイルの一部です。

# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
# Start time:   2021-12-15 01:56:33
# Current time: 2021-12-18 20:11:51
# Scraping failed blocks... (forwards)
# current_pos  current_status  current_pass
0xC5A65E00     /               1
#      pos        size  status
0x00000000  0x00003400  -
0x00003400  0x00000200  +
0x00003600  0x00000800  -

0x00003E00  0x00000800  +

0x00004600  0x00000200  -

0x00004800  0x00000200  +

0x00004A00  0x00000400  -

....... (Lot of - and +)........

0xC564C600  0x00000400  +
0xC564CA00  0x00000600  -
0xC564D000  0x00000200  +
0xC564D200  0x00000200  -
0xC564D400  0x00000800  +
0xC564DC00  0x00000400  -
0xC564E000  0x00000600  +
0xC564E600  0x00000200  -
0xC564E800  0x00001A00  +
0xC5650200  0x00000200  -
0xC5650400  0x00000E00  +
0xC5651200  0x00000200  -
0xC

そこからプロセスを続行できるようにお手伝いいただけますか?

答え1

によるとhttps://www.electric-spoon.com/doc/gddrescue/html/Mapfile-structure.htmlマップファイル (ログファイル) は、テキスト エディターで簡単に解釈および編集できます。

私なら、そのコピーを作成して 4091 行目と 4092 行目を削除し、ddrescue が最後にログに記録したポイントから再開できるようになると思います。

確かに、かなり失敗しているようです。最後から逆順に実行すると (つまり、-R スイッチを追加すると)、より速く大量のデータをキャプチャできるのではないかと思います。 (これを試しても害はありません)。

答え2

質問をこんなに遅く読んでしまい申し訳ありません。

欠落している行 4092 に対して有効なものを復元するのは簡単です。

0xC5651400 <remaining-size> ?

どこ:

  • 0xC56514000xC5651200は、4091 行目の前のチャンクの開始位置とそのブロック チャンクのサイズを合計して得られる、新しいブロック チャンクの開始です0x00000200
  • ?つまり、 から始まるブロックは0xC5651400まだ試行されていないため、それらのブロックに対してクローン作成を試行する必要があります。
  • <remaining size>: 以下を参照してください。

の値を計算する方法<remaining size>:

  • ログファイルに4093行目がある場合: 4093行目の開始オフセットと4092行目に記載されている計算された開始オフセット(つまり0xC5651400)の差を16進数で表します。
  • または、行 4093 がない場合:dev/sdb3パーティションのサイズと行 4092 の開始オフセットの差 (つまり0xC5651400)。

パーティションのサイズはdev/sdb3、次のようなターミナル コマンドを使用するfdisk -lか、別のイメージ ファイルへのクローン作成プロセスを開始して、ログ ファイルなしで別のログ ファイルを作成することによって知ることができます。ddrescue は、「N バイトをコピーしようとしています」などのメッセージを表示します。セクター サイズ (例: 512) で除算して 16 進数に変換する必要がある場合があります。

関連情報