Se eu entendi a situação, os discos rígidos modernos são responsáveis pela detecção e evitação ruins do setor. Quando um setor é escrito, ele é imediatamente lido para garantir que o setor é bom e, se não for, o setor físico é marcado como ruim e os dados são gravados em outro lugar, alterando o mapeamento entre esse setor virtual e seu setor físico. .
Tudo isso faz sentido, exceto por uma coisa: de onde vêm todos esses setores extras? Existem apenas mais setores físicos do que setores virtuais? Essa é a única coisa que faz sentido para mim. Caso contrário, um comando como dd if=/dev/urandom of=/dev/sda
falharia eventualmente, uma vez que inevitavelmente atinge os setores defeituosos, que certamente existirão, mesmo no melhor e mais novo dos discos.
Além disso, depois de executar o comando acima, até onde o disco rígido sabe, todo setor virtual está sendo usado. No entanto, não há um aumento súbito de erros de gravação no final do software, como você esperaria que houvesse se o disco rígido tivesse ficado sem espaço para remapear os setores defeituosos. Portanto, o disco rígido deve ter outro lugar para mapear quaisquer novos setores defeituosos encontrados, mesmo que, até onde o disco rígido saiba, todo o espaço de endereço virtual esteja sendo usado.
Supondo que existem mais setores físicos do que virtuais, como você pode descobrir quantos setores extras existem e quantos são deixados? Dessa forma, quando o suprimento extra do setor estiver acabando, poderei obter algum tipo de aviso para que eu possa substituir meu disco rígido antes que ele morra.
EDIT: Acontece que eu não entendi exatamente a situação certa. A leitura após cada operação de gravação não é necessária quando códigos de correção de erro são usados. Isso me faz pensar, no entanto: um setor é marcado como ruim e remapeado toda vez que um ECC precisa ser usado para se recuperar de um erro de gravação em um setor?