Como copiar a imagem de um HD para outro usando o Linux

Deixe sua contribuição, assim vamos facilitar a manutenção e configuração para outros membros que estão iniciando.
Regras do fórum Leia as Regras Gerais do Manjaro Brasil em "Normatividade" e pesquise antes de postar.

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor josh » 27 Mar 2013, 22:04  •  MS 1

Descrição do artigo: Recentemente precisei fazer uma copia de um HD para outro por suspeitas de que o primeiro estava com defeito. Foi a salvação! o Comando dd
Confiram...

Link externo para este artigo:

kb.html?a=85

======

Imagine que você acabou de instalar um Linux, configurou serviços, criou contas de usuários, instalou e configurou uma ou outra aplicação adicional baixada da internet. Agora, imagine que do seu lado tem outra maquina igualzinha e você vai ter que fazer a mesma coisa nela, tudo de novo?

Provavelmente no mínimo um suspiro de resignação você vai soltar antes de começar. Agora imagine que você não tem SO uma, mas cinquenta maquinas ali do lado esperando pelo mesmo tratamento... Dai você não vai mais estar suspirando, ira isso sim atrás de alguma aplicação capaz de gerar e copiar imagens de HDs, como o Ghost(R) por exemplo. E talvez nem saiba você que já possui uma ferramenta que muito provavelmente poderá resolver seu problema na linha de comando do Linux mesmo. Essa solução, ou melhor, comando, tem o simples e pequeno nome de dd (igual ao comando para apagar linhas no vi). Se você visitar a man page do dd, recebera a explicação de que ele copia e converte um arquivo, da entrada padrão para a saída padrão a não ser que especificado em contrario. Mais um caso de man page que fala muito pouco em termos práticos, mas vamos esmiuçar um pouco... Você pode especificar outra entrada ou saída através das opções "if" e "of". Sendo que:

if = especifica o fluxo de entrada do comando
of = especifica o fluxo de saída do comando

Assim e que se você executar o comando

Código: Selecionar todos
dd if=texto.txt of=texto2.txt


Terá algo equivalente a se tivesse executado

Código: Selecionar todos
cp texto.txt texto2.txt


O legal disso e que, se você especificar um dispositivo de blocos como fluxo de entrada, fará uma leitura, bit a bit, desse dispositivo. Relembrando, um dispositivo de bloco pode ser um HD, uma partição de um HD, um CD, um disquete, ou Pen Drives ou até mesmo um HD externo... E se você especificar como fluxo de saída um dispositivo de blocos, estará escrevendo nesse dispositivo os bytes que vierem pela entrada. Para dar um exemplo que vai deixar isso bem claro, vamos copiar um Pen Drive usando o dd:

1. Insira o Pen Drive na entrada USB, mas não monte o seu sistema de arquivos
2. Execute o comando: dd if=/dev/sdb1 of=imagem.img
3. Troque o Pen Drive por outro não gravado
4. Execute o comando: dd if=imagem.img of=/dev/sdb1

