|
From: | Scott Dwyer |
Subject: | Re: [Bug-ddrescue] Tip: Improving recovery chances with Seagate "F3" models |
Date: | Thu, 22 May 2014 19:37:42 -0400 |
User-agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 |
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
[Prev in Thread] | Current Thread | [Next in Thread] |