The Sstrength of the SpinRite description is that it did
make sense for older HDD technology. It does not anymore today.
One thing is that the on-disk encoduing used to be standardized
in the MFM/RLL days and the ECC was standard as well. This is not
true anymore today, and reading with ECC off does not make any
sense.
I referred to my copy of IBM's Personal Computer AT Technical
Reference Manual. The Fixed Disk Adapter section talks about the Read
Sector command. In those days the Command Register's bit definitions
for this command were as follows:
7 6 5 4 3 2 1 0
---------------
0 0 1 0 0 0 L T
L = 0 for data only, 1 for data plus 4-byte ECC
T = 0 for retries enabled, 1 for retries disabled
This IDE reference talks about the above Read Long commands (22h and
23h):
http://www.repairfaq.org/filipg/LINK/F_IDE-tech.html
However, I don't see a corresponding command in today's ATA
specification. It was present in ATA-3 but seems to have been retired
in ATA-4.
http://www.t10.org/t13/project/d2008r7b-ATA-3.pdf
http://www.t10.org/t13/project/d1153r18-ATA-ATAPI-4.pdf
So you are correct -- today's drives do not appear to be able to
retrieve the ECC data. My apologies.
There are some claims on Steve Gibson's web site which I don't
understand.
How SpinRite RECOVERS Unreadable Data:
http://www.grc.com/srrecovery.htm
Gibson believes that data can be lost during SMART's reallocation
process. Surely such a claim is bogus:
"Hard disk drives 'heal themselves' by replacing defective sectors
with spares. The problem is that the drive does this on its own,
without asking or notifying, and in the process vital data is
too-easily lost."
He then disables SMART to prevent automatic reallocation:
"The FIRST THING SpinRite does when it starts examining and working
with a drive is to completely disable the drive's built-in automatic
sector relocation. This way the drive can't whisk the sector away the
first time it's not easily read, and SpinRite can study the sector to
recover its data as much as necessary."
What does Gibson mean by "whisk away"? If he means "automatically
reallocate", then surely this is the most desirable outcome. Instead
Gibson hammers away at the bad sector until he successfully retrieves
the data, and *then* re-enables SMART so that the drive can reallocate
the bad sector. This seems pointless to me.
If it is true that there is no longer any Read Long command in the ATA
spec, then I find the following statement curious:
"Rather than ignoring the data from a bad read, SpinRite uses its
unique 'hardware level access' (which no other utility has) to read
whatever data the drive was able to get from the bad sector."
Is Gibson claiming to use some manufacturer specific commands to gain
access to the raw uncorrected data (including ECC ?) in much the same
way as the old Read Long command was able to do? Do some manufacturers
still support an undocumented Read Long command, even though the ATA
spec appears to have retired it?
Gibson also claims that ...
"If several thousand sector re-reads all fail to produce a single
perfect reading, SpinRite next employs the database it has been
building from each failed sector reading. By performing a statistical
analysis of this data, SpinRite is frequently able to reconstruct all
of the sector's data, even though no single reading was perfect."
This begs the question, if SpinRite is unable to read the ECC bytes
from the drive, then how is it able to confirm the integrity of the
reconstructed data?
I also notice the following statement in the ATA-7 spec:
"An unrecoverable error encountered during the execution of [the READ
SECTOR(S)] command results in the termination of the command. The
Command Block registers contain the address of the sector where the
first unrecoverable error occurred. The amount of data transferred is
indeterminate."
This suggests that the data from a bad sector may or may not be
transferred. It may be that only an error status bit (UNC =
uncorrectable) is set. (???)
- Franc Zabkar