No passo 2, o dd leu o dispositivo de blocos /dev/sdb1 ((pen drive) e jogou, byte a byte, tudo que conseguiu ler num arquivo chamado imagem.img. Esse arquivo será uma imagem exata do sistema de arquivos contido no pen drive, com tabelas de alocação de arquivos e tudo mais. Quando executou o passo 4, você jogou esse conteúdo num outro pen drive, bit a bit. O resultado será que o segundo pen drive será uma copia perfeita do primeiro. E detalhe, se você tivesse duas unidades de pen drives (muito comum nas maquinas de hoje, mas.....poderia ter feito diretamente:

Código: Selecionar todos
dd if=/dev/sdb1 of=/dev/sdb2


Sendo /dev/sdb1 a unidade que contem o pen drive original. Se duvida que funcione, pode pegar um Pen Drivezinho e experimentar a vontade, eu espero :) Muito bem, agora imagine que ao invés de especificar dispositivos relativos a unidades de USB, tivéssemos 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 de um HD. Retornando ao cenário inicial, você tem uma maquina na qual acabou de instalar Linux, e quer jogar a imagem daquela instalação para outro HD igual ao da primeira maquina. Você vai precisar colocar os dois HDs em uma maquina de onde você já possa dar boot num Linux que não seja o do HD recém instalado, pois nenhum dos sistemas de arquivos no HD a ser lido pode estar montado. Então o que você pode fazer e instalar esses hds em /dev/hdc (ide2 master) e /dev/hdd (ide2 slave) numa maquina qualquer que já tenha um HD com Linux bootável (ou então use um desses live CD para dar boot) e execute:

Código: Selecionar todos
dd if=/dev/hdc of=/dev/hdd


E uma copia exata do HD no ide2 master será feita no ide2 slave. Aqui cabe um aviso importante sobre Linux em geral: se você instalou o Linux com o HD no primário master, e muda-lo para primário slave ou secundário master, o sistema não vai dar boot. E ,obviamente, uma copia desses sistema também não. Ou seja, quando for instalar esses hds numa maquina, certifique-se de que estão no mesmo ide e com a mesma configuração (master ou slave) com que aquele Linux foi instalado. Agora, a boa noticia e que a principio não importa o SO que você tem no HD original. O dd não faz discriminação :) Vai copiar bit a bit o que estiver no primeiro HD para o segundo. Legal né?

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 lógica, se você quer colocar um sistema de arquivos dentro de um dispositivo, este tem que ter espaço para tanto. Ou seja, sempre copie do HD menor para o HD maior, nunca o contrario. No mais, você pode utilizar o procedimento que foi feito ate agora, que a única consequência e que sobrara espaço não particionado ao final do HD de destino. O qual você sempre pode, posteriormente, particionar e especificar um ponto de montagem para ele. Uma outra situação e que você pode desejar querer mover aquele Linux para um outro HD com outro esquema de particionamento. Aqui entra de novo aquela característica do Linux: se você especificou que o raiz vai ficar, por exemplo, em /dev/hda3 durante a instalação no HD original, no novo HD este também vai ter que estar em /dev/hda3. Se especificou que o /boot tem que ficar em /dev/hda2, também tem que ficar em /dev/hda2 no novo HD. Mas a boa noticia e que nada impede essas partições de estarem alguns blocos mais a frente ou mais para trás, o que não pode e haver mais partições antes das partições a serem copiadas em relação ao HD original. Isto posto, nada impede que você faca algo como:

dd if=/dev/hdc2 of=/dev/hdd2 (admitindo que os hds estão no ide2 master e slave respectivamente)

E repetindo o comando para quantas partições formarem seu sistema, não esquecendo a de swap claro. De novo chamando a atenção, note que foi copiado hdd2 para hdd2, ou seja, segunda partição para segunda partição. Mas não há impedimento que no primeiro HD a primeira partição tenha 160GB enquanto que no novo HD a primeira partição tenha 500G, fazendo com que a partição hdd2 fique bem adiante.

Note que, neste procedimento, você não copiou o boot loader para o segundo HD, ou seja, ele não vai dar boot logo de cara. Você vai ter que instala-lo manualmente. Se for o lilo, e se você tiver o arquivo de configuração do boot loader a ser instalado no novo HD no seu diretório atual do Linux que esta usando para executar a copia, você pode fazer algo como:

lilo -C arquivo_de_configuração -b /dev/hdd

O arquivo de configuração pode bem ser o /etc/lilo.conf copiado a partir do HD original, que você montou num ponto qualquer antes de processar a copia, SO para pegar esse arquivo, e logo depois desmontou. Não e meu objetivo entrar em detalhes do comando Mountain aqui, a não ser uma pequena dica mais a frente. Se você não tem familiaridade com esse comando, recomenda-se um pouco de estudo em cima dele e também sobre como o Linux trata sistemas de arquivos antes de tentar algo deste material.

