Mostrando postagens com marcador rsync. Mostrar todas as postagens
Mostrando postagens com marcador rsync. Mostrar todas as postagens

sexta-feira, 16 de novembro de 2007

Ainda sobre rsync (agora com Ubuntu)

Em um post anterior, falei sobre haverem restrições do uso do rsync no Ubuntu.

Resolvi fazer um post espefíco sobre o assunto, para ajudar quem como eu passou por problemas assim.

As restrições resumem-se basicamente a três fatores principalmente:

1) Filesystems temporários
2) Uso de UUIDs ao invés de devices
3) Interfaces persistentes (vínculo entre mac address da placa e nome da interface)

Normalmente, no caso de uma sincronia de servidores temos 2 maneiras distintas de fazê-lo:

A) Podemos sincronizar o servidor em cima de um HD vazio, mas já particionado.
B) Podemos sincronizar o servidor em cima de um base system previamente instalado.

Maneira A
A maneira A é a mais "complicada" delas pois é preciso ter cuidado com os 3 fatores listados acima. Vamos por partes:

Fator 1:
O fator 1 é o que necessita de maior cuidado pois está ligado a forma de boot do Ubuntu (o fator 2 também tem relação com o boot, mas conseguimos bootar o servidor usando um init=/bin/bash, por exemplo). Para que o Ubuntu possa bootar é necessário que exista no filesystem root ( /) um diretório /var/run e um diretório /var/lock.
Essas pastas são necessárias antes que o /var seja montado (se ele for uma partição separada). Caso esses diretórios não existam o Ubuntu não irá bootar.

Solução: Ao criar a partição / (que normalmente é uma partição à parte, pois o /var normalmente é outra partição), crie os diretórios /var/run e /var/lock para garantir que seu Ubuntu suba.
ATENÇÃO: nunca efetuei diretamente a operação dessa maneira. Estou relatando o que é necessário para o sistema bootar, baseado em pesquisas e comentários encontrados pela rede (normalmente uso a segunda forma de sincronia para garantir o pleno funcionamento - com o base system pré instalado. Demora mais, mas é mais seguro :-) ). Se você optar sincronizar direto no HD vazio criando os diretórios, depois relate sua experiência, por favor.

Fator 2: O Ubuntu, ao invés de trabalhar com devices no /etc/fstab e no /boot/grub/menu.lst, trabalha já há algumas versões com UUIDs (não vou entrar no mérito de vantagens e desvantagens, muito menos dispor sobre o porque da mudança). Se esse formato não for alterado para o formato "antigo" (arquivos de dispositivos - /dev/sda1 ou /dev/hda1, por exemplo), ao tentar bootar o novo servidor, o sistema não irá subir pois não encontrará as partições.

Solução: Após sincronizar todo o servidor, antes de rebootar o mesmo, retorne seus arquivos /etc/fstab e /boot/grub/menu.lst para o formato convencional de device (no fstab, o nome do device está inclusive comentando na linha anterior). Sincronizando dessa forma, seu novo servidor não irá ter problemas no boot. Dica: no root do menu.lst coloque o device onde está o /.

Fator 3: O Ubuntu (7.10) guarda as interfaces de rede e seus respectivos nomes (nada mais do que um vínculo do mac address da placa de rede com o nome "ethX") no arquivo /etc/udev/rules.d/70-persistent-net.rules (O Debian Etch usa o arquivo /etc/udev/rules.d/z25_persistent-net.rules de forma similar). Ao trazer esse arquivo do servidor antigo o servidor novo pode por exemplo então passar a reconhecer a sua eth0 como eth1 (pois a eth0 já vai estar associada ao mac da placa do servidor antigo).

Solução: Apague o arquivo /etc/udev/rules.d/70-persistent-net.rules. Com isso ele será recriado corretamente no próximo boot. Ou ainda, não sincronize o mesmo, colocando-o na lista de exclusão do rsyncd.conf.
ATENÇÃO: do Ubuntu 6.06 ao Ubuntu 7.04 e no Debian Sarge o nome do arquivo é /etc/iftab.


Maneira B
A maneira B é mais simples, pois será necessário lidar somente com os fatores 2 e 3 já explicados acima.

Acredito que com essas dicas, os problemas de usar o rsync com o Ubuntu sejam todos solucionados.

Pelo menos até o lançamento da versão 8.04 ;-)

terça-feira, 13 de novembro de 2007

Sincronizando computadores com rsync

Às vezes é necessário sincronizar dados entre servidores ou até mesmo copiar um servidor inteiro para outro hardware. Uma aplicação fantástica para essas tarefas é o rsync.

