Resposta curta: Escrever algo novo para o sector (mesmo zeros - o que um formato longo faz).
Resposta Longa
Os discos rígidos hoje em dia tentam esconder os maus sectores do computador anfitrião. O computador anfitrião pede simplesmente ao disco para devolver o conteúdo de um determinado número de sector. Normalmente, a unidade lê o sector, devolve-o à máquina anfitriã, e tudo está bem.
O disco rígido sabe se o valor lido é válido ou não, porque a unidade usa Código de correcção de erros (ECC) para validar que o conteúdo lido está correcto. Se a unidade detecta que o conteúdo do sector é inválido, irá tentar novamente a leitura. A esperança é que se simplesmente a ler novamente, poderá obter o conteúdo correcto do sector. Continuará a tentar de novo até obter um bom valor, ou até atingir o seu limite de tempo (formalmente conhecido como o Command completion time limit, ou CCTL _).
Durante estas tentativas, a unidade aparecerá morta; uma vez que já não está a responder aos comandos .
Sectores de reposição
A maioria das unidades modernas contém um número de “sobresselentes” sectores (por exemplo, 1.024 sectores sobresselentes). Se a unidade reconhecer um sector como mau, deixará de o utilizar. Quaisquer pedidos para ler ou escrever para esse sector danificado serão redireccionados de forma transparente para um sector sobresselente. Esta marcação de um sector danificado, e a realocação dos seus dados para um sector sobressalente, é chamada de Apresentação de realocação. E o número total de sectores que foram realocados (e portanto quantos dos seus sectores sobressalentes foram utilizados) é a Contagem de Sector Realocado*.
Neste exemplo a partir de um dos meus próprios discos rígidos, 64 sectores foram considerados como maus. Isto significa que 64 dos sectores de reserva da unidade foram chamados a ser utilizados:
ID Current Worst Threshold Raw
============================= ======= ===== ========= ===
(05) Reallocated Sector Count 192 192 140 64
Neste mesmo disco rígido, houve 4 Acontecimentos de realocação*. Isto significa que houve quatro ocasiões em que a unidade marcou sectores como maus, e em vez disso utilizou sectores sobresselentes.
ID Current Worst Threshold Raw
============================= ======= ===== ========= ===
(05) Reallocated Sector Count 192 192 140 64
(C4) Reallocated Event Count 196 196 0 4
E se alguma vez não conseguir ler os dados?
Estas acções de releitura de sectores, consumindo sobresselentes, tudo nas costas do computador é uma coisa boa. Significa que o sistema operativo anfitrião não tem de lidar com a questão dos sectores falhados. A própria unidade pode tratar desses pormenores.
Bonus Chatter : Antigamente, o seu disco rígido era enviado com um autocolante colado a ele. Este autocolante continha a Lista de Defeitos de Fábrica; a lista de todos os pontos maus conhecidos na unidade.
Se realizava um formato de baixo nível da unidade, tinha de utilizar uma ferramenta para digitar todos os Cilindro-Cabeça-Sector* locais dos pontos maus.
As unidades SCSI têm um comando, IOCTL_DISK_REASSIGN_BLOCKS
, para lhes dizer para realocar um ponto mau na unidade depois de o sistema operativo o detectar. Nas unidades IDE tudo isto acontece automaticamente, sem a necessidade de intervenção do sistema operativo.
O ideal seria que a unidade reconhecesse que o sector está a falhar, movesse os dados para um sector de reserva, e nunca mais utilizasse o sector original. Mas o que acontece se a unidade não tiver sido capaz de ler o sector com sucesso?
Isto é o que Pending Sectors
& são. A unidade detectou que um sector está a falhar, e precisa de ser refeito para um sector de reserva. Mas não o pode fazer enquanto não conseguir ler os dados com sucesso. Quando a unidade sabe que um sector é mau, e precisa de ser refeito, mas ainda não o pode fazer porque está à espera de obter uma boa leitura do sector: a isso chama-se a Contagem de Sector Pendente :
ID Current Worst Threshold Raw
============================= ======= ===== ========= ====
(05) Reallocated Sector Count 192 192 140 64
(C4) Reallocated Event Count 196 196 0 4
(C5) Current Pending Sector 100 100 0 2
O meu disco rígido tem 2* sectores que a unidade reconhece como maus, mas que ainda não podem ser realocados. Se lesse um destes “sectores pendentes”, a unidade provavelmente tentaria de novo (e tentaria de novo, e tentaria de novo), e eventualmente devolveria um erro de leitura ao sistema operativo anfitrião:
ID Current Worst Threshold Raw
============================= ======= ===== ========= ====
(05) Reallocated Sector Count 192 192 140 66
(C4) Reallocated Event Count 196 196 0 5
(C5) Current Pending Sector 100 100 0 0
desista do sector pendente e será realocado
Há duas formas de a unidade poder finalmente realocar o sector, e consumir outro sector de reserva:
- finalmente obtém uma boa leitura
& - já não lhe interessa o que está no sector
Se a unidade finalmente ler o sector, então sabe que pode realocar o sector.
A outra forma de a unidade poder reatribuir o sector é se lhe disser que o conteúdo desse sector é irrelevante; que já não se importa com o que está no sector. Como se faz isso?
Escrevendo algo novo para o sector.
Sempre que ler de, ou escrever para, um sector num disco rígido, tem de ler/escrever o entire 512-byte sector1. Não é capaz de escrever apenas parte de um sector. Quando o SO escreve dados para um sector, tem de especificar o entire 512 bytes. Se disser ao disco rígido que deseja que estes novos conteúdos substituam este mau sector, a unidade sabe que nem sequer se importa com o que se encontra actualmente no mau sector. Pode então Realocar um mau sector para um dos sobresselentes, e o sector já não é Pendente*.
É por isso que quando as pessoas perguntam sobre tendo alguns Current Pending Sectors
, o conselho comum é utilizar uma ferramenta (como o DataGuard da Western Digital) para escrever todos os zero à unidade.
> C:\Windows\system32>chkdsk /r c:
The type of the file system is NTFS.
Volume label is OS.
12 KB in bad sectors.
Ao escrever zeros a cada sector na unidade, está a dizer à unidade que pode finalmente reafectar todos aqueles sectores*** desagradáveis. Após a limpeza, todos os seus Pending Sectors
tornar-se-ão Reallocated Sectors
:
ID Attribute Name Current Worst Threshold Raw
============================= ======= ===== ========= ====
(C5) Current Pending Sector 100 100 0 18
Nota: Não é estritamente necessário utilizar uma ferramenta de “baixo nível” como o Data LifeGuard da Western Digital. Se instruir o Windows a executar um formato full* (isto é, formato não Quick*) de um volume, ele escreverá zeros para cada sector no volume.
O sistema de arquivo OS suporta a marcação de sectores como maus
Armado com este conhecimento, exploraremos um cenário comummente confuso.
Antes do advento da Integrated Drive Electronics (IDE), o sistema operativo anfitrião era responsável pela detecção de maus sectores, pela nova tentativa de leitura, pela deslocação de dados para outro sector, e pela marcação de sectores antigos como maus.
Se fosse correr um chkdsk /r c:
utilizando o sistema operativo anfitrião, reconheceria que os sectores “pendentes” são maus, e os marcaria como maus, e nunca mais tentaria utilizá-los novamente:
>chkdsk c: /B
Assim, assumindo um disco rígido de sector de 512 bytes, 12 KB de ‘Sectores Pendentes’ ou neste exemplo 12KB marcados pelo SO como ‘sectores maus’, que corresponderiam à decimal 24 ou hexadecimal 0x18 como seria mostrado por um S. M.A.R.T. disk utility, tal como Crystal Disk Information:
/B NTFS only: Re-evaluates bad clusters on the volume
(implies /R)
Nota : O utilitário Data LifeGuard v1.31 da Western Digital (último a partir de 31/08/2017) não parece mostrar correctamente os valores actuais do contador S.M.A.R.T. ‘Raw’.
Agora se efectuar um full format (que escreve zeros para cada sector no volume):
/B NTFS only: Clears the list of bad clusters on the volume and
rescans all allocated and free clusters for errors. /b includes
the functionality of /r. Use this parameter after imaging a
volume to a new hard disk drive.
Isso significa que todos os sectores que foram Pending
vão ser realocados. É agora seguro para o sistema de arquivo utilizar novamente esses sectores. A fim de instruir o sistema de arquivo de que esses sectores já não são “maus”, executa-se uma opção onde avalia os sectores maus:
onde a documentação do comando diz
Ou
De acordo com https://technet.microsoft.com/en-us/library/cc730714(v=ws.11).aspx
Isto foi uma escrita de lote inteiro, e imagens de ecrã de lote inteiro, para algo que nunca será lido.