Os dados só podem ser salvos se alguns ou a maioria deles ainda estiverem lá.
Aqui está um simples teste ao vivo de força bruta (usando pv e lzop ) para ver até onde (e quanto) dd tem :
hd=/dev/sdc # change to whatever device or partition needs testing.
pv -EcN raw ${hd} | lzop | pv -cN compressed | wc -c
Em um disco rígido de 160 GB que não foi limpo por dd , após um minuto, o teste se parece com isso:
raw: 5.12GiB 0:01:11 [46.1MiB/s] [==> ] 3% ETA 0:33:15
compressed: 4.81GiB 0:01:11 [45.9MiB/s] [ <=> ]
Observe como o número compactado está bem próximo do número raw . Enquanto esse for o caso quando o trabalho estiver concluído, a maioria dos dados ainda existe. A porcentagem variaria de acordo com o quão cheio o disco rígido estava antes que o problema acontecesse, ou seja, se o HD ou a partição estivesse apenas 10% cheio, então 8% de lzop seriam normais. Depende também de que tipo de dados estava preenchendo o HD - felizmente o lzop é um compressor fraco, o que ajuda muito aqui.
Vamos tentar com todos os zeros:
hd=/dev/zero # change to whatever device or partition needs testing.
pv -cN raw ${hd} | lzop | pv -cN compressed | wc -c
... que depois de 8 segundos mostra:
raw: 6.81GiB 0:00:08 [ 891MiB/s] [ <=> ]
compressed: 31.8MiB 0:00:08 [4.06MiB/s] [ <=> ]
O tamanho compactado agora é menor que 1% de raw . Se um disco rígido inteiro é assim, os dados são kaput .
(Nota: leva mais tempo para ler discos rígidos maiores, então esse método seria melhorado por amostragem. Em vez de ler cada bloco, poderíamos usar dd para ler n bloqueia, pula para frente 10n blocos, e alimenta isso para a entrada raw acima.