em Sem categoria

Duplicando/transferindo instalações do Linux de maneira simples

Este artigo foi retirado do site Dicas-L da Unicamp.

Colaboração: Luís Fernando C. Talora

Mais de uma vez, me deparei com situações nas quais era preciso duplicar uma
instalação já existente de uma máquina com Linux, seja para troca de hardware,
seja para substituição do disco rígido em uso por uma maior, seja para testar
atualizações sem comprometer um servidor de produção, ou simplesmente para
economizar o tempo de instalação, configuração e atualização de uma máquina.

Tentei fazer isso de várias maneiras, entre elas usando o tar (funciona,
mas nunca me lembro da sintaxe), dd (requer discos rígido literalmente
idênticos e, mesmo assim, nem sempre funciona), entre outros métodos.

A solução que melhor me atendeu foi, provavelmente, a mais simples de
todas: usar o comando cp. Utilizando o cp combinado com os parâmetros
a e v, obtemos uma cópia fiel de um sistema de arquivos ext2 ou ext3
(provavelmente funciona com reiserfs também). É um método um pouco “braçal”,
já que é preciso prepar o particionamento de disco e utilizar uma outra
distro live-on-cd para executar a cópia, mas utiliza um comando simples,
disponível em qualquer distro e é de fácil compreensão (exceto, talvez,
pelos passos que precedem a cópia, que podem ser simplificados com o uso de
ferramentas gráficas de particionamento, como o qtparted). Seguem os passos
para se “clonar” uma instalação do Linux seguindo esse método.

1. Coloque, na mesma máquina, o disco rígido contendo a instalação a ser
“clonada” (vou chamá-lo de HD1 daqui por diante) e o disco rígido que
receberá uma cópia da mesma (chamarei-o de HD2 daqui em diante). Neste
exemplo, manteremos o mesmo esquema de particionamento do HD1 no HD2. Vamos
também supor que HD1 foi instalado como primário na primeira controladora IDE
(/dev/hda) e o HD2 como slave na mesma controladora (/dev/hdb).

Em nosso cenário, o HD1, a ser clonado, está organizado da seguinte maneira:

HD1 (8Gb) Partição Tipo Tam. Aprox. Ponto de Montagem
/dev/hda1 ext3 100Mb /boot
/dev/hda1 swap 1Gb (nenhum)
/dev/hda3 ext3 7Gb /

Da mesma forma, o HD2, de 36 Gb, deverá ficar assim:

HD1 (36Gb) Partição Tipo Tam. Aprox. Ponto de Montagem
/dev/hdb1 ext3 100Mb /boot
/dev/hdb1 swap 1Gb (nenhum)
/dev/hdb3 ext3 34Gb /

2. Reinicialize o microcomputador utilizando uma distribuição live-on-CD do
Linux. Eu costumo usar o Recue CD do Fedora (que é bem leve), mas podem ser
usados o Kurumin, o Knoppix ou outra distro de sua preferência. Uma vez no
prompt, precisaremos verificar como o HD1 foi particionado.

# fdisk -l /dev/hda

Disk /dev/hda: 8455 MB, 8455200768 bytes
255 heads, 63 sectors/track, 1027 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 300 2305327+ 82 Linux swap / Solaris
/dev/hda3 301 1027 10498414 83 Linux

Se o HD2 contiver dados, utilize o comando fdisk /dev/hdb e a opção d
quantas vezes forem necessárias para deixá-lo vazio. Salve o particionamento
com a opção w. A tabela de particionamento do HD2 deverá se parecer com
o exibido abaixo (ou seja, vazia):

# fdisk -l /dev/hdb

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

3. Vamos criar o mesmo esquema de particionamento no novo disco. Digite:

# fdisk /dev/hdb (cuidado para não selecionar do disco errado!!!)

Tecle: “n” (para criar uma nova partição),
“p” (para primária),
“1” (número da partição) e
“1” (cilindro inicial)
“+xxxM” (onde “xxx” é o tamanho, em Mbytes. Ex.: +100M para 100 Mbytes)

Obs: 100Mb é mais que suficiente para nosso exemplo, onde a partição 1 (/dev/hda1) é a /boot.

Segunda partição: Está será nossa partição de swap (normalmente, utiliza-se
o dobro da quantidade de memória RAM).

Tecle n, p 2, (para aceitar a sugestão do fdisk e usar o próximo
cilindro livre) Depois, digite +xxxM (onde xxx é o tamanho em Mbytes).

Terceira partição: n, p, 3, , (ocuparemos o restante
do disco com a nova partição – /)

