Índice das dicas

Copiando dados de HDs ou CDs defeituosos

Por Carlos E. Morimoto em 12 de abril de 2006 às 15h02

4
É difícil copiar arquivos, por meios normais, a partir de um HD com badblocks, ou um CD-ROM riscado. Os programas fazem a cópia apenas até o ponto em que encontram o primeiro erro de leitura. Mesmo que exista apenas um setor defeituoso no meio do arquivo, você nunca conseguirá copiar o arquivo inteiro, apenas a metade inicial.

Existe um utilitário eficiente para fazer cópias a partir de mídias ruins, o dd_rescue. Ele faz a cópia das partes boas, ignorando os setores defeituosos. Funciona bem para recuperar arquivos de texto, imagens, vídeos, músicas, qualquer tipo de arquivo que possa ser aberto mesmo que estejam faltando alguns pedaços.

Você pode instalar o dd_rescue pelo apt-get:

# apt-get install ddrescue

Para usá-lo, indique a localização da partição ou CD-ROM que será copiado e um arquivo de destino. Ao copiar uma partição, você sempre precisa copiar o arquivo para dentro de uma partição diferente. A partição ou CD-ROM de origem deve sempre estar desmontada.

Para copiar um CD-ROM:

# dd_rescue /dev/cdrom /mnt/hda6/cdrom.img

Para copiar uma partição:

# dd_rescue /dev/hda1 /mnt/hda6/hda1.img

Para acessar os arquivos dentro da imagem, você deve montá-la usando a opção "-o loop" do mount, que monta um arquivo como se fosse um dispositivo:

# mount -o loop /mnt/hda6/cdrom.img /home/kurumin/cdrom
ou:

# mount -o loop /mnt/hda6/hda1.img /home/kurumin/hda1

Você verá todos os arquivos dentro da pasta, e poderá acessar o que foi possível ler.

Um problema do dd_rescue é que ele lê cada setor defeituoso várias vezes, de forma a tentar obter os dados a qualquer custo. Por um lado, isto é positivo, pois ele realmente acaba conseguindo recuperar vários setores que falham na primeira leitura, mas por outro lado, faz com que o processo de recuperação fique extremamente lento em mídias com muitos setores defeituosos.

Isto é especialmente problemático ao recuperar dados em HDs, pois se o teste demora muito, a possibilidade do drive dar seu último suspiro durante a recuperação, levando consigo os dados restantes é muito maior.

Uma solução é usar o "dd_rhelp", um programa que trabalha em conjunto com o dd_rescue, otimizando seu comportamento.

Ao usar o dd_rhelp, o processo de recuperação é dividido em duas etapas. Na primeira ele recupera os dados, pulando os setores defeituosos. Quando a recuperação está completa, ele carrega lista dos setores que falharam na primeira leitura e aí sim, passa ao comportamento padrão, lendo cada setor várias vezes. A diferença é que no caso você já está com os dados seguros.

Você pode baixar o dd_rhelp no http://www.kalysto.org/utilities/dd_rhelp/download/index.en.html ou http://freshmeat.net/projects/dd_rhelp/.

No site está disponível apenas o pacote com o código fonte, mas ele é relativamente simples de compilar. Descompacte o arquivo, acesse a pasta que será criada e use os comandos:

# ./configure
# make

Isto vai criar o executável dentro da pasta atual. Ao usá-lo, a sintaxe é a mesma do dd_rescue:

# ./dd_rhelp /dev/cdrom /mnt/hda6/cdrom.img

4 comentáriosPor Carlos E. Morimoto. Revisado 24 de setembro de 2011 às 17h09

Comentários

Usando o dd_rhelp
por Brasileiro (anônimo) em 19 de novembro de 2011 às 19h56
Uso do dd_rhelp:

Obs. 1: Minhas tentativas iniciais de recuperação de arquivo no DVD defeituoso foram com o dd_rescue.
O dd_rescue praticamente travava o computador, enquanto tentava recuperar setores defeituosos.

Obs. 2: O dd_rhelp, da mesma forma que o dd_rescue, criará um arquivo contendo a imagem do DVD inteiro !

Obs. 3: Descobri que em /dev há vários "arquivos" que são referências para dispositivos.

/dev/dvd era o meu DVD-ROM

/dev/dvd1 era o meu DVD-RW

No Terminal, usei o comando:

$sudo dd_rhelp /dev/dvd1 /endereco/completo/da/sua/pasta/nome-do-arquivo.img (é necessário o sudo !!!!)

/dev/dvd1 ---> meu DVD-RW

/endereco/completo/da/sua/pasta/nome-do-arquivo.img ----> Exemplo: /media/Particao1/teste.img

