Antecedentes / Contexto:
Atualmente, estou executando o GNU ddrescue 1.18.1 para recuperar dados de um USB que sofreu uma desconexão de cabo enquanto eu escrevia uma imagem de disco virtual na partição disk2s1. Inicialmente, estou recuperando minha segunda partição (disk2s2) e observe que atingi a terceira fase (divisão). Estou colocando a imagem em um armazenamento em rede.
Questão:
Eu notei que essa fase faz um loop. Existe uma maneira de calcular o número de loops que provavelmente encontro, considerando minhas informações de status atuais (estou mostrando apenas dois erros)?
Estado:
Atualizar / Editar:
Por isso, ainda estou muito interessado em saber como estimar os loops / tempo para conclusão usando a ferramenta ddrescue. Pelos comentários, estou adicionando uma avaliação de um arquivo de log para minha partição disk2s1 como a que está sendo executada atualmente (o disk2s2 foi concluído após 14,5 horas, com uma interrupção de usuário por aproximadamente 6 horas).
Log de partição concluído
Para a partição que acabou de concluir, aqui está o resultado da inspeção do log.
Referência (notas do algoritmo ddrescue):
4 Algoritmo
O GNU ddrescue não é um derivado do dd, nem está relacionado ao dd de forma alguma, exceto pelo fato de que ambos podem ser usados para copiar dados de um dispositivo para outro. A principal diferença é que o ddrescue usa um algoritmo sofisticado para copiar dados de unidades com falha, causando o menor dano possível possível.
O Ddrescue gerencia eficientemente o status do resgate em andamento e tenta resgatar as partes boas primeiro, agendando leituras em áreas ruins (ou lentas) para mais tarde. Isso maximiza a quantidade de dados que podem ser finalmente recuperados de uma unidade com falha.
O utilitário dd padrão pode ser usado para salvar dados de uma unidade com falha, mas ele lê os dados sequencialmente, o que pode desgastar a unidade sem resgatar nada se os erros estiverem no início da unidade.
Outros programas leem os dados sequencialmente, mas alternam para leituras pequenas quando encontram erros. Essa é uma péssima idéia, pois significa gastar mais tempo em áreas de erro, danificando a superfície, as cabeças e a mecânica do acionamento, em vez de sair delas o mais rápido possível. Esse comportamento reduz as chances de resgatar os bons dados restantes.
O algoritmo do ddrescue é o seguinte (o usuário pode interromper o processo a qualquer momento, mas esteja ciente de que uma unidade defeituosa pode bloquear o ddrescue por um longo tempo até que o kernel desista):
1) Leia opcionalmente um arquivo de log descrevendo o status de um resgate com várias partes ou interrompido anteriormente. Se nenhum arquivo de log for especificado ou estiver vazio ou não existir, marque todo o domínio de recuperação como não tentado.
2) (Primeira fase; Copiando) Leia as partes não tentadas do arquivo de entrada, marcando os blocos com falha como não aparados e pulando além deles. Pule também além das áreas lentas. As áreas ignoradas são tentadas posteriormente em duas passagens adicionais (antes do corte), revertendo a direção após cada passagem até que todo o domínio de recuperação seja tentado. O terceiro passe é um passe amplo, com o salto desativado. (O objetivo é delimitar erros grandes rapidamente, manter o arquivo de log pequeno e produzir bons pontos de partida para aparar). Somente áreas não experimentadas são lidas em grandes blocos. O corte, divisão e nova tentativa são feitos setor por setor. Cada setor é tentado no máximo duas vezes; o primeiro nesta etapa (geralmente como parte de uma leitura de bloco grande, mas às vezes como leitura de um único setor), o segundo em uma das etapas abaixo como leitura de um único setor.
3) (Segunda fase; Aparar) Leia adiante um setor de cada vez, a partir da borda principal do menor bloco não aparado, até encontrar um setor defeituoso. Em seguida, leia para trás um setor de cada vez, a partir da borda final do mesmo bloco, até que um setor defeituoso seja encontrado. Para cada bloco não aparado, marque os setores defeituosos encontrados como setor defeituoso e marque o restante desse bloco como não dividido, sem tentar lê-lo. Repita até que não haja mais blocos não aparados. (Grandes blocos não aparados são produzidos pela concatenação de blocos menores e, portanto, sua fração de bons dados nas bordas é menor).
4) (Terceira fase; Divisão) Leia adiante um setor por vez do centro do maior bloco não dividido, até que um setor defeituoso seja encontrado. Então, se o setor defeituoso encontrado não for o primeiro, tente retroceder um setor por vez no centro do mesmo bloco, até encontrar um setor defeituoso. Se o arquivo de log for maior que '--logfile-size', leia sequencialmente os maiores blocos não divididos até que o número de entradas no arquivo de log fique abaixo de '--logfile-size'. Repita até que todos os blocos não divididos restantes tenham menos de 7 setores. Em seguida, leia os blocos não divididos restantes sequencialmente.
5) (Quarta fase; nova tentativa) Opcionalmente, tente ler novamente os setores defeituosos até que o número especificado de passes de nova tentativa seja atingido. Todo setor defeituoso é tentado apenas uma vez em cada passo. O Ddrescue não pode saber se um setor defeituoso é irrecuperável ou se será eventualmente lido após algumas tentativas.
6) Escreva opcionalmente um arquivo de log para uso posterior.
O tamanho total do erro ('errsize') é a soma dos tamanhos de todos os blocos não aparados, não divididos e com setores defeituosos. Aumenta durante a fase de cópia e pode diminuir durante o corte, divisão e nova tentativa. Observe que, à medida que o ddrescue divide os blocos com falha, diminuindo-os, o tamanho total do erro pode diminuir enquanto o número de erros aumenta.
O arquivo de log é salvo periodicamente no disco, bem como quando o ddrescue termina ou é interrompido. Portanto, em caso de falha, você pode retomar o resgate com poucas cópias. O intervalo entre salvamentos varia de 30 segundos a 5 minutos, dependendo do tamanho do arquivo de log (arquivos de log maiores são salvos em intervalos mais longos).
Além disso, o mesmo arquivo de log pode ser usado para vários comandos que copiam diferentes áreas do arquivo de entrada e para várias tentativas de recuperação em diferentes subconjuntos. Veja este exemplo:
Salve a parte mais importante do disco primeiro. ddrescue -i0 -s50MiB / dev / arquivo de log de imagem hdc ddrescue -i0 -s1MiB -d -r3 / dev / arquivo de log de imagem hdc hdc
Em seguida, salve algumas áreas principais do disco. ddrescue -i30GiB -s10GiB / dev / arquivo de log de imagem hdc ddrescue -i230GiB -s5GiB / dev / arquivo de log de imagem hdc hdc
Agora salve o resto (não copia novamente o que já foi feito). ddrescue / dev / arquivo de log de hdimage hdc ddrescue -d -r3 / dev / arquivo de log de hdimage hdc
ddrescuelog -t YourLog.txt
em outro terminal?
ddrescue
pode apenas tentar recuperar problemas físicos e não ajuda em nada com erros lógicos. Para este último, tente fsck
ou não ..
ddrescue
só precisará se o disco tiver blocos defeituosos, que não seriam causados por uma "desconexão do cabo". Se você tiver problemas de cabo, apenas tente um cabo diferente ...