Um setor defeituoso (um setor é um termo antigo, atualmente o 'bloco' é mais comumente usado) em um HDD significa que um ou mais blocos defeituosos estão fora de especificação na área de superfície magnética do disco. A única maneira de localizar esses blocos é tentar ler cada bloco em um disco rígido. Os HDDs são lentos, o que levará muito tempo.
Por exemplo, um disco rígido moderno tem taxa de leitura real em torno de 130 MB / s, então um disco moderno de 4TB levará cerca de 4000000MB / 130MB / s = 8.5h para ler o disco inteiro uma vez sem blocos defeituosos. Uma unidade com um ou mais blocos defeituosos fará com que a unidade tente reler esses blocos repetidamente para que a taxa de transferência sofra muito. Isso permitirá que você localize os blocos defeituosos que causam erros de leitura. Colocar qualquer HDD moderno para remapear um bloco ruim requer escrever algo para aquele bloco ruim.
A única maneira de realmente testar se um bloco de superfície HDD funciona é ler esse bloco, então escreva de volta, e então veja se a unidade ainda diz que tudo está bem para aquele bloco . Os blocos costumavam ter 512 bytes de comprimento, mas os discos modernos usam blocos de 4KB internamente. Uma unidade moderna de 4 TB requer testes em torno de um bilhão (1e9) de blocos de 4KB. E eu mencionei que os HDDs são lentos?
Se você tiver blocos inválidos e qualquer dado, você realmente deseja fsck.ext4 -cc
. E esse vai demorar cerca de um dia ou dois no mínimo. Fazer fsck.ext4 -c
permitirá que o ext4 evite os blocos defeituosos, mas não consiga consertar a unidade. A opção -c
de fsck.ext4
faz com que tente ler todos os blocos da partição. A opção -cc
fará com que tente ler cada bloco e o escreva o mesmo conteúdo na unidade e verifique se há erros. E mesmo os discos em que -cc
falha podem ser reparados algumas vezes ... No entanto, não existe uma solução mágica para localizar os blocos defeituosos. A única maneira é digitalizar a unidade inteira e ela ficará lenta com unidades enormes.
Como você não precisa de nenhum dado, fazer sudo dd if=/dev/zero of=/dev/sdX bs=4M
permitirá ignorar a parte "leia os dados" e ir diretamente para a parte "corrigir os blocos". E isso ainda levará algo entre 8 a 20 horas para ser concluído.
Observe que o firmware da unidade consertará o bloco defeituoso automaticamente quando você substituir o bloco defeituoso. Realmente não importa qual sistema operacional ou ferramenta você usa para sobrescrever um bloco defeituoso em um HDD. E os dados também não importam. Se a unidade não puder consertar nenhum bloco defeituoso, essa unidade estará concluída. Isso ocorre porque os discos rígidos modernos têm alguns blocos físicos extras na reserva que são usados para preencher os blocos defeituosos no espaço de endereço lógico. Se um bloco ruim não pode ser consertado, é somente porque todos os blocos no espaço de reserva já foram usados! A unidade já está falhando há muito tempo nesse caso.
Note que você tem que usar blocos corretos para consertar o bloco. Por exemplo, se sua unidade usa blocos físicos de 4KB e ainda permite blocos lógicos de 512B, você não pode sobrescrever um bloco defeituoso com uma gravação lógica de 512B, porque a unidade tentará tecnicamente ler o bloco real de 4KB, alterar o 512B que você gravou e -Escreva o bloco de 4KB de volta ao platter magnético. Obviamente, o "leia o 4KB real" falhará se o bloco físico de 4KB estiver ruim. A maneira de evitar isso é escrever todo o bloco de 4KB em um único comando HDD, para que nada precise ser lido a partir do disco físico. No final, você tem que escrever um bloco de 4KB corretamente alinhado para corrigir determinado bloco ruim. O comando dd
acima sempre escreverá blocos de 4MB, que serão alinhados corretamente se você usar o dispositivo inteiro como of
target (você pode usar qualquer múltiplo de 4 KB para gravação; o exemplo acima usa 4 MB para melhorar o desempenho). Se você usar uma única partição como destino e essa partição não estiver alinhada corretamente, esse comando ainda poderá falhar ao corrigir os blocos defeituosos se os tamanhos dos blocos lógicos e físicos não corresponderem à unidade. Tanto quanto sei, isso é verdade para a maioria dos HDDs modernos. A execução de smartctl -x /dev/sdX
fornecerá informações sobre o dispositivo sdX
.
Como sempre, faça man fsck.ext4
, man dd
e man smartctl
antes de mexer com essas coisas.