Eu tive um acidente no disco rígido de 500 GB há cerca de 5 dias. Eu usei ddrescue
a partição importante há alguns dias e está em "Aparar blocos com falha" há quase 2 dias.
Comando original:
ddrescue -n /dev/rdisk1s2 /Volumes/OSXBackup/rdisk1s2.img /Volumes/OSXBackup/rdisk1s2.log
Saída atual:
Initial status (read from logfile)
rescued: 248992 MB, errsize: 1007 MB, errors: 15867
Current status
rescued: 249021 MB, errsize: 978 MB, current rate: 17408 B/s
ipos: 44405 MB, errors: 15866, average rate: 2784 B/s
opos: 44405 MB, time from last successful read: 0 s
Trimming failed blocks...
O comando original usou o ddrescue -n
parâmetro, e eu reiniciei o processo algumas vezes, conforme necessário (e parecia retomar exatamente de onde parou).
Existe alguma maneira de acelerar esse processo?
Editar: Seis horas depois, este é o status atual:
rescued: 249079 MB, errsize: 920 MB, current rate: 409 B/s
ipos: 39908 MB, errors: 15851, average rate: 2698 B/s
opos: 39908 MB, time from last successful read: 0 s
Trimming failed blocks...
Parece que, enquanto os "erros" estão em contagem regressiva dolorosamente lenta, o ipos / opos está em contagem regressiva da quantidade de dados que precisa processar e parece estar funcionando a uma taxa de 750MB / hora. Nesse ritmo, ele será concluído em ~ 53 horas. Caramba.
Editar # 2: dois dias depois, ainda em execução. No entanto, há esperança. Ele passou da parte "Aparar blocos com falha" e para a próxima fase "Dividir blocos com falha". De qualquer forma, o que deve ser retirado da visualização dessa pergunta é que isso definitivamente leva muito tempo quando uma boa quantidade de dados / erros está envolvida. Minha única esperança é que eu possa recuperar com êxito alguns dados importantes quando tudo estiver dito e feito.
rescued: 249311 MB, errsize: 688 MB, current rate: 0 B/s
ipos: 26727 MB, errors: 15905, average rate: 1331 B/s
opos: 26727 MB, time from last successful read: 20 s
Splitting failed blocks...
fonte
-M
apenas no caso de reboots e desta manhã dist-upgrade feito algum tipo de confusão)Respostas:
Observei que usar a opção
-n
(sem divisão) junto com-r 1
(tentar novamente) e definir-c
(tamanho do cluster) para um valor menor pode ajudar.Minha impressão é que o passo de divisão é muito lento, pois
ddrescue
divide e divide novamente as áreas danificadas. Isso leva muito tempo porqueddrescue
tenta restaurar pequenas porções de dados. Então, eu prefiro usar-n
(sem-split) em conjunto com-c 64
,-c 32
,-c 16
, asoProvavelmente, o
-n
(sem divisão) deve sempre ser usado para uma primeira passagem nas direções para frente e para trás. Parece que quanto mais os dados foram divididos, mais lenta a clonagem, embora eu não tenha certeza disso. Presumo que quanto maiores as áreas não tratadas, o melhor para executarddrescue
novamente, porque os setores mais contíguos devem clonar.Como estou usando um arquivo de log, não hesite em cancelar o comando com Ctrl+ Cquando a velocidade de leitura de dados se tornar duas baixa.
Também uso o modo
-R
(reverso) e, após uma primeira passagem, geralmente me proporciona velocidades mais altas lendo para trás do que para frente.Não está claro para mim como os setores tentados novamente (
-r N
) são tratados ao executar oddrescue
comando novamente, especialmente ao alternar os-R
comandos de clonagem forward (padrão) e reverse ( ). Não tenho certeza se o número de vezes que eles foram tentados é armazenado no arquivo de log e provavelmente o trabalho é feito novamente inútil.Provavelmente, o
-i
sinalizador (posição de entrada) também pode ajudar a acelerar as coisas.fonte
Pode ser muito difícil ver o progresso de
ddrescue
, mas há outro comando incluído chamadoddrescuelog
.Um comando simples
ddrescuelog -t YourLog.txt
produzirá essas informações agradáveis:Você pode até usá-lo enquanto
ddrescue
estiver em execução ...fonte
errsize: 289420 MB, errors: 34926 ( 7.23%) non-trimmed: 288130 MB, in 105407 area(s) ( 7.20%) non-split: 1243 MB, in 185 area(s) ( 0.03%) bad-sector: 47490 kB, in 92728 area(s) ( 0.00%)
; (... Mas, graças pilhas para o comando!Mais uma maneira de monitorar o progresso do ddrescue (no Linux, pelo menos) é através do uso de strace.
Primeiro, encontre o PID para o processo ddrescue usando "ps aux | grep ddrescue"
Em seguida, execute "strace" nesse processo. Você verá algo como:
...e assim por diante. A saída é rápida e feia, então eu a canalizo através do "grep" para filtrar as coisas que me interessam:
Nesse exemplo, o "1702212676608" equivale a "a quantidade de dados que ainda precisa ser processada no disco de 2 TB que você está tentando recuperar". (Sim. Ai.) O ddrescue está cuspindo um número semelhante - embora "1720 GB" - na saída da tela.
strace oferece um fluxo de dados de granularidade MUITO maior para você examinar; é mais uma maneira de avaliar a velocidade do ddrescue e estimar uma data de conclusão.
Executá-lo constantemente é provavelmente um plano ruim, pois competiria com o ddrescue pelo tempo de CPU. Comecei a canalizá-lo para "head" para que eu possa pegar os 10 primeiros valores:
Espero que isso ajude alguém.
fonte
strace -e lseek …
para isso - emborapv -d <pid>
possa ser mais bonito.Se seu objetivo é obter a maior parte dos dados intactos, você pode acelerar sua extração. Mas se você realmente deseja resgatar o máximo de dados possível, deixe o ddrecue morder cada um e o caminho a seguir.
fonte
Eu descobri que, jogando com o parâmetro -K, você pode acelerar as coisas. Pelo que vi, se o ddrescue encontrar um erro ao executar com a opção -n, tenta pular uma quantidade fixa de setores. Se ainda não consegue ler, pula o dobro do tamanho. Se você tiver grandes áreas danificadas, poderá indicar um grande valor de K (por exemplo, 100M) e, portanto, o salto em um erro será maior na primeira vez e será mais fácil evitar áreas problemáticas rapidamente no primeiro passado.
A propósito, existe uma maravilhosa aplicação gráfica para analisar o log.
http://sourceforge.net/projects/ddrescueview/
fonte
Qual é o sistema de arquivos do disco rígido em que você salva a imagem de recuperação e o arquivo de log? Acabei de fazer a experiência de que o resgate de um disco rígido interno de 500 GB (conectado via SATA) em um laptop executando Linux Mint a partir de um pendrive, salvando a imagem de resgate e o arquivo de log em um
exFat
disco rígido USB formatado, estava sendo iniciado lentamente (1-2 MB / s), mas após cerca de 250 GB, ele estava apenas rastejando a <100 KB / s. Parecia ficar mais lento quanto maior o tamanho do arquivo de imagem de resgate.Em seguida, mudei a imagem de resgate e o arquivo de log para outro local temporário, reformatei o disco rígido USB com o
ext4
sistema de arquivos, movi os arquivos novamente e retomei o processo ddrescue - e agora ele roda com 1-20MB / s novamente (flutuando mas cerca de 7 MB / s em média)!Parece
exFat
que não funciona muito bem com arquivos muito grandes (várias centenas de gigabytes).fonte
Para uma opção mais rápida e rápida para resgatar o disco, você pode usar um arquivo de script sh e executá-lo com "sh filename.sh". Ele contém esta linha mostrada, basta repetir "sudo ddrescue" e "sleep 3" mais algumas vezes, o sono é usado para fazer a unidade descansar alguns segundos; pode ser bom por alguns motivos:
O -r0 está sem respostas. O -e +0 é para sair com 1 erro. O -T 1s sai com 1 segundo de falha na leitura. Existem opções que podem ser usadas como -d para direct e -n para nenhum raspar, o que pode acelerar.
Você pode usar -R depois de concluir com a opção -A uma 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.
fonte
dd_rhelp é um script de shell que usa o dd_rescue "[...] em todo o disco, mas ele tenta coletar o máximo de dados válidos antes de tentar por anos em grupos de badsectors"
é bastante antigo (2012), mas ainda funciona. ainda não tentei o ddrescue.
fonte