O código de correção de erros em um disco rígido é um pedaço adicional de dados associado a cada setor de hardware. Durante a gravação, o firmware da unidade calcula esses dados e os grava junto com os dados do usuário. Durante a leitura, o firmware lê o ECC juntamente com os dados e os verifica juntos.
Para um disco rígido tradicional, o setor de hardware é de 512 bytes. Para uma unidade de Formato Avançado, é de 4K bytes (não importa se a unidade está apresentando setores de 512 ou 4 bytes na interface, ou seja, 512e vs. 4kn).
O resultado da verificação após uma leitura tem basicamente três resultados possíveis:
-
o setor foi lido sem erro. Isso na verdade não é completamente comum nos discos rígidos modernos; as densidades de bits são tais que dependem do trabalho de ECC.
O setor -
foi lido com erros corrigíveis. Como implícito acima, isso não é incomum; é esperado. O drive retorna os dados, com correção de erros aplicada, ao usuário.
-
o setor foi lido, mas havia muitos "bits errados"; os erros não puderam ser corrigidos.
No último caso, a unidade normalmente não retorna qualquer conteúdo; apenas retorna um status indicando o erro. Isso ocorre porque não é possível saber quais bits são suspeitos, muito menos quais devem ser seus valores. Portanto, todo o setor (bits ECC e tudo) não é confiável. É impossível determinar qual parte do setor ruim é ruim, e muito menos qual deve ser seu conteúdo. O ECC é um "gestalt" que é calculado em todo o conteúdo do setor e, se não corresponder, é todo o setor que não é correspondido.
O SpinRite funciona simplesmente tentando ler o setor defeituoso várias vezes, usando uma função de "leitura de manutenção" que retorna os dados (mas sem bits ECC), mesmo que a unidade diga "erro incorrigível". Como dito na descrição linkada por DavidPostill, ele pode ter sucesso com uma leitura livre de erro (na verdade, "corrigível" é mais provável); ou pode ser capaz de deduzir, essencialmente pela média dos bits retornados, uma estimativa razoável do conteúdo do setor. Não tem mais capacidade de corrigir com precisão erros usando o ECC do que a unidade; isso é matematicamente impossível.