Como faço para reparar facilmente um único bloco ilegível em um disco Linux?

22

Meu sistema Linux começou a lançar erros SMART no syslog. Eu o localizei e acredito que o problema é um único bloco no disco. Como faço para obter facilmente o disco para realocar esse bloco? Gostaria de saber qual arquivo foi destruído no processo. (Estou ciente de que, se um bloco falhar em um disco, é provável que outros o sigam; eu tenho um bom backup em andamento e só quero tentar manter esse disco funcionando.)

A pesquisa na Web leva ao bloco HOWTO incorreto , que descreve um processo manual em um disco desmontado. Parece complicado e propenso a erros. Existe uma ferramenta para automatizar esse processo no Linux? Minha única outra opção é a ferramenta de diagnóstico do fabricante , mas presumo que isso prejudicará o bloco ruim sem nenhum relatório sobre o que foi destruído. Na pior das hipóteses, podem ser metadados do sistema de arquivos.

O disco em questão é a partição do sistema principal. Usando ext3fs e LVM. Aqui está o log de erros do syslog e o bit relevante do smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Há um despejo smartctl completo no pastebin .

Nelson
fonte
Eu pensei que o firmware do disco irá automaticamente re-mapear o bloco defeituoso na leitura, então teoricamente isso já foi feito. Conforme indicado abaixo, execute fsck (ou o equivalente correto para o seu FS) para garantir que o FS de sobreposição ainda esteja estável.
BuildTheRobots
2
Meu entendimento é que o firmware do disco só remapeará o bloco na gravação , não na leitura. Então, realmente, preciso forçar uma gravação no bloco em questão.
Nelson
1
Eu finalmente aposentei este disco. Ele funcionou bem por vários meses, mas depois do 5º erro de leitura, eu desisti.
1819 Nelson

Respostas:

12

Você poderia tentar hdparm --write-sector <LBA> /dev/ice.

Não conheço outra maneira de fazer isso - você precisa converter manualmente o LBA em blocos do sistema de arquivos (como você já encontrou)

