On 5/22/2014 2:14 PM, Antonio Diaz Diaz wrote:
If the patch is reasonably general (does not depend on a specific
linux version) and can be conditionally compiled with a configure
option, I may be interested in it.
As far as I can tell it doesn't care what flavor of linux, but I think
there might be a limit on how old of kernel it will run on properly
(likely not an issue but I can't find again the kernel version of the
changes that may affect it, but not recent for sure, I think several
years ago).
I don't know exactly what you mean by a configure option, but I have had
success in adding conditional code (#ifndef __APPLE__) in the source to
check for and allow it to compile differently on a Mac (leaves out the
good stuff), since otherwise it would not compile.
There are a couple quirks that have to be understood and dealt with
properly:
First, when using the passthrough option it is unable to tell the
difference between a drive and a partition. So sda1 or sda2 is seen as
just sda. I handle this by failing if the source ends with a number
instead of a letter. Not ideal, but the best I could come up with.
Second, there seems to be a limit to the amount of data that can be
transferred using the passthrough commands. I have found that 1024 is
the max number of 512 byte sectors that can be transferred at one time.
I believe this to be a buffer issue, so that means that 524288 bytes is
the max data transfer. This is a cruel trick in the kernel that I have
not been able to resolve, so the workaround is to divide larger reads to
fit in this number. ( FYI this number drops to 240 sectors when it is a
USB drive).
This patch is in the testing phases, but it does work. But it can be
taken to an even higher level then I already have. Antonio, I would need
your help for that. Imagine never reading the same sector twice. When
doing a direct ATA passthrough, it is possible to know the first sector
of the error. Meaning that reading a 128 sector block and it returns
with a read error, it will return the first bad sector in the block.
This means that a bad sector could be marked right away, the sectors
before it could be marked as unread as they would be known to be
readable yet, and the sectors after could be marked as non-tried as it
is unknown if they are good or bad. Please think about how this could be
implemented in ddrescue in the future, as I don't have a clue. Just keep
it in mind, as I am not ready at this time to even try it.
Scott
_______________________________________________
Bug-ddrescue mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-ddrescue