[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-ddrescue] Questions regarding copying algorithm

From: Bret Quigley
Subject: [Bug-ddrescue] Questions regarding copying algorithm
Date: Thu, 30 Jan 2014 11:40:04 -0500

Firstly, thank you so much for creating such a remarkably effective tool. I have a friend who has a bad habit of dropping laptops, and ddrescue has helped a ton in the past.

Apologies that this is not a bug report, but simply a few questions regarding the phase one "copying" algorithm. I'm sure that the information is right in front of me in the source code, but I'm unfortunately not familiar with C++.

From the manual, the copying phase "read[s] the non-tried parts of the input file, marking the failed blocks as non-trimmed and skipping beyond them, until all the rescue domain is tried."

My reading of this is that ddrescue tries to copy the number of sectors specified in --cluster-size as a block, and that the block is marked as non-trimmed (*) or finished (+) in the logfile depending on the result. Why, then, do I see some blocks marked as bad-sector (-) during the copying phase? Shouldn't that not occur until the trimming phase, when the sectors are read individually?

Secondly, I was wondering what relationship, if any, exists between --cluster-size and --skip-size. If ddrescue tries and fails to copy a block, is the next position calculated from the beginning or end of the block that just failed? If it's calculated from the beginning, is it not true that --skip-size should always be at least as large as --cluster-size, as otherwise you'll be skipping into an already-tried block?

Thirdly, the manual states that "slow areas are also skipped and tried later in additional passes (before trimming)." I was wondering how this is reflected in the logfile. In other words, if a block is copied slowly, and ddrescue skips ahead as a result, are the skipped blocks simply left as non-tried?

Hope I didn't ask too many questions,
Bret Quigley

reply via email to

[Prev in Thread] Current Thread [Next in Thread]