Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

você está aqui: Home  → Colunistas  →  Segredos do Google

 

Usando o espaço do gmail para backup

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.

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir
  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (86 votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Segredos do Google NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.

Opinião dos Leitores

Jota
15 Jan 2009, 01:48
Ta ai, uma ótima dica que muitos não conhecem, e que ajuda muito.

Jota,

www.detudoprabaixar.org
O seu portal de Downloads
Ronaldo Toledo Morais
20 Dez 2008, 17:46
Eduardo

Não se esqueça de remover os arquivos que ficaram em /usr/local/backup cujos nomes se iniciam com um hifen, ok?
Ronaldo Toledo Morais
20 Dez 2008, 05:41
Olá Eduardo

Vc deve ter executado o script sem passar um parâmetro para ele, um codigo qualquer que o identifique(por exemplo, o nome da empresa)
Este parametro pode, é claro, ser suprimido e substituido dentro do script por uma constante. No meu caso é necessário porque uso o script em várias empresas. OK?

Um abraço.
Eduardo Miranda
19 Dez 2008, 11:13
Bom dia, parabéns pelo script!

Me interessei por ele e pretendo implementar aki na empresa.

Só que estou me deparando com alguns erros.

um eu acho q resolvi:
chdir "/usr/local/backup";
só q vc pede para criar o diretório backups, isso eu mudei no meu, blz.

os arquivos q ele cria começar com um hífem daí nem envia o email.

LOG (erros):
rm: imposível remover `anterior/*': Arquivo ou diretório não encontrado
ls: opção inválida -- -
Tente `ls --help' para mais informação.
mv: opção inválida -- a
Tente `mv --help' para mais informação.
tar: ackup-20081219-1101.tar.bz2: Fator de blocagem inválido
Try `tar --help' or `tar --usage' for more information.
-backup-20081219-1105.tar.bz2: No such file or directory
20465:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('-backup-20081219-1105.tar.bz2','r')
20465:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:
Dec 19 11:05:52 efsm sendEmail[20472]: Error: "-backup-20081219-1105.tar.bz2.cript" is not a recognized option!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Artigos Publicados

SEM e SEO - Dominando o Marketing de Busca

Marketing de Otimização de Buscas, por Martha Carrer Cruz Gabriel