Uma ultima dica: eventualmente você pode ter problemas por consequência do lilo no Linux em que você executou a copia ser uma versão diferente daquele usado pelo Linux que você esta copiando. Pior, você pode ter usado para boot um Linux que SO usa grub (ou seja, você tentou o comando lilo e recebeu a clássica mensagem de "command not found"). Não se desespere, você pode montar o HD original num ponto de montagem qualquer, tal como no comando:

Código: Selecionar todos
mount -t ext4 /dev/hdc1 /mnt/linuxorigem


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

Código: Selecionar todos
chroot /mnt/linuxorigem


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

Código: Selecionar todos
/sbin/lilo -b /dev/hdd


Depois e SO dar exit para sair da "gaiola" onde se meteu :)
Possivelmente também poderia ter funcionado se tivesse feito algo como:

Código: Selecionar todos
/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 são diferentes daquelas que o lilo do HD origem espera encontrar para sua execução. Agora, se quer realmente se garantir contra sustos e não ter que fazer essas acrobacias, use como boot um Linux idêntico aquele instalado no HD origem, e o primeiro exemplo de uso do lilo não te dará problemas. Note que esta preocupação existe apenas para gerar copias bootáveis de hds onde você copiou partições em separado. Copiando hds inteiros, como no primeiro exemplo, faz com que passe a não importar nem o SO ou SOs que estão ali. Você também não precisara se preocupar se a partição que copiou contem apenas dados, e não um SO que precisa dar boot. Por fim, e óbvio que se a maquina para a qual o HD recém escrito com o dd tiver componentes de hardware diferentes daquela onde o Linux do HD original foi instalado, você terá que reconfigurar vídeo, som, rede, e tantos quantos forem os componentes de hardware que diferem.

Falando em outros SOs, não dá problema mesmo?

Infelizmente eu não tenho como ter testado com todos os SOs que existem pelo globo (e ainda bem que hoje temos tantas opções, não? :) ). Mas vamos aos casos que já testei:

HD SO com Linux: normal, já vale tudo o que falei ate aqui sem por nem tirar nada.

HDs iguais, no original tem Linux e Windows: também sem problemas se feito como na primeira sessão deste texto.

HDS diferentes, no original tem Linux e Windows: atenção especial apenas para a partição Windows. Apesar de que isto e uma matéria sobre Linux, não me custa dar um conselho: execute o scandisk e o defrag antes de tentar a operação. Se o Windows e recém instalado, você ate pode pular esses passos, mas eu tive uma experiência recente com um Windows 7 já em uso há algum tempo, em que ele travava no HD para o qual foi copiado logo após o boot. Executar aquelas duas aplicações antes de fazer a copia resolveu meu problema. A propósito, SO testei isso ate hoje com Windows da linha XP /vista /7 usando NTFS. Nunca tentei com sistemas de arquivos fat, fat32 para ver se funciona.

Da para guardar a imagem num arquivo?

Lembra do exemplo da copia do Pen Drive? Igual em tudo, mas você vai ter que ter espaço para guardar o arquivo criado, que vai ter o mesmo tamanho que a partição/dispositivo que você copiou. Isso mesmo que parte do sistema de arquivos sendo copiado esteja vazio. Ou seja, se você esta copiando uma partição de 160GB, mas ali dentro a soma dos arquivos guardados tem SO 100MB, ainda assim o arquivo que você vai gerar vai ter 160GB. O dd não entende sistemas de arquivos, tudo que ele entende são fluxos de bytes, assim ele lê a partição inteira, ate onde não tem gravado nada, e guarda. Isto posto, e SO executar:

Código: Selecionar todos
dd if=/dev/hdb4 of=particao4.img


E será criado o arquivo particao4.img, que conterá uma imagem exata do sistema de arquivos naquela partição. Agora, o dispositivo conectado em /dev/hdb pode ate ser desconectado e, se mais tarde quiser restaurar aquela partição em outro HD, e SO fazer:

