Clonagem de HD’s e backup de MBR

Quem nunca se deparou com uma ocasião onde se faz necessário a instalação de dois, três ou mais computadores com hardware igual e pensou, poxa, seria bom poder criar uma cópia do pc que já foi instalado, ou, uma clonagem do hd, ou então pegar um computador com dois ou mais sistemas operacionais instalados e ter que formatar o mais egoísta deles (Windows), ao fim da formatação se deparar com o MBR com um boot apenas…

Apesar de termos várias ferramentas para encarar o problema da cópia do HD, como o Norton Ghost ou até mesmo Docks específicos para clonagem de HDs, nem sempre dispomos destes recursos em mãos, ou no caso do Norton Ghost ou outros softwares de clonagem de HDs, Estes necessitam de um terceiro computador ou um disco de boot que os tenha em seu boot, pois os HDs de origem e destino não podem estar em uso no momento do clone. Confira algumas dicas do que pode ser feito neste sentido utilizando um Live CD do Linux, tal como um Kurumin, Kalango ou outra distro qualquer.

O comando dd

O comando dd é utilizado para criar cópias analisando bit a bit os parâmetros apontados. Na teoria ele funciona igual o “cp”, ou seja, você aponta uma entrada e uma saída, porém no comando dd você estará indicando um fluxo de entrada e um fluxo de saída para ser feita a cópia bit a bit do que se foi especificado.

Exemplo:

$ cp texto1.txt texto2.txt

Isto copiaria o conteúdo do arquivo “texto1.txt” para o arquivo “texto2.txt”.

 

$ dd if=texto1.txt of=texto2.txt

Isto faria praticamente o mesmo do comando acima… A principal diferença é que você pode utilizar o dd para dispositivos de blocos (disquetes, HD’s e afins).

Clonagem de HD

Como mencionei na página anterior, pode-se utilizar o comando dd para que se faça uma cópia de dispositivos de blocos completos, ou seja, podemos utilizar o comando para fazer o clone de um HD, por exemplo.

Supondo que se tenha dois micros com a mesma configuração e um deles precisa ser formatado, imagine a dor de cabeça instalar o Linux (ou Windows), depois instalar os drivers, os aplicativos, enfim… tudo que for necessário. No mínimo seriam perdidas umas duas horas ou mais.

Com o comando dd poderíamos economizar um bom tempo. Vamos ao que interessa.

Para podermos copiar um HD inteiro:

# dd if=/dev/hda of=/dev/hdb

 

Onde:

  • if – input flow, ou seja…fluxo de entrada, é o HD de origem.
  • of – output flow, ou seja…fluxo de saída, é o HD de destino.

Puts… mas eu não quero copiar um HD inteiro, quero copiar uma partição somente. Ótimo, então vamos lá…

# dd if=/dev/hda1 of=/dev/hdb1

 

Funciona exatamente igual ao comando para copiar o HD inteiro.

  • if – fluxo de entrada (partição de origem)
  • of – fluxo de saída (partição de destino)

Quando usamos o dd só temos um pequeno inconveniente, ele copia até mesmo o tamanho do HD ou partição, ou seja, se eu tentar copiar o conteúdo de um HD de 40 GB para um de 20 GB provavelmente dará algum tipo de erro.

E se eu copiar o conteúdo de um de 20 GB para um de 40 GB, o HD de destino ficará com 20 GB, sendo necessário ou criar uma outra partição com o espaço restante ou utilizar o Gparted para alterar o tamanho da partição.

Só lembrando o seguinte, é impossível copiar o conteúdo de um local com maior capacidade para um com menor capacidade, ou seja, minha partição de origem tem 5 GB e a de destino tem 2 GB… será que cabe???

aaaaaaaaaaahhhhhhhh….mas apesar de ter 5 GB na partição….só tenho 800 MB em uso…

Pois é fazer o que né???

Continua valendo…o comando dd trabalha com fluxo de dados, ou seja, ele copia tudo… inclusive o espaço não utilizado (nem tudo é perfeito né).

Backup da MBR e da tabela de partições

Bom, uma utilidade interessante para o dd é o backup da nossa MBR.

Mas o que é MBR mesmo???
A MBR (Master Boot Record) é um lugarzinho reservado em nosso HD que é utilizado para gravar as informações do BOOT e da tabela de partições existentes no nosso HD.

Este lugarzinho fica logo no início do HD, tendo o tamanho de 512 Bytes, ele é inacessível para qualquer sistema operacional, porém…

