Fazendo Backup de todas as máquinas da rede com Rsync



Bom pessoal, esse cheiro ocre e marrom que estão sentindo agora, é fruto de todo o esforço que tivemos para montar esse esqueminha chinfreiro de backup dentro da nossa empresa.

Manje aí ao lado como é que ficará essa obra de arte mambembe que insistimos em chamar de Backup!

"Funcionêia" redondo e já salvou muita gente sabida por aqui.


Objetivo: Sincronizar diariamente, ou seja todo o dia (uhauhauhahu) o diretório /home dos usuários com o diretório /diario/usuario no servidor de backup.


Vamos criar algumas convenções para que não nos percamos.

Sempre que estiver falando do que fazer do:

Servidor INTERNO, estaremos escrevendo em vermelho.
Servidor EXTERNO, estaremos escrevendo em azul. (Esse passo é opcional)
Desktop, estaremos escrevendo em verde.

Se você sofre de daltonismo, favor chamar algum eunuco para lhe auxiliar nessa nobre tarefa.

Não tenho a menor idéia de qual seria a sua distribuição, versão, língua, sei lá... nada disso importa, pois os princípios são muito simples e comuns a todas, portando, considero que você tenha o mínimo de compreensão do que seja um teclado e o Linux



---- Primeira etapa ---- DESTINO ----
1 - Instale o RSYNC, um programinha safado, que faz parte do projeto SAMBA (Dê o seu jeito, pergunte ao google)

2 - Digite rsync , dê enter e veja se ele te dá um monte de textos como versão e etc..
rsync version 2.6.9 protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
Capabilities: 64-bit files, socketpairs, hard links, symlinks,
batchfiles, inplace, IPv6, ACLs,
64-bit system inums, 64-bit internal inums.........

3 - Nós vamos criar 2 arquivos no servidor. Vamos lá !
(Arquivo 1)
Estando como ROOT, crie o arquivo /etc/rsyncd.conf

Dentro dele, inicialmente coloque o seguinte:
uid=root
gid=root
log file = /var/log/rsyncd.log

No mesmo arquivo coloque um bloco desse abaixo para cada usuário/desktop

[xupacabra]
path = /diario/xupacabra
auth users = xupacabrabkp
secrets file = /etc/rsyncd.secrets
read only = false
list = false
hosts allow = 192.168.254.4
5

Vamos entender:
[xupacabra] ------------------------> Nome da seção (arrumação)
path = /diario/xupacabra
------------------------> Onde colocar o que for dele
auth users = xupacabrabkp ------------------------> Nome do usuário
secrets file = /etc/rsyncd.secrets ------------------------> Arquivo onde está a senha dele (conferência)
read only = false ------------------------> A pasta fica com escrita
list = false ------------------------> Se alguém fizer um rsync, não consegue ver os diretórios
hosts allow = 192.168.254.45 ------------------------> Computador que pode realizar o rsync para esse usuário.


4 - Acerte as permissões do arquivo.
chmod 600 /etc/rsyncd.conf
5 - Crie o arquivo de senhas do servidor.
(Arquivo 2) Estando como ROOT, crie o arquivo /etc/rsyncd.secrets

Adicione uma linha para cada usuário:

xupacabrabkp:EscrevaAquiASenhaQVocêCriou

6 - Acerte as permissões do arquivo.
chmod 600 /etc/rsyncd.secrets
Toda vez que for requisitada uma sincronia de backup, o script do desktop, manda usuário e senha pela rede que é conferida na chegada pelo servidor, que ao bater os valores, e verificar que o host também é o autorizado, já fica sabendo onde colocar os arquivos que estiverem chegando.


7 - Acertando o problema do log gigante.
Com o tempo, o arquivo de log do servidor tende a ser imenso, então você precisa usar o logrotate pra LIMAR o safado vez em quando
chmod 600 /etc/rsyncd.secrets

