Recuperação mais rápida de um disco com setores defeituosos


13

Recentemente, tentei ddde um disco rígido não saudável para um arquivo. Eu usei dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Meu problema era que ddperdia muito tempo quando encontrava um bloco defeituoso. No meu caso de uso, eu ficaria feliz em pagar com alguma perda de dados para obter um resultado mais rápido.

Existe alguma maneira de acelerar o tratamento de erros? Talvez um tweak do kernel (dizendo ao HDD para fazer menos esforço para ler um bloco)? Ou outro programa?

Respostas:


29

Primeiro, para o software usar: você pode tentar usar em ddrescuevez de dd.

ddrescuetem uma opção para fazer apenas um número limitado de novas tentativas. Ele também pode usar um arquivo de log, registrando quais blocos estavam com defeito. Se você quiser fazer mais tentativas mais tarde, poderá usar o mesmo arquivo de log para executar ddrescue novamente com opções diferentes (como mais tentativas) e ele tentará apenas os blocos necessários.

Exemplo de uso:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Na ddrescuepágina de informações:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Aqui estão algumas fontes adicionais para usar ddrescue:


Editar

No caso do HDD em si está levando muito tempo, você pode tentar ativar um recurso chamado TLER ( T ime L imited E rror R ECUPERAÇÃO) ou CCTL ( C ommand C EALIZAÇÃO T ime L IMIT). Nem todos os HDDs possuem, mas você pode usá-lo para limitar o tempo no próprio controlador de HDD. Essa abordagem pode ser combinada com o uso ddrecue, é claro.

O Linux possui uma ferramenta chamada smartctl(no smartmontoolspacote).

Para verificar a configuração atual ("desativado" significa um tempo ilimitado, que você não deseja):

# smartctl -l scterc /dev/sda

Para configurá-lo para um valor fixo (5,0 segundos neste exemplo. A configuração para 0 desativa o TLER):

# smartctl -l scterc,50,50 /dev/sda

Fonte para TLER: http://en.wikipedia.org/wiki/TLER


2
Outra ferramenta é olhar para dc3dd que é uma versão forense de dd
fpmurphy

oh legal, eu não conhecia essa ferramenta!
Slizzered

2
Eu não tinha idéia sobre esse TLER, mas realmente salvou o meu dia. No meu disco, eles foram desativados e cada vez que eu rodava o ddrescue, meu disco era bloqueado após alguns segundos. Desligar, ligar e próxima tentativa. Agora, defino-o em 2 segundos com o comando mencionado e ele nunca bloqueia novamente, pula alguns setores, mas pelo menos continua sem interrupções.
Sven Rieke

2

Eu obtive bons resultados de discos ilegíveis com este software.

http://www.cgsecurity.org/wiki/TestDisk

Este próximo também é uma ferramenta de recuperação sólida. Pode obter arquivos mesmo que sua tabela de arquivos esteja quebrada ou se eles foram excluídos. É uma ferramenta forense muito boa. Ele despeja as coisas de uma maneira realmente desorganizada, mas você pode mover todos os dados.

http://www.cgsecurity.org/wiki/PhotoRec


2

Para uma opção rápida e rápida para resgatar o disco, você pode usar um arquivo de script sh e executá-lo com sh. Ele contém esta linha, basta repetir sudo ddrescuee sleep 3mais algumas vezes. O sono é usado para fazer a unidade descansar alguns segundos:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

As opções usadas acima:

  • -r0 : sem novas tentativas
  • -e +0: sair no primeiro erro
  • -T 1s: sair com 1 segundo de falha na leitura
  • -d : E / S direta
  • -n : sem raspar

Você pode usar -Rdepois de concluir com a opção -Auma vez, que reverterá e removerá todo o tamanho do erro e começará novamente para trás. Significa que ele lerá os erros de maneira diferente.


0

Depende do tamanho do seu disco rígido e de quantos blocos defeituosos ele possui. Geralmente, leva 20 minutos para fazer backup usando DD um hd tera de 1 tera. Com blocos ruins que acabei de me recuperar esta manhã, levei o dobro do tempo. Eu estava tendo problemas para duplicar (fazer backup de um disco) com cerca de 30 blocos defeituosos. A primeira coisa que fiz foi fazer backup de arquivos usando o Filezilla comum para fazer backup de todos os bons dados. Percebo que um arquivo grande não estava sendo copiado corretamente (parando no meio e reiniciando a transferência). Felizmente, tenho um backup anterior do mesmo arquivo. Para duplicar o disco, tive que encontrar os blocos defeituosos no disco usando este procedimento:

Primeiro, descubra o disco com problema, identificando as informações do HD usando o fdisk -l

Segundo, se digamos que seu disco é / dev / sdb, então você precisa executar o comando badblocks -v / dev / sdb , que listará todos os blocos defeituosos na unidade. Felizmente, haverá alguns. Se nenhum bloco defeituoso for encontrado, os blocos do seu drive estarão OK e você precisará descobrir outra coisa. Meu tamanho de bloco é 512, então eu uso esse número padrão para executar o DD

3º cada bloco é do tamanho 512, então o que eu fiz foi definir bs = 512

Cada vez que executava o DD regularmente, como sempre faço, meus dados, após os erros, ficam corrompidos. Então, eu uso os parâmetros, conforme explicado na página https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html, procure a parte "Por falhas nos discos".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Demorou um pouco. Cada bloco defeituoso encontrado soa como uma batida na unidade defeituosa. Ele copia bloco por bloco, e através de todos os meus blocos ruins fez o mesmo barulho. A quantidade de vezes que um ruído foi causado foi porque ele encontrou outro bloco defeituoso e informa sobre a mensagem de erro no visor. O que o 'conv = noerror, sync' faz, é eliminar leituras ruins com NULs, enquanto 'iflag = fullblock' atende a leituras curtas, mas mantém os dados sincronizados até o fim. Sem corrupção, simplesmente não copia os blocos defeituosos e os preenche com NULs vazios.

Depois que a cópia com DD foi feita, substituí o arquivo inválido, revertendo o Filezilla de um backup passado e tudo funcionou bem. Espero que isso seja útil para outras pessoas que tentam fazer backup de unidades com defeito.

NOTA: Meus blocos defeituosos estavam praticamente próximos um do outro. Cerca de 4 blocos de cada vez juntos em grupos onde foram detectados problemas. Se seus blocos estiverem em todo o disco, vários arquivos poderão ser afetados. Felizmente, no meu caso, um grande arquivo de banco de dados de 4 GB foi afetado apenas.


1
Se a mesma resposta abordar várias perguntas, há uma boa chance de as perguntas serem duplicadas. Nesse caso, é melhor responder uma e sinalizar a outra como uma possível duplicata. Isso evita o inchaço de respostas repetitivas e vincular as perguntas facilita aos leitores encontrar todas as respostas.
fixer1234

Na verdade não, mas se você acha, me avise para apagar minha resposta. Procurei em todos os lugares a solução certa, mas encontrei uma maneira de corrigir um problema no meu servidor. Existem várias outras perguntas semelhantes, que não responderam ao meu problema. Até agora, encontrei cerca de uma dúzia de perguntas semelhantes ou relacionadas por toda parte. Acabei de responder a alguns para escrever minha experiência e como consegui resolvê-la. Deixe-me saber se você gostaria que eu apagasse minha resposta e ficarei feliz em fazê-lo. Saudações.
Luis H Cabrejo 25/07/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.