O comando DD trabalha com fluxo de dados, o que permite a ele acessar e copiar qualquer ponto do disco rígido, tornando possível a cópia de trechos específicos do HD, onde um sistema operacional comum não teria acesso.

Bem, bem… o papo está bom, mas vamos ao que realmente interessa.

Para podermos criar o cópia ou backup da MBR o comando dd ficaria assim:

# dd if=/dev/hda of=/dev/fd0/mbr.backup bs=512 count=1

Analisando o comando:

  • if – fluxo de entrada (origem);
  • of – fluxo de saída (destino), no caso seria criado um arquivo chamado “mbr.backup” no disquete, caso se deseje podemos alterar o nome do arquivo e o local onde ele será armazenado, eu recomendo o disquete, pois ele pode ser lido mais facilmente em qualquer sistema;
  • bs=512 – é o tamanho do bloco a ser copiado, no caso 512 bytes;
  • count=1 – é a quantidade de blocos que serão copiados, no caso, será copiado um bloco de 512 bytes.

O comando dd desta forma cria o backup da MBR propriamente dita (boot) e da tabela de partições do seu hd.

Puxa vida, mas eu gostaria de mudar o esquema de particionamento do meu hd após a formatação.

Perfeito. Então vamos lá…

A tabela de partições do HD ocupa exatamente os últimos 66 bytes da MBR, sendo assim para eu criar um backup somente da área de boot basta eu alterar o tamanho do bloco no comando dd.

Ficaria assim:

# dd if=/dev/hda of=/dev/fd0/mbr.backup bs=446 count=1

 

A única diferença neste comando é que alteramos o tamanho do bloco de dados para 446, assim eu deixo de fora os 66 Bytes da tabela de partições.

Restaurando o backup

Puts… formatei e reinstalei minha partição do Windows (eca) e o infeliz removeu meu lilo.

Calma, não xinguemos tanto o coitado, o culpado maior é o fabricante dele… rsrsrs

Lembre-se: agora temos um backup da nossa MBR.

Vamos lá restaurá-lo. Disquete em mãos??? Ótimo…

Pegue também aquele seu Linux que roda direto do CD. Pode ser qualquer um, Ubuntu, Kalango, Kurumin, até mesmo o Coyote, já que não vamos utilizar interface gráfica mesmo… hehehe

Inicie o Linux pelo cd ou disquete (se for o coyote) e faça o procedimento inverso ao usado para o backup.

O comando vai ficar assim:

Com tabela de partições:

# dd if=/dev/fd0/mbr.backup of=/dev/hda bs=512 count=1

 

Sem tabela de partições:

# dd if=/dev/fd0/mbr.backup of=/dev/hda bs=446 count=1

 

dcfldd

Um pequeno inconveniente que temos no comando dd é que ele não nos exibe uma interface informando qual é o andamento da cópia, há pouco tempo, vasculhando pela net a fora encontrei uma alternativa ao DD que nos exibe o andamento da cópia, heis que surge o dcfldd, seu uso é igual ao do comando dd.

Veja o exemplo:

# dcfldd if=/dev/sda1 of=/dev/sdb1

 

Provavelmente o dcfldd não está instalado, mas para instalá-lo em distribuições Debian, basta utilizar o apt-get.

# apt-get install dcfldd

 

Caso sua distribuição não tenha o dcfldd em seus repositórios, a instalação pode ser feita através dos seguintes passos:

Baixando os fontes:

# wget -c http://downloads.sourceforge.net/project/dcfldd/dcfldd/1.3.4-1/dcfldd-1.3.4-1.tar.gz

Agora vamos descompactar:

# tar -xvzf dcfldd-1.3.4-1.tar.gz

 

Compilação:

# cd dcfldd-1.3.4-1
# ./configure
# make
# make install

 

Após a compilação podemos fazer um teste:

# dcfldd if=/dev/zero of=/dev/null bs=1k count=1MB

 

Links para as man-pages dos comandos:

https://linux.die.net/man/1/dd

https://linux.die.net/man/1/dcfldd

 

Ufa, terminei… rsrsrs

Bom espero que seja interessante para alguém. Qualquer dúvida é só deixar nos comentários.

Abraços…
Até a próxima.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETEC Lauro Gomes Analista de Sistemas Pela universidade Metodista. Impacta Certified Specialist - Linux Programador PHP desde 2007, atuando em diversos projetos de sistemas internos, migrações, desenvolvimento de API's e sites públicos tanto como freelancer quanto com contrato com empresas. Também atuante como administrador Linux, administrando dois servidores próprios com CentOS, além de prestar serviços de administração e manutenção em servidores para algumas empresas.