Inicialmente, o dd_rhelper foi tão rápido quando o dd_rescue.
De repente, parou no mesmo ponto de erro de leitura e ficou tão lento quanto o dd_rescue.

Após 2,5KB de erros, ele começou a ler o arquivo de trás para a frente.
continuando por Brasileiro (anônimo)
Porque estou utilizando o dd_rhelp
por Brasileiro (anônimo) em 19 de novembro de 2011 às 19h42
Tentei utilizar primeiramente o dd_rescue.

Precisava recuperar um arquivo de 585MB de um DVD.
Por volta dos 205MB o dd_rescue ficava muito lento...
Deixei-o rodando uma noite inteira, para na manhã seguinte descobrir que o dd_rescue só havia tentado recuperar, sem sucesso, 1,2MB de setores defeituosos.

Foi então que, após muito procurar, encontrei o dd_rhelp !!!

Vou testá-lo !
Como "instalar" o dd_rhelp
por Brasileiro (anônimo) em 19 de novembro de 2011 às 19h32
Obs. 1: Meu Linux é o UBUNTU 10.10

Obs. 2: Desenvolvo sistemas desde 1984. Ralei muito em MS-DOS e em todos os Windows imagináveis. Desenvolvo em Delphi. Estou adorando descobrir o mundo Linux no Ubuntu. Muito bom sistema operacional !

-----------------------------------------------------------------------
Antes de conseguir "instalar" o dd_rhelp, tive que procurar muito no Google como se fazia isto.

No final das contas, tudo ficou muito simples após ler as duas páginas a seguir:

------------------------------------------------------------------------------------
a) "http://www.debianadmin.com/recover-data-from-a-damaged-hard-disk-using-dd_rhelp.html":

dd_rhelp is a bash script that handles a very usefull program written in C which is called dd_rescue, it roughly act as the dd linux command with the caracteristic to
NOT stop when it falls on read/write errors.

=====> OBS.: Nesta página, eu descobri que o dd_rhelp era um "BASH SCRIPT".

------------------------------------------------------------------------------------
b) "http://ubuntuforums.org/showthread.php?t=996717":
([ubuntu] How to compile bash from an editor? - Ubuntu Forums.html)

Re: How to compile bash from an editor?
Last time on this one:

bash shell scripts are interpreted not compiled -- hence there is no reason to compile them.

If you want a personal .bash or .sh file, compose the file, save it, do the following:

chmod +x <xxxxx.sh>

Copy the file to your personal bin directory since this is in your path (you have to make the directory since its not included by default):
mkdir -p ~/bin

cp <shell_script_file.sh> ~/bin/<shell_script_file.sh>

Ok now you can run the shell script from the command line by simply typing

<shell_script_file.sh>

NO NEED TO COMPILE!!!

=====> OBS.: Nesta página, eu descobri que não é necessário (nem possível) compilar um bash script

-------------------------------------------------------------------------------------

Descompactei o arquivo dd_rhelp-0.1.2.tar.gz dentro da pasta dd_rhelp (que eu criei especificamente para guardar o .gz e vários .mht de páginas de dica).

Dentro da pasta dd_rhelp sugiu uma pasta chamada dd_rhelp-0.1.2.
Dentro da nova pasta havia um arquivo dd_rhelp (o Nautilus dizia que o tipo era "shell script").
Copiei o arquivo dd_rhelp para a pasta /bin
Na pasta /bin, o Nautilus dizia que o tipo do arquivo era "unknow".
Troquei o atributo "executable" do arquivo para true e o Nautilus passou a dizer que o tipo era "program".
Obs.: o tipo do arquivo dd_rescue (que já estava em /bin é "executable"
A partir daí já era possível "executar" o dd_rhelp.

Veja o que eu fiz no Terminal:

$ cd /media/2N500XP/Down500XP/SoftDownload/UBUNTU/dd_rhelp/dd_rhelp-0.1.2 (change directory)
$ sudo cp dd_rhelp /bin (SuperUser usando o cp (copy))
$ sudo chmod +x dd_rhelp (SuperUser usando o chmod, que troca o atributo executable. Poderia ser também "sudo chmod 777 dd_rhelp")
$ sudo dd_rhelp (Chamei o comando dd_rhelp)

Pronto ! Neste instante, o dd_rhelp respondeu:
Need 2 arguments...
usage: dd_rhelp {filename|device} {output-file} [{info}]
or dd_rhelp --help
or dd_rhelp --version

"INSTALADO !!!!!"
---------------------------------------------------------------
Detalhe:

Um dos sites que achei mandava instalar primeiro o dd_rescue !
Ou seja, parece que o dd_rhelp usa algo do dd_rescue.