Código: Selecionar todos
dd if=particao4.img of=/dev/hdb4


O mesmo vale para copias de hds inteiros. O problema de disponibilidade de espaço em disco pode ser diminuído com o auxilio do gzip:

Código: Selecionar todos
dd if=/dev/hdb | gzip > imagem_do_hd.img.gz


Esse comando gera a imagem do HD, mas que agora estará compactada pelo gzip. Obviamente para utiliza-la você terá que descompacta-la:

Código: Selecionar todos
gzip -d -c imagem_do_hd.img.gz | dd of=/dev/hdb


A flag -c faz o gzip mandar os dados descompactados para a saída padrão ao invés de para um arquivo sem a extensão .gz, como faria normalmente. Não esqueça que o dd, como dito no inicio do artigo, copia normalmente a partir da entrada padrão. Por isso aqui não se especificou o parâmetro if= . O preço que se paga neste ultimo exemplo, claro, e um enorme acréscimo de tempo para a realização da compactação e descompactação. Uma outra aplicação interessante a que isto nos leva, embora não esteja relacionada a copia de hds, e gerar uma imagem ISO a partir de um DVD já gravado, para depois ser usada na gravação de um novo DVD. Para fazer isso execute como no exemplo:

Código: Selecionar todos
dd if=/dev/cdrom of=Manjaro_cd1.iso


Depois, e SO passar o arquivo gerado como argumento do cdrecord ou do seu programa de gravação favorito. E uma ultima dica interessante: Sabia que e possível montar esses arquivos que são copias de sistemas de arquivos, como se fossem um dispositivo? Digamos que, no caso anterior, você queira dar uma olhada nos arquivos que o DVD continha, mas o DVD criou pernas e sumiu e você SO ficou com o arquivo de imagem :) Não e preciso gravar o DVD para depois monta-lo, pode-se perfeitamente montar o próprio arquivo de imagem como em:

Código: Selecionar todos
mount -t iso9660 Manjaro_cd1.iso /mnt/dvdimg -o loop


O segredo esta justamente em passar o parâmetro -o loop no final do comando mount. Se não funcionar, verifique se o seu kernel foi compilado com suporte a loopback device. Um jeito de checar isso e testar se e possível carregar o modulo loop (embora esse tipo de suporte pode ter sido compilado embutido no kernel, mas se assim fosse você não teria problemas e nem teria que fazer esse teste). Por fim, para encerrar esse pequeno desvio (e praticamente o artigo), note que você não esta limitado a fazer isso so com imagens geradas a partir de DVDs. Pode ser feito com qualquer imagem desde que você especifique o sistema de arquivos correto com -t. Obviamente, essas imagens são montadas sempre como somente leitura. Nao da para modificar o conteúdo de um arquivo de imagem usando essa técnica. Para encerrar, note que as técnicas apresentadas aqui resolvem situações 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 você tirou isto?

Acontece que instalo Linux desde 2007 dos CDs bootáveis, e nessa época eu usava Slackware traziam era uma imagem dos disquetes de boot, e um aplicativo para shell chamado rawwrite (ou era rawrite?) que exatamente escrevia a imagem num disquete. Me perguntando na época como poderia proceder para gravar essas imagens em um disquete se meu SO já fosse Linux, pesquisei a documentação de texto dentro do CD e la estava a orientação de como usar o dd para isso. A partir dai, foi so experimentar e expandir o conceito principal se pode usar isso infinitamente ah algum tempo eu trabalhava em uma escola de informática e la tinha 90 computadores isso mesmo 90 e eu dava aula de Hardware e também era técnico de la então eu fazia isso os micros tinham o mesmo hardware então pra mim era fácil carregava um DVD com a imagem da ISO e depois usava um Livecd e era só mandar bala hehehe...

