Clonar FreeBSD pela rede e sem downtime

Para quem precisa clonar um FreeBSD em produção e sem downtime para, por exemplo, criar uma redundância com carp, este script é uma "mão na roda".

[ Hits: 11.018 ]

Por: Murilo Moreira em 15/07/2010


Introdução



Vamos tomar como exemplo o seguinte cenário: dentre os servidores da empresa XYZ existe um FreeBSD (firewall, Squid, VPN, MTA, Whatever...) que precisa ser migrado para outro hardware por qualquer motivo, porém, se possível, sem downtime.

Para iniciar você precisa preparar a máquina "destino". Ou seja: alocar, energizar, preparar o raid (caso seja via hardware)... Deixar ela pronta para executar o procedimento.

Você também precisa ter em mãos o esquema de particionamento de disco e configurações de rede da máquina de "origem".

Será necessário para tal procedimento uma mídia com um sistema BSD que rode LIVE. Já utilizei o Freesbie e um DVD do FreeBSD por exemplo.

O próximo passo então será bootar a máquina "destino" com o BSD live e botar a mão na massa...

Preparando o clone

Após subir o sistema Live na máquina "destino", ou seja, a que será o clone do sistema em produção, configure a rede deixando o sistema apto a alcançar a "origem" do clone.

Com os dados que você colheu, agora é hora de preparar o disco da máquina:

# dd if=/dev/zero of=/dev/da0 bs=512 count=79

Isto exclui as informações de particionamento e etc do disco que será utilizado.

# fdisk - v - B - I /dev/da0

Com este comando você torna o disco bootável e cria um slice ocupando todo o espaço.

# bsdlabel -w -B /dev/da0s1

Criando uma tabela de partições.

# bsdlabel -e /dev/da0s1

Aqui você irá abrir o editor de partições do slice 1 no disco da0.

Uma rápida explicação sobre o bsdlabel:

Será apresentado a você uma tela como esta:

#       size   offset    fstype   [fsize bsize bps/cpg]
a:   6291456       16    unused     0  	   0
c: 314572800        0    unused     0      0   # "raw" part, don't edit

Cada letra aqui é uma partição. A "c" é utilizada pelo sistema e você não deve fazer qualquer alteração. A partição "a" está ocupando o total de espaço do disco. Podemos começar a editar.

Supondo que a máquina a ser clonada possui 3 partições: /var, /, /usr e 1024M de swap, então você precisará deixar o esquema de particionamento como mostrado abaixo:

#      size   offset    fstype   [fsize bsize bps/cpg]
a:  1G        16        4.2BSD     *      *
b:  1G        *         swap       *      *
c:  314572800 0         unused     0      0   # "raw" part, don't edit
d:  5G        *         4.2BSD     *      *
e:  *         *         4.2BSD     *      *

Não se preocupe em alinhar as informações como numa tabela, depois que você salvar e sair (como no Vi), o próprio "bsdlabel" acerta as informações. Ao retornar você verá tudo formatado.

Então neste caso ficou assim: a partição "a" para o / com 1G de espaço, a partição "b" como swap, a "d" para o /var com 5G e a partição identificada como "e" ficou para o /usr. Notem que à frente da partição "e" existe um "*". Isso porque, como deixamos ela por último e esta partição irá usar todo o espaço restante do disco, não precisamos especificar todo o tamanho.

Para visualizar as partições criadas você pode utilizar o seguinte comando:

# ls -l /dev/da0s1*

Vamos então formatar e montar as partições recém-criadas:

# newfs -U /dev/da0s1a
# newfs -U /dev/da0s1d
# newfs -U /dev/da0s1e

# mount /dev/da0s1a /media
# mkdir /media/var
# mkdir /media/usr
# mount /dev/da0s1d /media/var
# mount /dev/da0s1e /media/usr


Feito isso, podemos iniciar a cópia do sistema.

Dump

Vá até o diretório que será o seu "/" e inicie o dump:

# cd /media
# ssh root@maquina_de_origem "dump -0af - /" | restore -rf -


Com isso você estará copiando todo o "/" da máquina a ser clonada.

Terminado o processo de dump vamos para a próxima partição.

# cd /media/var # ssh root@maquina_de_origem "dump -0af - /var" | restore -rf -

Finalizando o processo, vamos iniciar o dump do /usr.

# cd /media/usr
# ssh root@maquina_de_origem "dump -0af - /usr" | restore -rf -


Pronto! Você clonou o sistema para um novo hardware. Agora muito cuidado! Se você simplesmente rebootar a máquina terá dois hardwares com mesmo nome e ip na rede.

Você já pode iniciar o processo de configuração do clone, como hostname, ip, carp etc. Lembrando que a raiz do sistema clonado é o /media.

Outro ponto importante: vamos supor que a máquina de "origem" possui um RAID feito com o gmirror e na máquina "destino" você simplesmente vai utilizar um RAID por hardware. Não esqueça de editar /media/etc/fstab e tirar as informações do gmirror apontando para as partições corretas.

Para finalizar:

# reboot

Finalizando

Não cuidei de explicar nos mínimos detalhes de cada comando, nem em utilizar números mais realistas, por exemplo, o tamanho das partições. Basta apenas que você substitua os valores de acordo a sua realidade.

No caso de dúvidas, entre em contato.

Até a próxima.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Exibindo um splash durante o boot com Splashy

Invadiram o kernel.org?!

Um olhar sobre as nuvens

RSS com o Superkaramba

LPIC-1 - Guia de Estudos

  
Comentários
[1] Comentário enviado por irado em 19/07/2010 - 10:18h

poww mano, MUITO bom êste artigo seu, vai facilitar a vida de muita gente :)

parabéns.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts