Como utilizar o rsync – Ferramenta para sincronização de dados

É fato, estamos consumindo uma quantidade de dados absurda nesses últimos anos. Armazenamento se tornou um fator muito importante na escolha de algum equipamento tecnológico. Por isso, a medida que o tempo avança, a quantidade de dados que conseguimos armazenar cresce de maneira exponencial.Em algum momento de nossas vidas enquanto usuários de tecnologia, já tivemos o desprazer de perder todos os dados importantes que estavam armazenadas em algum dispositivo. É nessa hora que lembramos de não ter realizado um backup . Seja por uma falha nossa ou um defeito do dispositivo, a frustração é uma só.Esse problema ainda escala para um nível maior quando vamos lidar com servidores. É de suma importância estarmos atentos nas copias de seguranças dos dados do servidor.

Vamos usar como exemplo um servidor de hospedagem compartilhada. Temos arquivos de diversos clientes, seus sites e mensagens de e-mails importantes. Mas por azar do destino, o servidor sofre de um desligamento forçado, e ao reiniciá-lo, percebe-se que diversos arquivos foram corrompidos. É nessa situação que conferimos nossas rotinas de backup e já começamos a trabalhar na restauração. Por sorte, tínhamos realizado um backup (cópia de segurança) remoto (num servidor externo), então, ficou tudo bem.
O backup se mostra essencial principalmente quando nos referimos a este tipo de negócio. E por isso diversos softwares são criados para suprir essa necessidade, trazendo como diferencial a fácil organização ou a quantidade de opções para personalizarmos como desejamos realizar as cópias de nossos dados.
Dentre eles, existe uma excelente ferramenta. Ele não possui uma interface gráfica e nem podemos personalizar de maneira fácil. Porém, ela é robusta e nos da uma grande quantidade de opções para realizar nossos backups.

Rsync

O rsync é um dos queridinhos dos usuários Unix que já salvou a pele de muita gente (E muitos dados também). É um software livre (Open source) disponibilizado gratuitamente sobre licença GNU, desenvolvido por Andrew Tridgell e mantido por Wayne Davison’s. Foi desenvolvido em linguagem C e é amplamente usado em sistemas Unix.
O rsync também possui uma versão para Windows, portado através do Cygwin ou do cwRsync (Versão paga para Windows). Porém, por se tratar de uma versão não oficial da ferramenta, elas estão sujeitas a problemas que normalmente não acontecem em ambiente Unix. Então caso decida utilizá-la em Windows, use-a com cautela e veja se vale a pena correr os riscos. A chance de problemas aconteceram podem variar a depender das soluções supracitadas, ou seja, dependem quase exclusivamente dos mantenedores desses softwares.
Vale destacar que, o rsync, é uma ferramenta antiga e consolidada. Sua primeira versão foi lançada em 1996, 22 anos a partir da data desta publicação. Mas as atualizações nunca pararam, apesar de se tornarem menos frequente. A ultima atualização lançada para o rsync foi em 28 de janeiro de 2018, trazendo a versão 3.1.3.

Instalação

Como um software amplamente utilizado em distribuições Linux/Unix, ele esta presente na maioria dos repositórios oficias dos Sistemas Operacionais. Veja abaixo dois exemplos:
CentOs 7

yum install rsync

Ubuntu

apt-get install rsync

A instalação é rápida e fácil, mas caso tenha algum problema neste processo, consulte o site oficial da ferramenta para mais informações.

Utilizando o rsync

Primeiramente, vamos entender como o rsync funciona e as etapas que ele segue para realizar o processo de backup.
Quando configuramos corretamente, cria-se uma copia completa dos arquivos para o diretório novo. Quando executamos o mesmo processo pela segunda vez no mesmo diretório, é comparado arquivo por arquivo e apenas os arquivos diferentes ou que não estão no diretório são enviados, economizando bastante tempo e espaço em disco na hora de criar seus backups. Isso mostra que ele é uma ferramenta voltada para backups incrementais.
Para se conectar a um diretório remoto, utiliza-se o protocolo ssh ou rsh, podendo configurar os parâmetros nativos de cada um normalmente. Esses protocolos se mostram mais rápidos e seguros que o conhecido FTP.
Citarei três exemplos onde utilizaríamos o rsync. Isso vai nos ajudar a perceber as possibilidades que a ferramenta nos traz. Cada exemplo vai demonstrar como os parâmetros e funcionalidades funcionam e como utilizá-los a seu favor.
Os três exemplos são:

  • Copiando arquivos de um diretório local para outro diretório local;
  • Copiando arquivos de um diretório local para um diretório remoto (outro dispositivo);
  • Copiando arquivos de um diretório remoto para o diretório local.

Para cada uma dessa situações, a forma como escrevemos a sintaxe tem pequenas mudanças. Por isso, vamos demonstrá-las junto a lista de parâmetros que utilizamos no rsync.

Sintaxe

Sintaxe para sincronizar arquivos localmente:
rsync [Parâmetros] [Diretório de origem] [Diretório de destino]
Exemplo:

rsync -av -progress -e /home/teste/ /backup/01/

Sintaxe para sincronizar arquivos locais para um diretório remoto:
rsync [Parâmetros] [Diretório de origem] [user@host:/diretório de destino]

Exemplo:

rsync -avz -progress -e "ssh -p 22" /home/teste/ [email protected]:/backup/01/

Sintaxe para sincronizar arquivos de um diretório remoto em um diretório local
rsync [Parâmetros] [user@host:/diretório de destino] [Diretório de origem]
Exemplo:

rsync -avz -progress -e "ssh -p 22" [email protected]:/backup/01/ /home/teste/

Explicando os parâmetros

Bastante simples, não?
Vamos entender agora o que cada parâmetro utilizado nos exemplos significa. E claro, listar mais alguns que podem ser importantes na hora de configurar o seu backup.
-a: Significa habilitar o Archive Mode, que equivale a um conjunto de parâmetros do rsync (-rlptgoD):
r – recursivo;
l – copiar links simbólicos como links simbólicos;
p – mantém as permissões;
t – mantém as informações de data/hora do arquivo;
g – mantém o grupo original;
o – mantém o proprietário original;
D – mantém dispositivos.
-v: Ativa o modo verbose, dando mais detalhes sobre a transferência que esta ocorrendo. Caso deseje ainda mais detalhes sobre o processo de transferência, utilize -vv.
-z: Comprime os arquivos para transferência.
-progress: Exibe o progresso da transferência.
-e: Permite escolher outro shell remoto para a transferência. Por padrão, o rsync utiliza o ssh. Mas você pode usar o rsh para copias locais, se desejar. Ele possibilita utilizar comandos ssh para parametrizar a conexão remota.
Estes são os que mais utilizo no dia a dia dentro da ferramenta, mas existem outros parâmetros interessantes, como este:
-delete: Apaga os arquivos que não estão mais no diretório de origem. Ou seja, se a ideia é manter uma copia fiel do diretório de origem, essa opção é necessária para não haver arquivos que não serão utilizados ocupando espaço no disco.
Com estes parâmetros já somos capazes de realizar um backup total de algum diretório que desejamos. Mas, e se quisermos escrever um script incrementando com este comando, ou criando uma rotina de backup através do crontab?

Bônus

Para que as opções citadas funcionem corretamente, temos que fazer alguns ajustes.
Quando executamos o rsync utilizando ssh como protocolo padrão, o mesmo nos solicita a senha do usuário do servidor remoto, e por isso, invalida a chance de tornamos este processo totalmente automatizado.
Porém, utilizando de um pequeno artifício, podemos passar a senha diretamente para o comando, e melhor, sem expor elas diretamente.
Vamos utilizar o sshpass, um pequeno programa que nos permite passar a senha ssh de acesso ao servidor remoto através da própria linha de comando.
Para instalar esta ferramenta é bem fácil:
Centos 7

yum install sshpass

Ubuntu

apt-get install sshpass

Com o sshpass instalado, vamos criar um arquivo para “escondermos” nossa senha, para que ela não fique exposta na linha de comando tanto do script quanto da crontab.

nano .password

Quando a interface do editor de texto abrir, digite apenas a senha que vai utilizar para acessar o servidor remoto, salve utilizando Crtl+o e feche com Crtl+x.
Feito isso, agora vamos montar a linha de comando do rsync com o parâmetro do sshpass.

rsync -avz -progress -e "sshpass -p $(cat .password) ssh -p 19000" [email protected]:/home/teste /backup/01

Veja que utilizamos o parâmetro “sshpass -p” para dizer que queremos guardar a senha que será utilizada para acesso remoto. Logo em seguida temos o comando “$(cat .password)” onde estamos utilizando o resultado do comando como uma variável para o parâmetro. O comando cat irá ler o arquivo “.password” para que não seja necessário digitar a senha para acessar o servidor remoto, automatizando todo o processo.

Toque final

Para protegermos melhor o acesso a esta senha, vamos mudar a permissão do arquivo para que apenas o dono do arquivo consiga ler o arquivo:

chmod 400 .password

Pronto! Agora podemos utilizar o rsync em scripts e em tarefas de rotinas do Linux.
Para aqueles que desejam se aprofundar afim de tirar 100% do potencial dessa ferramenta, não deixem de conferir o manual completo neste site.