Anda di halaman 1dari 8

Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.

html

Artigos br-linux.org
Artigos sobre Linux em bom
português, originais e com
qualidade

« Melhorando a navegação no mozilla 1.X usando cache na memória RAM | Índice de Tutoriais | Como instalar
Qmail+OpenLDAP no Slackware 10 »

Pesquisar
Como copiar a imagem de um HD para outro usando o Linux
Publicado em 19 de agosto de 2004

Recentemente precisei fazer uma cópia de um HD para outro por suspeitas de que o primeiro
estava com defeito. Encontrei um tutorial do Germano Barreiro
(germanobarreiro[@]yahoo.com.br) que foi a salvação!
Depois de entrar em contato com ele e pedir permissão para publicá-lo aqui no br-linux.org estou
disponibilizando este tutorial que mostra de modo fácil como criar imagem de um hd inteiro em
outro hd ou em um arquivo para backup com o comando dd.

Confiram...

COMO COPIAR A IMAGEM DE UM HD PARA OUTRO USANDO LINUX

Por Germano Barreiro (germanobarreiro[@]yahoo.com.br)

Imagine que voce acabou de instalar um linux, configurou servicos, criou contas de usuarios,
instalou e configurou uma ou outra aplicacao adicional baixada da internet. Agora, imagine que
do seu lado tem outra maquina igualzinha e voce vai ter que fazer a mesma coisa nela, tudo de
novo?

Provavelmente no minimo um suspiro de resignacao voce vai soltar antes de comecar. Agora
imagine que voce nao tem so uma, mas cinquenta maquinas ali do lado esperando pelo mesmo
tratamento... Dai voce nao vai mais estar suspirando, ira isso sim atras de alguma aplicacao
capaz de gerar e copiar imagens de hds, como o Ghost(R) por exemplo. E talvez nem saiba voce
que ja possui uma ferramenta que muito provavelmente podera resolver seu problema na linha
de comando do linux mesmo. Essa solucao, ou melhor, comando, tem o simples e pequeno nome
de dd (igual ao comando para apagar linhas no vi). Se voce visitar a man page do dd, recebera a
explicacao de que ele copia e converte um arquivo, da entrada padrao para a saida padrao a nao
ser que especificado em contrario. Mais um caso de man page que fala muito pouco em termos
praticos, mas vamos esmiucar um pouco... Voce pode especificar outra entrada ou saida atraves
das opcoes "if" e "of". Sendo que:

if = especifica o fluxo de entrada do comando


of = especifica o fluxo de saida do comando

Assim e que se voce executar o comando

# dd if=texto.txt of=texto2.txt

1 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

Tera algo equivalente a se tivesse executado

# cp texto.txt texto2.txt

O legal disso e que, se voce especificar um dispositivo de blocos como fluxo de entrada, fara uma
leitura, bit a bit, desse dispositivo. Relembrando, um dispositivo de bloco pode ser um hd, uma
particao de um hd, um cd, um disquete, ou afins... E se voce especificar como fluxo de saida um
dispositivo de blocos, estara escrevendo nesse dispositivo os bytes que vierem pela entrada. Para
dar um exemplo que vai deixar isso bem claro, vamos copiar um disquete usando o dd:

1. Insira o disquete original no drive, mas nao monte o seu sistema de arquivos
2. Execute o comando: dd if=/dev/fd0 of=disquete.img
3. Troque o disquete no drive por outro nao gravado
4. Execute o comando: dd if=disquete.img of=/dev/fd0

No passo 2, o dd leu o dispositivo de blocos /dev/fd0 (disquete) e jogou, byte a byte, tudo que
conseguiu ler num arquivo chamado disquete.img. Esse arquivo sera uma imagem exata do
sistema de arquivos contido no disquete, com tabelas de alocacao de arquivos e tudo mais.
Quando executou o passo 4, voce jogou esse conteudo num outro disquete, bit a bit. O resultado
sera que o segundo disquete sera uma copia perfeita do primeiro. E detalhe, se voce tivesse duas
unidades de disquete (muito incomum nas maquinas de hoje, mas.....) poderia ter feito
diretamente:

# dd if=/dev/fd0 of=/dev/fd1