Edite o arquivo /etc/logrotate.conf e insira lá no final o seguinte trecho para rotacionar seu log por até um mês:
# system-specific logs may be configured here
/var/log/rsyncd.log {
monthly
rotate 1
}
8 - Colocando o rsync como DAEMON (Dímon) e automatizando o seu start
Dois computadores se falam da mesma maneira que duas pessoas se falam. Um faz barulho com a boca e o outro escuta, tirando o fato que "surdo é cego dos ouvidos" e "cego é aquele que escuta tudo" para que os dois computadores se falem é necessário que o servidor esteja escutando... e é isso que um daemon faz, fica parado escutando uma determinada porta.

Já estou até vendo a cena... cara recem contratado no motel, chamado Alan Deamon, naõ resiste e fica andando pelos corredores com a orelha nas portas escutando o que acontece ali... só que a única porta que o deamon pode escutar é a de número 873/TCP

Vamos botar o Alan com a orelha na porta. Para isso é necessário que criemos o arquivo que será responsável pela automatização do processo de iniciar e matar o rsync. O /etc/init.d/rsync. Crie o arquivo e cole o texto abaixo dentro dele.
#!/bin/sh
#sync --daemon --config=/etc/rsyncd.conf
case "$1" in
start)
echo "Iniciando rsync..."
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
;;
stop)
echo "Interrompendo o rsync..."
killall /usr/bin/rsync
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Use: $0 {start|stop|restart}"
exit 1
;;
esac

exit 0


Com isso você agora já é capaz de iniciar e para o rsync com o comando.
service rsync start
service rsync stop
service rsync restart
ou
/etc/init.d/rsync start
/etc/init.d/rsync stop
/etc/init.d/rsync restart
Agora para finalizar, vamos colocá-lo para iniciar junto com a máquina
ln -s /etc/init.d/rsync /etc/rc3.d/S99rsync


9 - Como checar se o servidor está rodando ?
netstat -atun | grep 873
Você deve ver algo como:
tcp 0 0 0.0.0.0:873 0.0.0.0:* OUÇA
tcp 0 0 :::873 :::* OUÇA

10 - você pode fazer o servidor realizar sincronia entre seus próprios HD's ou diretórios, possuindo assim várias cópias dos backups dos seus usuários. Segue abaixo um script que faz a sincronia do diretório de backup para um outro chamado "/home/segunda"

/etc/segunda.sh
################ Início do Script de segunda-feira
#!/bin/sh
RSYNC='/usr/bin/rsync -avR --delete --numeric-ids --password-file=/etc/rsync.password'
DEST='segundabkp@192.168.254.2::segunda/'
LOG='/var/log/backup.log'
echo -e "\nInicio do Backup - `date`\n" >> $LOG 2>&1
$RSYNC /bkp0 $DEST >> $LOG 2>&1
echo -e "\nFim do Backup - `date`\n" >> $LOG 2>&1
################ Fim do Script

---- Segunda etapa ---- ORIGEM ----
1 - Instale o RSYNC, um programinha safado(deja-vu?), que faz parte do projeto SAMBA (Dê o seu jeito, pergunte ao google)

2 - Digite rsync , dê enter e veja se ele te dá um monte de textos como versão e etc..
rsync version 2.6.9 protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.

Capabilities: 64-bit files, socketpairs, hard links, symlinks,
batchfiles, inplace, IPv6, ACLs,
64-bit system inums, 64-bit internal inums.........

3 - Estando como ROOT, crie o arquivo /etc/backup.sh

4 - Cole nesse arquivo o conteúdo abaixo(letras miúdas):

#!/bin/sh
######################################################################
#:::::::::::: Altere as variáveis em cada máquina ::::::::::::::
######################################################################
#Nome do usuário no servidor de backup, não é para criar usuário no
#shell, ele tem que constar no arquivo /etc/rsyncd.secrets no servidor
#e só.
USU_REMOTO='xupacabrabkp'

#Nome do diretório a ser criado no servidor, onde ele vai socar toda
#a transferencia de arquivos para esse usuário.

DIR_REMOTO="xupacabra/"

#Diretório local a ser backupeado

DIR_LOCAL="/home/xupacabra"

######################################################################
#::::::: Altere as variáveis conforme o ambiente da rede :::::::::::::
######################################################################
#Site onde está hospedado seu arquivo de restrições
SITE="http://xupacabra.blogspot.com"

#Arquivo com restrições
ARQ_RESTRIT="arquivosforadobackup.lst"