Espero que vocês gostem do artigo e que seja útil pra vocês :)

Aqui eu vou deixar como usar o comando mount e como identificar o unidade de disco

/dev/sda1 e sda4 são meus HDs

/dev/sr0 é meu leitor de DVD

/dev/sdc1 é meu Pen Drive

Vocês podem ver a imagem que eu fiz e ditei no GIMP

Imagem
Editado pela última vez por Holmes em 27 Mar 2013, 23:18, em um total de 2 vezes.
Razão: inserir bbcodes nos comandos inseridos no texto.
[b][i][u]"Em casa de ferreiro, o espeto é de pau." diz -> Ditado popular...
"O Bill Gates deve usar Linux." diz -> Programador



Imagem

Esta mensagem de josh foi agradecido - 2
Holmes (27 Mar 2013, 23:02) • linus-torvalds (20 Abr 2013, 18:24)
Avatar do usuário
josh
Aprendiz

 
Mensagens: 69
Artigos: 2
Registro: 20 Mar 2013, 23:08
Localização: São Paulo - Francisco Morato
Agradeceu: 5 vez(es)
Agradecido: 14 vez(es)
Distro utilizada: Manjaro
Versão: 0.8.4
Ambiente: OpenBox

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor Holmes » 27 Mar 2013, 23:05  •  MS 2

que dicona... parabéns pela dica e acho que vai ser de grande valia para quem precisar de copiar a imagem de um HD para outro usando o Linux.

vlw fwi, Holmes :)
Imagem

Meu Blog Kibojoe I Manjaro I JWM I Outras Coisas...

Visitem e colaborem com nosso Knowledge Base
Leia as Regras Gerais e pesquise antes de postar
Se a sua dúvida foi respondida marque Resolvido em seu tópico com o botão V na cor verde
Avatar do usuário
Holmes
Fundador

Mantenedor Kibojoe Linux
Mantenedor Kibojoe Linux
 
Mensagens: 5472
Artigos: 56
Registro: 30 Set 2012, 21:00
Localização: Brasil
Agradeceu: 173 vez(es)
Agradecido: 812 vez(es)
Distro utilizada: Kibojoe Linux
Versão: 18.02
Ambiente: JWM
Repositório: Stable
Habilidade: Intermediate

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor josh » 28 Mar 2013, 00:27  •  MS 3

Nossa é verdade o meu Objetivo era fazer um poster no fim de ajudar
no Objetivo de fazer as pessoas ganharem tempo
exemplo...
se você já instalou o manjaro na sua maquina e daqui um tempo precisar reinstalar o sistema de novo
você não precisara com esse meu poster por que era só criar um imagem ISO quando você já tivesse instalado todos os pacotes
que você usa e fazer uma imagem ISO da partição ou do disco e deixar guardado em algum lugar e depois só restaurar ela assim você não precisaria formatar a maquina e economizaria muito tempo de instalar pacote por pacote :)
isso ajuda muito na escola que eu trabalhava por que era só passar a ISO de novo já que os Hardwares eram tudo o mesmo e os programas também já estava na ISO espero que vocês possam fazer um grande aproveito desse artigo"
:)
agora Holmes como você colocou bbcodes nos comandos inseridos no texto?
eu estava tentando mais não conseguia kkk:s
Editado pela última vez por josh em 28 Mar 2013, 00:29, em um total de 1 vez.
Razão: erros de português
[b][i][u]"Em casa de ferreiro, o espeto é de pau." diz -> Ditado popular...
"O Bill Gates deve usar Linux." diz -> Programador



Imagem
Avatar do usuário
josh
Aprendiz

 
Mensagens: 69
Artigos: 2
Registro: 20 Mar 2013, 23:08
Localização: São Paulo - Francisco Morato
Agradeceu: 5 vez(es)
Agradecido: 14 vez(es)
Distro utilizada: Manjaro
Versão: 0.8.4
Ambiente: OpenBox

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor Holmes » 28 Mar 2013, 08:49  •  MS 4