Sendo /dev/fd0 a unidade que contem o disquete original. Se duvida que funcione, pode pegar um
disquetinho e experimentar a vontade, eu espero :) Muito bem, agora imagine que ao inves de
especificar dispositivos relativos a unidades de floppy disk, tivessemos especificado dispositivos
como /dev/hda ou /dev/hdb, teria funcionado? SIM, pode ter certeza disso, e e aqui que voltamos
ao problema de copiar a imagem deum hd. Retornando ao cenario inicial, voce tem uma maquina
na qual acabou de instalar linux, e quer jogar a imagem daquela instalacao para outro hd igual
ao da primeira maquina. Voce vai precisar colocar os dois hds em uma maquina de onde voce ja
possa dar boot num linux que nao seja o do hd recem instalado, pois nenhum dos sistemas de
arquivos no hd a ser lido pode estar montado. Entao o que voce pode fazer e instalar esses hds
em /dev/hdc (ide2 master) e /dev/hdd (ide2 slave) numa maquina qualquer que ja tenha um hd
com linux bootavel (ou entao use um desses live cd para dar boot) e execute:

# dd if=/dev/hdc of=/dev/hdd

E uma copia exata do hd no ide2 master sera feita no ide2 slave. Aqui cabe um aviso importante
sobre linux em geral: se voce instalou o linux com o hd no primario master, e muda-lo para
primario slave ou secundario master, o sistema nao vai dar boot. E ,obviamente, uma copia
desses sistema tambem nao. Ou seja, quando for instalar esses hds numa maquina, certifique-se
de que estao no mesmo ide e com a mesma configuracao (master ou slave) com que aquele linux
foi instalado. Agora, a boa noticia e que a principio nao importa o SO que voce tem no hd original.
O dd nao faz discriminacao :) Vai copiar bit a bit o que estiver no primeiro hd para o segundo.
Legal ne?

Bom, isto aqui ja quebra um galho de quem tem que instalar varias maquinas em serie, e essas
maquinas em geral costumam ser iguais entre si. Mas e se forem maquinas diferentes, com hds
de capacidades diferente?

HDs DE DIFERENTES TAMANHOS

Primeiro entra uma regra simples e logica, se voce quer colocar um sistema de arquivos dentro

2 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

de um dispositivo, este tem que ter espaco para tanto. Ou seja, sempre copie do hd menor para o
hd maior, nunca o contrario. No mais, voce pode utilizar o procedimento que foi feito ate agora,
que a unica consequencia e que sobrara espaco nao particionado ao final do hd de destino. O
qual voce sempre pode, posteriormente, particionar e especificar um ponto de montagem para
ele. Uma outra situacao e que voce pode desejar querer mover aquele linux para um outro hd
com outro esquema de particionamento. Aqui entra de novo aquela caracteristica do linux: se
voce especificou que o raiz vai ficar, por exemplo, em /dev/hda3 durante a instalacao no hd
original, no novo hd este tambem vai ter que estar em /dev/hda3. Se especificou que o /boot tem
que ficar em /dev/hda2, tambem tem que ficar em /dev/hda2 no novo hd. Mas a boa noticia e que
nada impede essas particoes de estarem alguns blocos mais a frente ou mais para tras, o que
nao pode e haver mais particoes antes das particoes a serem copiadas em relacao ao hd original.
Isto posto, nada impede que voce faca algo como:

dd if=/dev/hdc2 of=/dev/hdd2 (admitindo que os hds estao no ide2 master e slave


respectivamente)

E repetindo o comando para quantas particoes formarem seu sistema, nao esquecendo a de swap
claro. De novo chamando a atencao, note que foi copiado hdd2 para hdd2, ou seja, segunda
particao para segunda particao. Mas nao ha impedimento que no primeiro hd a primeira particao
tenha 2G enquanto que no novo hd a primeira particao tenha 4G, fazendo com que a particao
hdd2 fique bem adiante.

Note que, neste procedimento, voce nao copiou o boot loader para o segundo hd, ou seja, ele nao
vai dar boot logo de cara. Voce vai ter que instala-lo manualmente. Se for o lilo, e se voce tiver o
arquivo de configuracao do boot loader a ser instalado no novo hd no seu diretorio atual do linux
que esta usando para executar a copia, voce pode fazer algo como:

# lilo -C arquivo_de_configuracao -b /dev/hdd

O arquivo de configuracao pode bem ser o /etc/lilo.conf copiado a partir do hd original, que voce
montou num ponto qualquer antes de processar a copia, so para pegar esse arquivo, e logo
depois desmontou. Nao e meu objetivo entrar em detalhes do comando mount aqui, a nao ser
uma pequena dica mais a frente. Se voce nao tem familiaridade com esse comando,
recomenda-se um pouco de estudo em cima dele e tambem sobre como o linux trata sistemas de
arquivos antes de tentar algo deste material.