Teclando p você verá o novo esquema de particionamentedo:

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 13 104391 83 Linux
/dev/hdb2 14 138 1004062+ 83 Linux
/dev/hdb3 139 4427 34451392+ 83 Linux

Note que a partição /dev/hdb2 aparece como Linux, mas precisamos que ela mude para swap.

Tecle t para efetuar essa alteração, 2 (partição 2) e 82 (que é o
código para partição de swap).

Digite p novamente e você deverá ver o seguinte:

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
/dev/sdb2 14 138 1004062+ 82 Linux swap / Solaris
/dev/sdb3 139 4427 34451392+ 83 Linux

Tudo OK, tecle w para salvar. Se notou algo errado, a opção q sai sem salvar as alterações.

4. Vamos montar as partições de origem e destino para começarmos a cópia. Vamos
criar uma estrutura HD1 e outra HD2 na raiz do sistema de arquivos “virtual”
de nossa distribuição live-on-cd (note que não copiaremos a partição de swap,
já que ela é utilizada apenas quando o sistema requer memória RAM extra):

Criando pontos de montagem:

# mkdir -p /hd1/particao1
# mkdir /hd1/particao3
# mkdir -p /hd2/particao1
# mkdir /hd2/particao3

Montando partições:

# mount -t ext3 /dev/hda1 /hd1/particao1
# mount -t ext3 /dev/hda3 /hd1/particao3
# mount -t ext3 /dev/hdb1 /hd2/particao1
# mount -t ext3 /dev/hdb3 /hd2/particao3

5. Tudo isso para, FINALMENTE, chegarmos ao que interessa: a cópia!

# cp -av /hd1/particao1/* /hd2/particao1
# cp -av /hd1/particao3/* /hd2/particao3

6. (obrigatório apenas para Fedora) Concluída a cópia, use o comando e2label
para verificar os labels (nomes) das partições e os anote (se houver):

# e2label /dev/hda1 (resultado: /boot)
# e2label /dev/hda3 (resultado: /)

Vamos colocar os mesmos nomes para as partições do HD2

# e2label /dev/hdb1 /boot
# e2label /dev/hdb3 /

7. (Recomendação para o Fedora) É certo que haverá problemas acessando a
partição swap pelo label, que é o padrão no Fedora (já que o label para
partições swap é sempre um conjunto ilegível de caracteres – algo como
IÏÌ+D²ùIÏÌIi²ù). Isso é facilmente solucionável editando-se o arquivo
/etc/fstab do HD2:

# vi /hd2/particao3/etc/fstab

Altere a linha semelhante à abaixo:

LABEL=IÏÌ+D²ùIÏÌIi²ù swap swap defaults 0 0

Para

/dev/hda2 swap swap defaults 0 0

Obs.: Lembre-se: a linha acima começa com /dev/hda2, e não com /dev/hdb2

8. Desmonte as partições, por segurança:

# umount /hd1/particao1
# umount /hd1/particao3
# umount /hd2/particao1
# umount /hd2/particao3

9. É preciso fazer o gerenciador de boot funcionar. Tentei vários métodos para isso, mas o menos problemático me pareceu o seguinte:

10. Desligue a máquina, desconecte o HD1 e coloque o HD2 em seu lugar (em
nosso exemplo, ele deixará de ser slave e passará a ser master na IDE0);

11. Inicialize a máquina com a distro live-on-cd novamente. Criaremos uma
estrutura para montarmos os sistemas de arquivos como ele ficaria na
prática. Isso é preciso para que o gerenciador de boot seja instalado
adequadamente.

# mkdir /hd_copiado (ponto de montagem para a partição 3)
# mkdir /hd_copiado/boot (ponto de montagem para a partição 1)

12. Montando… (Note que, agora, o HD2 passou a ser o /dev/hda, já mudamos ele de lugar)

# mkdir -t ext3 /dev/hda3 /hd_copiado
(“/“ é sempre montado antes)
# mkdir -t ext3 /dev/hda1 /hd_copiado/boot

13. Daremos um chroot para acessar essa instalação como se a pasta /hd_copiado fosse a raiz:

# chroot /hd_copiado

14. Por último, reinstalaremos o gerenciador de boot:

Se você usa o GRUB, digite:

# grub-install /dev/hda

Se você usa o LILO, digite:

# lilo

E pronto! Desmonte as partições, reinicialize a máquina, remova o CD do drive e
a inicilização do sistema deverá ocorrer normalmente, utilizando o HD-Clone.