Utilizando tar com ssh para backups sem ocupar espaço na máquina cliente

Publicado por Renato Lopes de Morais em 14/12/2010

[ Hits: 11.313 ]

Blog: http://renatolmorais.blogspot.com

 


Utilizando tar com ssh para backups sem ocupar espaço na máquina cliente



Geralmente queremos fazer um backup e copiar para uma máquina na rede, mas dispomos de pouco espaço na máquina onde estão os dados ou simplesmente não queremos ocupar espaço para não gerar carga desnecessária. Uma solução é utilizar o tar e ssh com redirecionamento da saída.

Adaptado do artigo Compactando diretórios e transferindo via pipe por SSH do usuário Jefferson Diego.

O servidor de backup do local onde eu trabalho possui um robô de backup controlado por um programa chamado Veritas Netbackup.

Recentemente este robô deu problema. Saímos então em busca de soluções para backup.

Concentrei meus estudos em ferramentas open source e pensei se seria possível construir um script de backup eficaz e eficiente. Eficaz no sentido de funcionar, e eficiente no sentido de não gerar carga na máquina que continha os dados originais.

Uma solução aceitável seria montar em cada máquina uma unidade de rede para onde os dados iriam. Assim seria necessário criar um script em cada máquina para copiar os dados a serem salvos para essa unidade de rede.

Outra solução encontrada foi utilizar o tar com o ssh para que apenas o servidor de backup executasse os scripts. É essa solução que apresento.

O comando é bem simples:

ssh user@host "tar -cf - <conteúdo a ser salvo> | bzip2 -9vv" | cat > arquivo_destino.tar.bz2

Ou então:

ssh user@host "tar jcvf - <conteúdo a ser salvo>" | cat > arquivo_destino.tar.bz2

A primeira linha eu adaptei do artigo original. O autor utiliza o tar separado do bzip2, provavelmente porque com o bzip2 a saída pode ser refinada e também para melhorar a compressão dos dados. Mas as duas funcionam.

Não se esqueça de adaptar o código para sua necessidade, substituindo:
  • user pelo usuário;
  • host pela máquina cliente;
  • <conteúdo a ser salvo> pelo caminho absoluto do conteúdo;
  • arquivo_destino.tar.bz2 pelo nome do arquivo de destino;

Utilizamos o ssh para executar um comando na máquina cliente.

O comando a ser executado é a compactação do arquivo.

Através do pipe, redirecionamos a saída para o programa cat na máquina local.

Assim temos o conteúdo listado na máquina local.

Com o redirecionamento para o arquivo_destino.tar.bz2, conseguimos obter o arquivo compactado.

Se você fizer a cópia de apenas um arquivo dentro do diretório, o tar criará toda a árvore de diretórios em que o arquivo está contido.

Por exemplo, suponha que o arquivo que queremos copiar está em /home/diretorio. Se utilizarmos o comando acima, o arquivo criado, ao ser descompactado, criará a árvore home/diretorio dentro do diretório corrente. Para evitar isso, utilize a opção -C, assim:

ssh user@host "tar -jcvf - -C /home/diretorio <conteudo a ser salvo>" | cat > temp.tar.bz2

Ex.: Temos o arquivo temp.ext2 (um arquivo formatado como sistema de arquivos ext2 que contém arquivos e diretórios). Ele está na pasta /home/testes. Sendo assim, fazemos:

ssh root@192.160.0.1 "tar -jcvf - -C /home/testes temp.ext2" | cat > temp.tar.bz2

No servidor de backup, descompactamos o arquivo:

tar jxvf temp.tar.bz2
temp.ext2

Para verificar, basta utilizar o comando md5sum no lado cliente e no lado servidor, gerando a soma MD5 para os arquivos temp.ext2 tanto do cliente quanto do servidor.

Outras dicas deste autor

Gravando um CD rapidamente

Leitura recomendada

Configurando o inetutils-syslogd

Vídeo: A source que mudou o mundo

Reproduzir arquivos MP3 no Python

Configurando RIP v2 em roteadores CISCO

Transformando Ubuntu em UbuntuStudio 7.04

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts