você está aqui: Home → Colunistas → Segredos do Google
De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e PolÃtica de Privacidade.
Colaboração: Ronaldo Toledo Morais
Data de Publicação: 18 de Dezembro de 2008
Tenho vários clientes que usam máquinas Linux servindo de firewall, proxies, vpn, etc....
Alguma vezes acontece alguma falha devido a problemas de energia elétrica, sobrecargas, etc, e aparece a necessidade de reinstalar e reconfigurar o sistema.
Surge aí a necessidade de um backup com todas as configurações que permita ganhar um bom tempo e colocar novamente disponível os serviços interrompidos.
Bem, backups na mesma máquina não são seguros, podem também ir para o espaço. Backups em outras máquinas da mesma rede também correm o risco de ir para o espaço caso uma sobrecarga corra pelo cabo de rede.
O ideal mesmo é um backup que fique armazenado fora do local fisico da empresa e que garantidamente contenha sempre tudo o que for necessário para reconstituir os serviços.
O gmail vem mesmo a calhar. Tem espaço mais que suficiente para armazenar os backups de várias instalações e, até então, tem se mostrado muito seguro, nunca perdi nada que estivesse ali armazenado.
Como é feito o backup?
O cron inicia o serviço todos os dias, executa um script em perl que gera um tar.gz do diretório de backup e o compara com o último, se encontrada alguma diferença o archive é então encriptado e enviado ao gmail. O script de qualquer forma envia uma cópia ao gmail aos sábados.
Observações:
Abaixo vai uma amostra do que coloco na pasta /usr/local/backups
drwxr-xr-x 2 root root 4096 2008-11-25 03:38 anterior lrwxrwxrwx 1 root root 14 2008-11-25 03:31 binlocal -> /usr/local/bin drwxr-xr-x 3 root root 4096 2007-05-09 14:23 certificados lrwxrwxrwx 1 root root 29 2008-11-25 03:35 crontab -> /var/spool/cron/crontabs/root lrwxrwxrwx 1 root root 27 2008-11-25 03:30 ddclient.conf -> /etc/ddclient/ddclient.conf lrwxrwxrwx 1 root root 14 2008-11-25 03:32 etclocal -> /usr/local/etc -rw-r--r-- 1 root root 9 2008-11-25 03:37 excludefiles lrwxrwxrwx 1 root root 11 2008-12-06 03:12 passwd -> /etc/passwd lrwxrwxrwx 1 root root 21 2008-11-25 03:33 rc.firewall -> /etc/rc.d/rc.firewall lrwxrwxrwx 1 root root 18 2008-11-25 03:33 rc.local -> /etc/rc.d/rc.local lrwxrwxrwx 1 root root 11 2008-12-06 03:12 shadow -> /etc/shadow lrwxrwxrwx 1 root root 31 2008-11-25 03:35 squid.conf -> /usr/local/squid/etc/squid.conf
Abaixo vai o script devidamente comentado.
#!/usr/bin/perl chdir "/usr/local/backup"; `mkdir anterior` if not -d "anterior"; `touch excludefiles` if not -e "excludefiles"; $cliente = $ARGV[0]; # parametro passado ao script(identifica o backup) `rm anterior/*`; chomp($ultimo = `ls -1 *.bz2`); `mv $cliente*.bz2 anterior/`; chomp($timestamp = `date +"%Y%m%d-%H%M"`); chomp($today = `date +"%a"`); `tar --exclude-from excludefiles -chPvjf $cliente-backup-$timestamp.tar.bz2 * > listbackup-$cliente-$timestamp`; # atençao à opção -h para que os links sejam seguidos ao invés de apenas copiados. $diffs = "*"; #forcamos este flag para nao ficarmos sem backup (caso não exista nada em anterior) chomp($diffs = `diff $cliente-backup-$timestamp.tar.bz2 anterior/$ultimo`) if $ultimo ne ""; `openssl enc -e -a -salt -bf -in $cliente-backup-$timestamp.tar.bz2 -out $cliente-backup-$timestamp.tar.bz2.cript -k senha-de-encriptação `; `echo "************************************" >> listbackup-$cliente-$timestamp`; `echo "para descriptografar este tarfile use o comando" >> listbackup-$cliente-$timestamp`; `echo "openssl enc -d -a -salt -bf -in nomearqcripto -out arqdecripto" >> listbackup-$cliente-$timestamp`; `echo "************************************" >> listbackup-$cliente-$timestamp`; do { system("echo backup iniciado as $timestamp nao enviado ao gmail, sem modificacoes >> /var/log/log.backup") ; `rm anterior/*`; # e limpamos a pasta de backups anteriores,pode haver lixo acumulado la `rm listbackup*`; `rm *backup*cript`; exit; } if $diffs eq "" and ($today ne "Sat" and $today ne "Sab"); system("echo backup iniciado as $timestamp | /usr/local/bin/sendEmail -u Backup $cliente $timestamp -xu conta-no-gmail -xp senha-no-gmail -o tls=auto -s smtp.gmail.com:587 -t conta-no-gmail -a listbackup-$cliente-$timestamp $cliente-backup-$timestamp.tar.bz2.cript -f conta-no-gmail"); system("echo erro ao enviar backup iniciado as $timestamp >> /var/log/log.backup") if $?; system("echo backup enviado ok ao gmail as $timestamp >> /var/log/log.backup") if not $?; `rm listbackup*`; `rm *backup*cript`;
Este script foi evoluindo de acordo com as necessidades e, claro, pode ser melhorado tremendamente.