Spildit wrote:
Ok let's think ...
Assuming a drive have 4 heads and 2 are gone .... let's say head 0 and 3 are ok.
You use Rebuild Assist commands and READ the data. When the READ is send to a LBA that belongs to a head that is damaged the drive will not attempt to read and will send an error, correct ? So you skip that sector and move on ...
Now can't you just use the READ command and the drive itself will know that head 0 and 3 are ok and will return the error on head 1 and 2 ? If so you can read in sequence and get the data out of the good heads getting error on LBAs that belong to bad heads.
G-List should have few entries. Even if you can't get the same error when reading a re-located sector even if the drive does have re-located sectors there will be just a bunch of LBAs and it will be way better than using one enite bad head. Even if some eentries on G-List do end up leading the drive to read sectors on bad head it will be just a few of them as G-List can have just a bunch of entries as the drive does have very limited number of spare sectors ...
Yes, that is more or less how it would work, in the easy raw form.
fzabkar wrote:
AIUI, if the drive has determined that particular read elements are bad, then it will set the appropriate bits in the Rebuild Assist log (15h). One can then transparently clone the drive without having to skip bad areas. The user can additionally disable a marginally good head, ie one that the drive thinks is OK. However, the problem AIUI is that this particular Hitachi firmware deviates from the ATA standard in that it does not permit the user to disable more than one additional head at any one time.
Exactly. Another thing to realize is that if you want to disable a marginally good head yourself, the only way to know which head to disable is by trial and error. There is no direct way to know which head any bad sectors are in until you start switching off heads one at a time to see which one makes the read different.
Spildit wrote:
Ok ...
Let's see how this ends up implemented in hddsuperclone !
Yes, let’s see how I can manage to do this in a beneficial way! My current idea is to be able to create a head map using the available functions. Because I can only disable one head at a time, I won’t be able to fully test it in a scenario where the drive itself disables one or more heads. There is also a possible timing issue, where every time you enable the rebuild assist to switch heads, there is a delay. I have not officially timed it, but I am guessing between ¼ and ½ second. That can add up, I did the math on my first idea, and it could easily take 30-45 minutes to map the heads that way on my test drive. So now I have another idea to speed things up, but it starts to get more complicated.
Today was not very productive for me in a programming sense. So I used it as a think day, running ideas around in my head when I had the chance. I think I might have a good idea how to map the heads in a reasonable amount of time, but I won’t know until I actually get the programming in place. My ultimate goal is to be able to map the heads, and then be able to perform read operations knowing exactly which areas belong to what head, giving the program the control to handle the operation of skipping areas and head(s) as needed.