#No coments né
DIR_TEMP="/tmp"

#Arquivo local com a senha
PASSWORD_LOCAL_FILE="/etc/rsync.password"

#Ip do servidor de backup, dã !
IP_DO_SERVIDOR_DE_BACKUP='192.168.254.2'

#Arquivo de log que será criado localmente, no desktop.
LOCAL_LOG="/var/log/backup.log"

######################################################################
########## Não altera nada daqui em diante ############
######################################################################
#Aqui ele vai descobrir onde está o rsync
RSYNCCMD=`which rsync`
wget -cr $SITE/$ARQ_RESTRIT -O $DIR_TEMP/$ARQ_RESTRIT 2> /dev/null
RSYNC="$RSYNCCMD -avR --delete-excluded --exclude-from=$DIR_TEMP/$ARQ_RESTRIT --numeric-ids --password-file=$PASSWORD_LOCAL_FILE"
DEST="$USU_REMOTO@$IP_DO_SERVIDOR_DE_BACKUP::$DIR_REMOTO"
#Guarda o dia da semana
CHOPP=`date +%u`
#Se for segunda(1), zera o log
if [ $CHOPP = '1' ]; then
:> /var/log/backup.log
fi
#Ajoelha e reza !!!!!!!!!!!!!!
echo -e "\nInicio do Backup - `date`\n" >> $LOCAL_LOG 2>&1
$RSYNC $DIR_LOCAL $DEST >> $LOCAL_LOG 2>&1
echo -e "\nFim do Backup - `date`\n" >> $LOCAL_LOG 2>&1
4 - Deixe o arquivo com as permissões corretas com o comando:
chmod 644 /etc/backup.sh

5 - Crie o arquivo local com a megablaster ultra senha ( Aff ! )
echo "EscrevaAquiUmaSenha" > /etc/rsync.password && echo >> /etc/rsync.password

6 - Deixe o arquivo de senha com a permissão correta, se você não fizer isso o rsync se recusa a trabalhar por entender que um arquivo de senha só pode ser lido pelo root:
chmod 600 /etc/rsync.password

7 - Coloque o Backup no cron para que ocorra diariamente na hora do almoço.
echo "00 13 * * * root /bin/bash /etc/backup.sh" >> /etc/crontab && crontab /etc/crontab

8 - Rode o backup na mão, só pra ver se está tudo ok.
bash /etc/backup.sh

Ao mesmo tempo, acompanhe em outra janela o andamento do negócio:
tail -f /var/log/backup.log

Você deve ver algo como:
Inicio do Backup - Ter Ago 28 17:05:12 BRT 2007
building file list ...

9 - Vá no servidor e verifique se realmente o diretório foi sincronizado.

10 - Repita os passos acima para cada uma das máquinas da sua rede. Para agilizar, você pode copiar os arquivos criados (VERDES) em um pen-drive ou diquete e ir acertando só os detalhes referentes a cada máquina.


---- Terceira etapa ---- OPCIONAL ----
Sincronize seu servidor com outro remoto, depois que tudo estiver as mil maravilhas no intento acima.

Essa parte é mais simples, pois se você perceber... embora os dois sejam servidores, um, vai se comportar como cliente.

O seu servidor interno será o CLIENTE, então aplique nele também tudo referente ao texto verde, lembrando que o alvo dele passa a ser o servidor remoto, ou seja, você deverá alterar o arquivo /etc/backup.sh com os valores referentes ao novo servidor.

O seu servidor externo será um novo servidor, igualzinho ao interno. Aplique nele tudo referente ao texto vermelho, atentando para que os valores referentes ao host que permite realizar o rsync, seja o IP do servidor interno, tenha ele NAT ou não.


Bom, muito coisa ainda pode ser feita, tal como autenticar com SSH e chaves, além de compactar ou criptografar (Cryptoloop) os diretórios no servidor remoto, mas deixo isso pra outra hora, tô com o dedo duro de tanto escrever...

Boa sorte pra vocês e obrigado ao Felipe Albuquerque que começou esse documento pra mim.

Comentários

Textos mais visitados

Identificado jovem cuspidor do conflito no Clube Militar

Como surfar em Chicama – Passo a Passo do Carioca.