James
fonte
Ooh, essa é uma nova bandeira! Definitivamente, isso cuidará de realocar o bloco ruim. Agora, tudo o que preciso é de uma maneira fácil de encontrar o que isso traria.
Nelson
3
Tendo usado esse método para consertar um disco, posso dizer que esse é o método correto. Forçar uma gravação no setor em questão forçará a unidade a enfrentar o setor e (a) obterá uma gravação bem-sucedida ou (b) acabará com um mau segundo permanente junto com um remapeamento.
Avery Payne
Ótimo! E muito mais fácil do que smartmontools.sourceforge.net/badblockhowto.html
Janning
É estranho que esse processo iterativo (de procurar o próximo setor ruim através do SMART e forçá-lo a
realocar
32

Eu escrevia o firmware do disco para a WD e uma vez escrevi o firmware que transferia os blocos defeituosos.

Primeiro, a maioria dos blocos defeituosos é detectada nas leituras, não nas gravações. As gravações são feitas às cegas, o que significa que os dados são gravados sem serem verificados. Assim, em uma gravação, se a mídia for ruim, você não saberá até que o host faça uma leitura para esse setor. Há uma pequena parte do setor (o cabeçalho do setor) que é lido nas gravações para localizar o setor correto, de modo que, se houver um erro na leitura do cabeçalho do setor, a unidade irá reatribuir o setor e gravá-lo com os dados recebidos do comando write. Mas a grande maioria dos blocos defeituosos é detectada nas leituras, e apenas porque uma gravação é bem-sucedida em um setor não significa que a mídia seja boa ou que o setor tenha sido reatribuído.

Agora, sobre a reatribuição de bloco inválida (também chamada de realocação). Sim, normalmente a unidade tentará reatribuir um setor se o erro for ruim o suficiente (ou seja, a falha do ECC for ruim o suficiente), mas a unidade ainda poderá recuperar os dados após a correção do ECC. Geralmente isso é feito automaticamente. A única exceção é que o host poderia ter dito anteriormente à unidade para não fazer realocações automáticas, mas isso raramente é feito.

Então, o que acontece se a unidade faz uma leitura e não consegue recuperar os dados? Nada. O erro é relatado ao host, mas nenhuma reatribuição é feita. O problema é que a unidade pode reatribuir o setor, mas não tem a menor idéia de quais dados gravar no setor reatribuído. Se apenas digitasse zeros, digamos, e o setor fosse lido novamente, retornaria todos os zeros sem nenhuma indicação de que os dados não eram válidos. Isso é essencialmente a mesma coisa que corrupção de dados. A unidade não pode contar com o host acompanhando os erros por vários motivos (por exemplo, e se a unidade foi movida para um novo host?), Portanto, o melhor curso de ação é não fazer nada quando os dados puderem ' Não seja recuperado.

As unidades modernas, no entanto, salvarão a localização do setor defeituoso quando ele não puder ser realocado. O número de setores defeituosos que aguardam realocação pode ser encontrado nos dados SMART. O que acontece é que, se uma gravação é feita em um dos setores defeituosos que aguardam realocação, a realocação é feita porque a unidade agora possui dados válidos para gravar após a realocação. Assim, quando as pessoas dizem que escrever para um setor ruim irá realocá-lo, isso é apenas metade da história. A unidade deve ser lida primeiro, para descobrir todos os setores defeituosos que não podem ser realocados automaticamente. Assim, você pode gravar uma unidade inteira e os dados SMART dirão que não há setores defeituosos aguardando realocação, mas você não limpou necessariamente a unidade de todos os setores defeituosos. Então, se você realmente deseja limpar todos os setores defeituosos,

Existem outras maneiras de lidar com blocos defeituosos que não podem ser realocados. Se a unidade fizer parte de uma configuração RAID redundante (ou seja, qualquer coisa menos RAID 0), o software RAID deve recuperar automaticamente os dados de um setor defeituoso das outras unidades e gravá-los no setor realocado. Os discos SCSI têm um comando explícito de reatribuição de blocos que o host pode usar para forçar a reatribuição mesmo quando não há dados válidos para gravar no bloco, mas seu uso é de nível bastante baixo.

tenner
fonte
1
Também vale a pena mencionar que pelo menos alguns HDDs da Seagate suportam o Write-Read-Verify, que pode ser ativado usando hdparm -R(assumindo um hdparm razoavelmente recente). Isso ocorre com uma penalidade significativa no desempenho de gravação (aproximadamente metade da taxa de transferência e IOPS de gravação, porque agora todas as gravações incorrem em uma leitura subsequente), mas se o seu hardware suportar e sua carga de trabalho for muito pesada, essa pode ser uma medida preventiva muito viável .
a CVn
2

Eu acho que tudo que você precisa fazer é:

e2fsck -c /dev/hda1

assumindo que / dev / hda1 é a partição (não montada). Ou:

e2fsck -c -c /dev/hda1

para fazer um teste de leitura e gravação não destrutivo (mais lento). Ainda terá que ser desmontado. Eu não acho que isso lhe dará detalhes sobre dados perdidos.

Matthew Flaschen
fonte
Mas é uma pena que isso não pareça usar as informações da SMART sobre os bad-blocks. Pergunto-me por que não existe uma ferramenta fsck que usaria as informações de bloqueio incorretas do SMART e tentasse evitá-las ou reparar os arquivos afetados, conforme descrito em smartmontools.sourceforge.net/badblockhowto.html ou serverfault.com/a/106130/68972 . ..
IMZ - Ivan Zakharyaschev
2

Michael está correto e, na maioria dos casos, eu diria que basta substituir a unidade, que é barata. No entanto, se você não possui backups e não consegue obter dados importantes da unidade, ou apenas deseja tentar reparar a unidade, tente usar o spinrite , no nível mais alto.

Eu tinha um drive de laptop que começou a fazer barulhos alguns anos atrás. Badblocks mostraram que a unidade tinha 118 blocos visíveis para o usuário final. Como eu já tinha uma cópia do SpinRite, decidi experimentá-la antes de comprar uma nova unidade. Depois de rodar o spinrite na unidade, os badblocks mostraram 0 blocos ruins e os ruídos pararam. A unidade trabalhava há mais de dois anos desde então.

3dinfluence
fonte
Nelson, você vai votar cada resposta que não é o que você quer ouvir? Uma unidade saudável remapeia automaticamente um bloco com defeito. Se você precisar fazer algo para forçar isso, a unidade não será mais saudável e deverá ser substituída.
3dinfluence
Não, apenas diminui a votação de uma resposta porque ela não respondeu à minha pergunta. Você sugeriu spinrite, obrigado! Meu entendimento é que uma unidade saudável não remapeará um setor ruim até que seja gravada. Estou tentando encontrar a maneira mais simples de forçar uma gravação. Indo para a sugestão de Matthew e ver se o fsck é inteligente o suficiente para fazê-lo.
Nelson
Desculpe, tirei as conclusões depois de ver 2 respostas votadas rapidamente e você responder à outra resposta que assumi que fosse você.
3dinfluence
2
Você está certo de que o remapeamento incorreto do setor acontece quando uma gravação falha em um bloco. Se você possui apenas um bloco corrompido no que diz respeito ao sistema de arquivos, o fsck pode resolver seu problema se o bloco em questão for um bloco de metadados. O fsck realmente apenas verifica e corrige erros nos metadados. Portanto, não garante os dados em si. Os sistemas de arquivos da próxima geração, como BTRFS e ZFS, podem detectar e, se houver redundância, corrigir erros de dados. O Spinrite também forçaria isso enquanto lê, depois grava os dados invertidos, relê e depois inverte os dados em todos os blocos como parte de sua verificação.
3dinfluence
1

Se você possui backups e sabe que esse é um erro lógico e não físico, a melhor maneira de fazer isso é zerar o disco.

Eu usaria o MHDD, é bastante fácil de usar e, desde que você lembre de configurar o seu HDD no Bios para emulação IDE e, em seguida, volte para o AHCI quando o trabalho estiver concluído, você não precisa se preocupar com nada.

Depois de inicializar no MHDD, escolha seu tipo de unidade no comando ERASE e confirme sua escolha.

Consiga uma cafeteria, isso pode demorar um pouco.

Depois que o Drive for zerado, execute a digitalização (f4) com Remapear definido como ON (o padrão é desativado). Se ainda houver problemas com a unidade (isso significa que há um dano físico no prato e a unidade está em uma ladeira descendente), essa opção os "corrigirá", mapeando a área danificada para partes saudáveis ​​da unidade.

Se não houver erros UNC, parabéns você e sua unidade ainda podem ser amigos nos próximos anos.

Jahith
fonte
-1

Se o disco estiver com defeito, substitua-o. Não vale a pena o risco de desmoronar mais.

Michael Graff
fonte
Fui explícito sobre saber que o disco está com defeito e ter backups para evitar o risco.
Nelson
2
Isso significa apenas que você está disposto a jogar. Não acho que isso signifique que não deva ser substituído, apenas que você deseja ignorar esse conselho. Duvido que qualquer backup possa salvar seu sistema de si mesmo quando o disco desmoronar, e as coisas ficarão muito esquisitas à medida que as coisas se degradarem.
Michael Graff
3
Esta resposta deve ser um comentário ... A pergunta é específica e exaustiva. E, portanto, isso não é uma resposta.
Pitto 18/01/12