O rsync é uma ferramenta open source que permite a transferência de arquivos de forma incremental. Além disso, ela pode também ser usada para sincronia entre micros, partições e diretórios.

Nesse post, vou supor que seja necessário sincronizar um servidor inteiro para outro. Vou também supor que o kernel do Linux não seja compilado especificamente para o hardware, ou se for o caso, que os dois hardwares sejam idênticos. Também estou supondo que o particionamento dos discos seja igual, ou que ao menos existam as mesmas partições vinculadas aos mesmos devices (os tamanhos dos particionamentos podem ser diferentes (assim como os tipos de sistemas de arquivos), mas se obviamente o seu particionamento destino for menor que o origem os dados poderão não caber).

A melhor forma de uso do rsync para esse tipo de tarefa, do meu ponto de vista, é como cliente/servidor.

Configurando o servidor (origem dos dados)
No caso de seu micro origem ser um Debian (ou Ubuntu), será necessário antes de mais nada permitir que o daemon do rsync possa ser iniciado. Para isso deve-se alterar a opção RSYNC_ENABLE de false para true no arquivo /etc/default/rsync.

Depois é preciso configurar o arquivo /etc/rsyncd.conf.

Para ficar bem genérico, pode-se deixar o mesmo da seguinte forma:

[root]
path=/
uid=0
gid=0
read only=true
exclude=/etc/network/interfaces /etc/hostname

Esse configuração lhe dá acesso a todo o sistema de arquivos, com permissão somente de escrita.
Na linha exclude você deverá setar os arquivos e/ou diretórios que não devem ser sincronizados (separe os mesmos por espaço).

Depois disso já é possível iniciar o daemon.

ATENÇÃO: não aconselho manter o daemon ativo dessa forma, por questões óbvias de segurança (que não serão tratadas nesse post). Use o mesmo e desabilite-o logo em seguida.

Sincronizando o cliente (destino)
Supondo que seu servidor de origem tenha 4 partições ( /, /usr, /var e /home ), você pode rodar 4 comandos rsync no cliente para pegar os dados partição a partição (apesar de ser possível sincronizar direto o / teríamos de separar uma série de pastas que não necessariamente precisam ser sincronizadas. Além disso a opção x garante que o somente a partição selecionada seja trazida sem invadir outros pontos de montagem temporários como /var/run, /var/lock, entre outros ):

rsync -avx --delete ip::root/ /
rsync -avx --delete ip::root/usr/ /usr/
rsync -avx --delete ip::root/var/ /var/
rsync -avx --delete ip::root/home/ /home/

Obviamente você pode adicionar outras partições se for o caso (ou remover também).

Explicando os parâmetros
A opção -a aciona o modo arquivo e é o mesmo que a opção -rlptgoD (recursivo, com cópia de symlinks, preservando permissões, preservando data e hora, preservando grupos, preservando proprietários e preservando arquivos especiais e de devices).
A opção v ativa o mode verboso.
A opção x ativa o backup do filesystem principal, sem entrar recursivamente nos demais.
A opção --delete faz com que os arquivos do destino que não existem na origem sejam apagados, para garantir que os dados sejam os mesmos nos dois lados.
O ip será o do seu servidor de origem (onde foi configurado o rsync servidor).
O root (logo após o ::) é o nome do "compartilhamento" que você setou no servidor.
Logo após o parâmetro "root" vem então o que você quer copiar (se for diretório, sempre é necessário finalizar com o /).
E por final, você deve informar o destino pra onde vão os dados (novamente, se for diretório, finalize com /).

Exemplos explicados
Ex: rsync -avx --delete ip::root/etc/ /tmp/
Irá sincronizar todo o conteúdo da pasta etc dentro da pasta tmp.

Ex: rsync -avx --delete ip::root/etc /tmp/
Irá sincronizar a pasta /etc dentro da pasta tmp (ou seja, existirá um /tmp/etc).

Considerações
Esse procedimento já foi testado com sucesso em servidores Debian até a versão 4.0 (Etch). No Ubuntu o mesmo também pode ser utilizado, mas com restrições, principalmente na sincronização do /, pois a forma de trabalho dos tmpfs do Ubuntu pode gerar problemas na hora de bootar o servidor (estamos estudando no momento uma forma de fazer isso com segurança).

Finalizando
Para finalizar acho que é importante lembrar que essa é apenas uma das possibilidades de uso do rsync, e que a ferramenta merece ser mais explorada pois pode ser usada no dia a dia de qualquer usuário, seja ele um administrador de sistema ou um usuário final.

Para mais informações consulte aqui e aqui.