Clonagem de HD’s e backup de MBR

Quem nunca se deparou com uma ocasião onde se faz necessário a instalação de dois, três ou mais computadores com hardware igual e pensou, poxa, seria bom poder criar uma cópia do pc que já foi instalado, ou, uma clonagem do hd, ou então pegar um computador com dois ou mais sistemas operacionais instalados e ter que formatar o mais egoísta deles (Windows), ao fim da formatação se deparar com o MBR com um boot apenas…

Apesar de termos várias ferramentas para encarar o problema da cópia do HD, como o Norton Ghost ou até mesmo Docks específicos para clonagem de HDs, nem sempre dispomos destes recursos em mãos, ou no caso do Norton Ghost ou outros softwares de clonagem de HDs, Estes necessitam de um terceiro computador ou um disco de boot que os tenha em seu boot, pois os HDs de origem e destino não podem estar em uso no momento do clone. Confira algumas dicas do que pode ser feito neste sentido utilizando um Live CD do Linux, tal como um Kurumin, Kalango ou outra distro qualquer.

O comando dd

O comando dd é utilizado para criar cópias analisando bit a bit os parâmetros apontados. Na teoria ele funciona igual o “cp”, ou seja, você aponta uma entrada e uma saída, porém no comando dd você estará indicando um fluxo de entrada e um fluxo de saída para ser feita a cópia bit a bit do que se foi especificado.

Exemplo:

$ cp texto1.txt texto2.txt

Isto copiaria o conteúdo do arquivo “texto1.txt” para o arquivo “texto2.txt”.

 

$ dd if=texto1.txt of=texto2.txt

Isto faria praticamente o mesmo do comando acima… A principal diferença é que você pode utilizar o dd para dispositivos de blocos (disquetes, HD’s e afins).

Clonagem de HD

Como mencionei na página anterior, pode-se utilizar o comando dd para que se faça uma cópia de dispositivos de blocos completos, ou seja, podemos utilizar o comando para fazer o clone de um HD, por exemplo.

Supondo que se tenha dois micros com a mesma configuração e um deles precisa ser formatado, imagine a dor de cabeça instalar o Linux (ou Windows), depois instalar os drivers, os aplicativos, enfim… tudo que for necessário. No mínimo seriam perdidas umas duas horas ou mais.

Com o comando dd poderíamos economizar um bom tempo. Vamos ao que interessa.

Para podermos copiar um HD inteiro:

# dd if=/dev/hda of=/dev/hdb

 

Onde:

  • if – input flow, ou seja…fluxo de entrada, é o HD de origem.
  • of – output flow, ou seja…fluxo de saída, é o HD de destino.

Puts… mas eu não quero copiar um HD inteiro, quero copiar uma partição somente. Ótimo, então vamos lá…

# dd if=/dev/hda1 of=/dev/hdb1

 

Funciona exatamente igual ao comando para copiar o HD inteiro.

  • if – fluxo de entrada (partição de origem)
  • of – fluxo de saída (partição de destino)

Quando usamos o dd só temos um pequeno inconveniente, ele copia até mesmo o tamanho do HD ou partição, ou seja, se eu tentar copiar o conteúdo de um HD de 40 GB para um de 20 GB provavelmente dará algum tipo de erro.

E se eu copiar o conteúdo de um de 20 GB para um de 40 GB, o HD de destino ficará com 20 GB, sendo necessário ou criar uma outra partição com o espaço restante ou utilizar o Gparted para alterar o tamanho da partição.

Só lembrando o seguinte, é impossível copiar o conteúdo de um local com maior capacidade para um com menor capacidade, ou seja, minha partição de origem tem 5 GB e a de destino tem 2 GB… será que cabe???

aaaaaaaaaaahhhhhhhh….mas apesar de ter 5 GB na partição….só tenho 800 MB em uso…

Pois é fazer o que né???

Continua valendo…o comando dd trabalha com fluxo de dados, ou seja, ele copia tudo… inclusive o espaço não utilizado (nem tudo é perfeito né).

Backup da MBR e da tabela de partições

Bom, uma utilidade interessante para o dd é o backup da nossa MBR.

Mas o que é MBR mesmo???
A MBR (Master Boot Record) é um lugarzinho reservado em nosso HD que é utilizado para gravar as informações do BOOT e da tabela de partições existentes no nosso HD.

Este lugarzinho fica logo no início do HD, tendo o tamanho de 512 Bytes, ele é inacessível para qualquer sistema operacional, porém…

O comando DD trabalha com fluxo de dados, o que permite a ele acessar e copiar qualquer ponto do disco rígido, tornando possível a cópia de trechos específicos do HD, onde um sistema operacional comum não teria acesso.

Bem, bem… o papo está bom, mas vamos ao que realmente interessa.

Para podermos criar o cópia ou backup da MBR o comando dd ficaria assim:

# dd if=/dev/hda of=/dev/fd0/mbr.backup bs=512 count=1

Analisando o comando:

  • if – fluxo de entrada (origem);
  • of – fluxo de saída (destino), no caso seria criado um arquivo chamado “mbr.backup” no disquete, caso se deseje podemos alterar o nome do arquivo e o local onde ele será armazenado, eu recomendo o disquete, pois ele pode ser lido mais facilmente em qualquer sistema;
  • bs=512 – é o tamanho do bloco a ser copiado, no caso 512 bytes;
  • count=1 – é a quantidade de blocos que serão copiados, no caso, será copiado um bloco de 512 bytes.

O comando dd desta forma cria o backup da MBR propriamente dita (boot) e da tabela de partições do seu hd.

Puxa vida, mas eu gostaria de mudar o esquema de particionamento do meu hd após a formatação.

Perfeito. Então vamos lá…

A tabela de partições do HD ocupa exatamente os últimos 66 bytes da MBR, sendo assim para eu criar um backup somente da área de boot basta eu alterar o tamanho do bloco no comando dd.

Ficaria assim:

# dd if=/dev/hda of=/dev/fd0/mbr.backup bs=446 count=1

 

A única diferença neste comando é que alteramos o tamanho do bloco de dados para 446, assim eu deixo de fora os 66 Bytes da tabela de partições.

Restaurando o backup

Puts… formatei e reinstalei minha partição do Windows (eca) e o infeliz removeu meu lilo.

Calma, não xinguemos tanto o coitado, o culpado maior é o fabricante dele… rsrsrs

Lembre-se: agora temos um backup da nossa MBR.

Vamos lá restaurá-lo. Disquete em mãos??? Ótimo…

Pegue também aquele seu Linux que roda direto do CD. Pode ser qualquer um, Ubuntu, Kalango, Kurumin, até mesmo o Coyote, já que não vamos utilizar interface gráfica mesmo… hehehe

Inicie o Linux pelo cd ou disquete (se for o coyote) e faça o procedimento inverso ao usado para o backup.

O comando vai ficar assim:

Com tabela de partições:

# dd if=/dev/fd0/mbr.backup of=/dev/hda bs=512 count=1

 

Sem tabela de partições:

# dd if=/dev/fd0/mbr.backup of=/dev/hda bs=446 count=1

 

dcfldd

Um pequeno inconveniente que temos no comando dd é que ele não nos exibe uma interface informando qual é o andamento da cópia, há pouco tempo, vasculhando pela net a fora encontrei uma alternativa ao DD que nos exibe o andamento da cópia, heis que surge o dcfldd, seu uso é igual ao do comando dd.

Veja o exemplo:

# dcfldd if=/dev/sda1 of=/dev/sdb1

 

Provavelmente o dcfldd não está instalado, mas para instalá-lo em distribuições Debian, basta utilizar o apt-get.

# apt-get install dcfldd

 

Caso sua distribuição não tenha o dcfldd em seus repositórios, a instalação pode ser feita através dos seguintes passos:

Baixando os fontes:

# wget -c http://downloads.sourceforge.net/project/dcfldd/dcfldd/1.3.4-1/dcfldd-1.3.4-1.tar.gz

Agora vamos descompactar:

# tar -xvzf dcfldd-1.3.4-1.tar.gz

 

Compilação:

# cd dcfldd-1.3.4-1
# ./configure
# make
# make install

 

Após a compilação podemos fazer um teste:

# dcfldd if=/dev/zero of=/dev/null bs=1k count=1MB

 

Links para as man-pages dos comandos:

https://linux.die.net/man/1/dd

https://linux.die.net/man/1/dcfldd

 

Ufa, terminei… rsrsrs

Bom espero que seja interessante para alguém. Qualquer dúvida é só deixar nos comentários.

Abraços…
Até a próxima.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETEC Lauro Gomes Analista de Sistemas Pela universidade Metodista. Impacta Certified Specialist - Linux Programador PHP desde 2007, atuando em diversos projetos de sistemas internos, migrações, desenvolvimento de API's e sites públicos tanto como freelancer quanto com contrato com empresas. Também atuante como administrador Linux, administrando dois servidores próprios com CentOS, além de prestar serviços de administração e manutenção em servidores para algumas empresas.