oi josh, todos os bbcodes estão no editor de mensagem. veja abaixo

Imagem

o bbcode número 1 é para adicionar os comandos, já o número 2 é para nomes de arquivos, pastas, endereços de pastas, para um comando que será inserido no meio de uma frase, etc. para saber o que cada bbcode significa é só apontar o curso sobre ele e você terá o significado. qualquer dúvida pergunte!

vlw fwi, Holmes :)
Imagem

Meu Blog Kibojoe I Manjaro I JWM I Outras Coisas...

Visitem e colaborem com nosso Knowledge Base
Leia as Regras Gerais e pesquise antes de postar
Se a sua dúvida foi respondida marque Resolvido em seu tópico com o botão V na cor verde
Avatar do usuário
Holmes
Fundador

Mantenedor Kibojoe Linux
Mantenedor Kibojoe Linux
 
Mensagens: 5472
Artigos: 56
Registro: 30 Set 2012, 21:00
Localização: Brasil
Agradeceu: 173 vez(es)
Agradecido: 812 vez(es)
Distro utilizada: Kibojoe Linux
Versão: 18.02
Ambiente: JWM
Repositório: Stable
Habilidade: Intermediate

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor josh » 28 Mar 2013, 14:36  •  MS 5

valeu :)
[b][i][u]"Em casa de ferreiro, o espeto é de pau." diz -> Ditado popular...
"O Bill Gates deve usar Linux." diz -> Programador



Imagem
Avatar do usuário
josh
Aprendiz

 
Mensagens: 69
Artigos: 2
Registro: 20 Mar 2013, 23:08
Localização: São Paulo - Francisco Morato
Agradeceu: 5 vez(es)
Agradecido: 14 vez(es)
Distro utilizada: Manjaro
Versão: 0.8.4
Ambiente: OpenBox

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor matt » 28 Mar 2013, 15:10  •  MS 6

Dica muito boa amigo, vou salvar os passos em um arquivo .txt para quando for necessário. Muito obrigado.

att,
matt
Avatar do usuário
matt
Membro

 
Mensagens: 150
Registro: 25 Mar 2013, 10:29
Agradeceu: 34 vez(es)
Agradecido: 6 vez(es)
Distro utilizada: Manjaro Linux
Versão: 0.8.4 > 0.8.5
Ambiente: KDE

Como copiar a imagem de um HD para outro usando o Linux

Mensagempor linus-torvalds » 20 Abr 2013, 18:23  •  MS 7

muito bom não testei mas espero testar
Avatar do usuário
linus-torvalds
Novato

 
Mensagens: 6
Registro: 20 Abr 2013, 18:03
Agradeceu: 4 vez(es)
Agradecido: 0 vez
Distro utilizada: manjaro
Versão: 0.8.5
Ambiente: openbox


Tópicos Semelhantes Estatísticas Última mensagem

Manjaro lento e travando ao copiar arquivos grandes.

por brunoalvesgb » 06 Abr 2020, 12:42

Respostas: 1

Exibições: 343

07 Abr 2020, 18:49

por overlock Ver última mensagem

Problemas na hora de compilar usando o Codeblocks

por Kauan » 31 Ago 2020, 11:44

Respostas: 5

Exibições: 312

01 Set 2020, 10:47

por tioguda Ver última mensagem

Autenticação Falhou pamac Arch Linux

por trikoloko » 21 Abr 2020, 05:49

Respostas: 3

Exibições: 374

21 Abr 2020, 12:41

por tioguda Ver última mensagem

Manjaro Linux não reconhece iphone Apple.

por Hércules R. Souza » 17 Mar 2020, 15:02

Respostas: 2

Exibições: 475

18 Mar 2020, 13:05

por Hércules R. Souza Ver última mensagem

Voltar para Dicas, Truques e Astúcias



Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes

^ Voltar ao Topo