Uma ultima dica: eventualmente voce pode ter problemas por consequencia do lilo no linux em
que voce executou a copia ser uma versao diferente daquele usado pelo linux que voce esta
copiando. Pior, voce pode ter usado para boot um linux que so usa grub (ou seja, voce tentou o
comando lilo e recebeu a classica mensagem de "command not found"). Nao se desespere, voce
pode montar o hd original num ponto de montagem qualquer, tal como no comando:

# mount -t ext3 /dev/hdc1 /mnt/linuxorigem

Usar co comando chroot para mudar temporariamente a referencia da raiz do seu sistema de
arquivos:

# chroot /mnt/linuxorigem

E agora que seu / esta temporariamente mudado para /mnt/linuxorigem, executar o comando:

# /sbin/lilo -b /dev/hdd

Depois e so dar exit para sair da "gaiola" onde se meteu :)


Possivelmente tambem poderia ter funcionado se tivesse feito algo como:

3 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

# /mnt/linuxorigem/sbin/lilo -C /mnt/linuxorigem/etc/lilo.conf -b /dev/hdd

Tudo depende de ate que ponto as bibliotecas do linux que usou para dar boot sao diferentes
daquelas que o lilo do hd origem espera encontrar para sua execucao. Agora, se quer realmente
se garantir contra sustos e nao ter que fazer essas acrobacias, use como boot um linux identico
aquele instalado no hd origem, e o primeiro exemplo de uso do lilo nao te dara problemas. Note
que esta preocupacao existe apenas para gerar copias bootaveis de hds onde voce copiou
particoes em separado. Copiando hds inteiros, como no primeiro exemplo, faz com que passe a
nao importar nem o SO ou SOs que estao ali. Voce tambem nao precisara se preocupar se a
particao que copiou contem apenas dados, e nao um SO que precisa dar boot. Por fim, e obvio
que se a maquina para a qual o hd recem escrito com o dd tiver componentes de hardware
diferentes daquela onde o linux do hd original foi instalado, voce tera que reconfigurar video,
som, rede, e tantos quantos forem os componentes de hardware que diferem.

FALANDO EM OUTROS SOs, NAO DA PROBLEMA MESMO?

Infelizmente eu nao tenho como ter testado com todos os SOs que existem pelo globo (e ainda
bem que hoje temos tantas opcoes, nao? :) ). Mas vamos aos casos que ja testei:

HD so com linux: normal, ja vale tudo o que falei ate aqui sem por nem tirar nada.

HDs iguais, no original tem linux e windows: tambem sem problemas se feito como na primeira
sessao deste texto.

HDS diferentes, no original tem linux e windows: atencao especial apenas para a particao
windows. Apesar de que isto e uma materia sobre linux, nao me custa dar um conselho: execute o
scandisk e o defrag antes de tentar a operacao. Se o windows e recem instalado, voce ate pode
pular esses passos, mas eu tive uma experiencia recente com um windows98 ja em uso ha algum
tempo, em que ele travava no hd para o qual foi copiado logo apos o boot. Executar aquelas duas
aplicacoes antes de fazer a copia resolveu meu problema. A proposito, so testei isso ate hoje com
windows da linha 98/Me usando fat. Nunca tentei com sistemas de arquivos ntfs para ver se
funciona.

DA PARA GUARDAR A IMAGEM NUM ARQUIVO?

Lembra do exemplo da copia do disquete? Igual em tudo, mas voce vai ter que ter espaco para
guardar o arquivo criado, que vai ter o mesmo tamanho que a particao/dispositivo que voce
copiou. Isso mesmo que parte do sistema de arquivos sendo copiado esteja vazio. Ou seja, se
voce esta copiando uma particao de 7G, mas ali dentro a soma dos arquivos guardados tem so
100K, ainda assim o arquivo que voce vai gerar vai ter 7G. O dd nao entende sistemas de
arquivos, tudo que ele entende sao fluxos de bytes, assim ele le a particao inteira, ate onde nao
tem gravado nada, e guarda. Isto posto, e so executar:

# dd if=/dev/hdb4 of=particao4.img

E sera criado o arquivo particao4.img, que contera uma imagem exata do sistema de arquivos
naquela particao. Agora, o dispositivo conectado em /dev/hdb pode ate ser desconectado e, se
mais tarde quiser restaurar aquela particao em outro hd, e so fazer:

# dd if=particao4.img of=/dev/hdb4

O mesmo vale para copias de hds inteiros. O problema de disponibilidade de espaco em disco
pode ser diminuido com o auxilio do gzip:

4 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

# dd if=/dev/hdb | gzip > imagem_do_hd.img.gz

Esse comando gera a imagem do hd, mas que agora estara compactada pelo gzip. Obviamente
para utiliza-la voce tera que descompacta-la:

# gzip -d -c imagem_do_hd.img.gz | dd of=/dev/hdb

A flag -c faz o gzip mandar os dados descompactados para a saida padrao ao inves de para um
arquivo sem a extensao .gz, como faria normalmente. Nao esqueca que o dd, como dito no inicio
do artigo, copia normalmente a partir da entrada padrao. Por isso aqui nao se especificou o
parametro if= . O preco que se paga neste ultimo exemplo, claro, e um enorme acrescimo de
tempo para a realizacao da compactacao e descompactacao. Uma outra aplicacao interessante a
que isto nos leva, embora nao esteja relacionada a copia de hds, e gerar uma imagem iso a partir
de um cd ja gravado, para depois ser usada na gravacao de um novo cd. Para fazer isso execute
como no exemplo:

# dd if=/dev/cdrom of=slackware_cd1.iso

Depois, e so passar o arquivo gerado como argumento do cdrecord ou do seu programa de


gravacao favorito. E uma ultima dica interessante: Sabia que e possivel montar esses arquivos
que sao copias de sistemas de arquivos, como se fossem um dispositivo? Digamos que, no caso
anterior, voce queira dar uma olhada nos arquivos que o cd continha, mas o cd criou pernas e
sumiu e voce so ficou com o arquivo de imagem :) Nao e preciso gravar o cd para depois
monta-lo, pode-ser perfeitamente montar o proprio arquivo de imagem como em:

# mount -t iso9660 slackware_cd1.iso /mnt/cdimg -o loop

O segredo esta justamente em passar o parametro -o loop no final do comando mount. Se nao
funcionar, verifique se o seu kernel foi compilado com suporte a loopback device. Um jeito de
checar isso e testar se e possivel carregar o modulo loop (embora esse tipo de suporte pode ter
sido compilado embutido no kernel, mas se assim fosse voce nao teria problemas e nem teria que
fazer esse teste). Por fim, para encerrar esse pequeno desvio (e praticamente o artigo), note que
voce nao esta limitado a fazer isso so com imagens geradas a partir de cds. Pode ser feito com
qualquer imagem desde que voce especifique o sistema de arquivos correto com -t. Obviamente,
essas imagens sao montadas sempre como somente leitura. Nao da para modificar o conteudo de
um arquivo de imagem usando essa tecnica. Para encerrar, note que as tecnicas apresentadas
aqui resolvem situacoes simples, mas havendo a necessidade de algo mais "profissional",
realmente e melhor procurar por um aplicativo dedicado a atender esse tipo de necessidade.

MAS DE ONDE VOCE TIROU ISSO?

Acontece que instalo linux desde antes dos CDs bootaveis, e nessa epoca o que os CDs traziam
era uma imagem dos disquetes de boot, e um aplicativo para DOS chamado rawwrite (ou era
rawrite?) que exatamente escrevia a imagem num disquete. Me perguntando na epoca como
poderia proceder para gravar essas imagens em um disquete se meu SO ja fosse Linux, pesquisei
a documentacao de texto dentro do CD e la estava a orientacao de como usar o dd para isso. A
partir dai, foi so experimentar e expandir o conceito principal ;)

Autor: Germano Barreiro


Email: germanobarreiro[@]yahoo.com.br

Postado por fuji em agosto 19, 2004 10:01 AM

Comentários para "Como copiar a imagem de um HD para outro


usando o Linux"

5 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

» Postado por: Daniel Fonseca ALves em agosto 20, 2004 09:02 AM, 200.150.42.:

Bom tutorial Germano Barreiro.


Complementando.
Sim funciona em NTFS, fiz a cópia de uma HD com Windows 2000 Server para um outro HD e
ficou perfeito.
HDs com defeitos físicos podem atrapalhar a cópia, neste caso recomendo o dd_rescue que
é um dd aprimorado e que server exatamente casos como este.

» Postado por: Jesse de Barros em agosto 24, 2004 11:29 AM, 200.158.104:

Exelente artigo!, o melhor que já ví do Linux e veio a calhar estava precisando de algo
assim, embora eu tenha o Ghost.

