http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html
ddrescue のアルゴリズムは次のとおりです (ユーザーはいつでもプロセスを中断できますが、不良ドライブはカーネルがあきらめるまで長い間 ddrescue をブロックする可能性があることに注意してください)。
1) 必要に応じて、マルチパートまたは以前に中断されたレスキューのステータスを説明するログファイルを読み取ります。ログファイルが指定されていないか、空であるか存在しない場合は、すべてのレスキュー ドメインを未試行としてマークします。
2) (第 1 フェーズ、コピー) 入力ファイルの試行されていない部分を読み取り、失敗したブロックをトリミングされていないものとしてマークし、すべてのレスキュー ドメインが試行されるまでスキップします。試行されていない領域のみが大きなブロックで読み取られます。トリミング、分割、および再試行は、セクターごとに行われます。各セクターは最大 2 回試行されます。このステップの 1 つ目は大きなブロック読み取りの一部として、2 つ目は以下のいずれかのステップの 1 つのセクター読み取りとしてです。
3) (第 2 段階; トリミング) 読み取りは、トリミングされていない最大のブロックの前縁から、不良セクタが見つかるまで、一度に 1 つのセクタを転送します。次に、不良セクタが見つかるまで、同じブロックの後縁から一度に 1 セクタずつ逆方向に読み取ります。トリミングされていないブロックごとに、見つかった不良セクタを不良セクタとしてマークし、そのブロックの残りを非分割としてマークします。トリミングされていないブロックがなくなるまで繰り返します。
4) (第 3 段階、分割) 読み取りは、分割されていない最大のブロックの中心から一度に 1 セクタずつ、不良セクタが見つかるまで転送します。次に、不良セクタが見つかるまで、同じブロックの中心から一度に 1 セクタずつ逆方向に読み取ります。
--logfile-size', read the smallest non-split blocks until the number of entries in the logfile drops below
ログファイルが--logfile-sizeより大きい場合 。残りのすべての非分割ブロックが 5 セクター未満になるまで繰り返します。次に、分割されていない残りのブロックを順番に読み取ります。5) (第 4 段階、再試行) オプションで、指定された再試行回数に達するまで、不良セクタの読み取りを再試行します。
6) オプションで、後で使用するためにログファイルを書き込みます。
私の理解: ** 彼がコピーしているとき ** 彼はブロックを 1 つずつコピーするだけで、古いブロックをコピーするために後退することはありません。欠陥のあるセクターを含むブロックはすべて、不良とマークされます (ブロック全体)。不良ブロックはトリミングされていないとマークされます。
伝説:
=1 2 3= is a bad BLOCK
[1 2 3] is a good block
x is a bad sector
@ is the read cursor
in a =1 2 3= center sector(2) is always bad
彼がトリミング しているとき、読み取りは、トリミングされていない最大のブロックのリーディング エッジから、不良セクタが見つかるまで、一度に 1 つのセクタを転送します。
=1 2 3= [4 5 6] =7 8 9=@ [10 11 12] =13 14 15=
=1 2 3= [4 5 6] =7 8 9= [10 11 12] =13 @14 15=
次に、不良セクタが見つかるまで、同じブロックの後縁から一度に 1 セクタずつ逆方向に読み取ります。
=1 2 3= [4 5 6] @=7 8 9= [10 11 12] =13 14 15=
=1 @2 3= [4 5 6] =7 8 9= [10 11 12] =13 14 15=
トリミングされていないブロックごとに、見つかった不良セクタを不良セクタとしてマークし、そのブロックの残りを非分割としてマークします。
=1 x 3= [4 5 6] =7 8 9= [10 11 12] =13 x 15=
なぜ彼はこれをしているのですか?? なぜ彼は線形にコピーできず、不良セクタに遭遇するたびにそれをスキップすることができないのですか - 私には彼がしているのは不良ブロックから作業セクタを抽出することだけのようです.
私は「トリミング」に行き詰まり、分割はさらに悪化しています - 誰かがその文書を読んでそれをすべて説明できますか!
彼はどうやって再試行することさえできますか! 不良セクタを再試行することはできますが、既にブロックをトリミングして書き出してしまっているため、再試行によって復元されたデータをどのように挿入するのでしょうか?