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 .
Respostas:
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)
fonte
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.
fonte
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 .Eu acho que tudo que você precisa fazer é:
assumindo que / dev / hda1 é a partição (não montada). Ou:
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.
fonte
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.
fonte
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.
fonte
Se o disco estiver com defeito, substitua-o. Não vale a pena o risco de desmoronar mais.
fonte