» Postado por: Jimi em agosto 27, 2004 10:56 AM, 201.2.210.1:

Realmente, muito bom tutorial


E ai experimentando mais um pouco mais um puco...

Com duas placas de som


/dev/dsp e /dev/dsp1 ou /dev/sound/dsp e /dev/sound/dsp1

#dd if=/dev/dsp of=/dev/dsp1

Fala ao MIC que esta ligado a "dsp" e ouve "dsp1"

Alguma boa idéia para fazer com isso.


Se alguém conseguir passar a saida via ARTs
para usar o FreeReverb (No KDE), avise-me

dd if=/dev/mouse /of=mouse
Captura os dados do mouse e manda para um arquivo.
Um dia pode-se precisar de uma idéia dessa.
Será que é possivel passar os dados do mouse para o "dsp" só para ver que barulho faz?
Não testei ainda.

» Postado por: M. Giovani em setembro 9, 2004 04:02 PM, 200.218.192:

Parabeniso-o pelo artigo.

Mas tentei fazer com um cd de PS1 e não deu certo (dd if=/dev/cdrom of=ps.iso). Foi criado
um arquivo muito pequeno (de poucos bytes) e o comando parou retornando um erro de
entrada e saida. Alguem pode me dar alguma dica?!!!!

Grato.

» Postado por: Marcos em setembro 16, 2004 06:25 PM, 143.106.2.5:

Não recomendo fazer a copia de uma partição via DD para um HD diferente do original
(exceto se for o mesmo tamanho e modelo).
O sistema funciona normal, mas tive vários problemas depois qdo fui tentar reparticionar:

6 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

fdisk não funciona direito, PartitionMagic dava pau, etc.


O problema é que o filesystem foi criado especificamente para um tamnho de partição. Qdo
vc aumenta a partição sem mexer no filesystem, os programas se embananam... além
disso, em geral, muda o tamanho da unidade de alocacao no disco (verifique com fdisk -l).
Use a imagem do dd apenas como backup; se comprou HD maior, faça a cópia por tar.gz,
pipe, cp xxx, etc.
Nos outros casos, funciona perfeito.
Nunca esquecer também do dd_rescue!

» Postado por: gbneves em setembro 17, 2004 01:43 PM, 201.8.13.22:

Estou querendo trocar o meu hd que é de 20 gb por um de 40 mas não quero ter instalar o
linux(red hat 7.2) novamente, pois trata-se de um servidor preciso de passo a passo
alguém pode me ajudar?
Obrigado.

» Postado por: André em outubro 2, 2004 11:20 AM, 200.148.38.:

Alguem sabe se tem algo parecido para copiar HD c/ Novell?


Obrigado

» Postado por: Ronaldo Queiroz em outubro 3, 2004 11:58 AM, 200.103.69.:

Excelente artigo. Congratulações e, tomara que você continue motivado para nos
presentear com mais materias Linux.

» Postado por: pai gow em outubro 8, 2004 05:26 AM, 210.210.72.:

3405 How can this all be as nice? Check out my site http://www.pai-gow-keno.com

» Postado por: Luiz Carlos em outubro 9, 2004 02:00 PM, 201.6.222.8:

Gente.
É por coisas como esta, que estou começando a usar Linux Kurumin, isto é, aprendendo
Linux.
Tem ferramenta de montão e boa. Sou sempre obrigado a usar Ghost ou outra coisa
qualquer.
Ótimo tutorial, gostei muito, especialmente por não fazer diferença entre SO, topa tudo
Parabéns!

Antes de comentar...

- Preserve a qualidade desta discussão


- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou

7 de 8 22-09-2010 14:43
Artigos br-linux.org: Como copiar a imagem de u... http://br-linux.org/tutoriais/003156.html

precisa de ajuda, use o Fórum.


- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor
distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver
provocado - um erro não justifica o outro
- Não seja um e-mala ;-)

Envie seu comentário


Nome: Lembrar as informações pessoais?

Sim Não

E-mail:

Seu website:

Atenção: Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas
ou precisa de ajuda, use o Fórum, onde mais pessoas estarão disponíveis para respondê-lo..

Comentários:

Conferir Postar

Nota: os comentários pertencem a seus respectivos autores e são de


responsabilidade de quem os postou. O restante desta nota está disponível sob a
licença GNU FDL, exceto se explicitamente declarado em contrário.

8 de 8 22-09-2010 14:43

Anda mungkin juga menyukai