Como criar um sistema de backup automático no Linux com o rsync

por | 28/03/2023 | Backup

O rsync é um utilitário open source largamente utilizado por usuários do Linux. Ele oferece recursos de backup e sincronização, sendo também uma ferramenta de linha de comando.

Em primeiro lugar, é importante que você tenha em mente o fato de que backups são imprescindíveis. Assim, confira também este guia, repleto de informações úteis relacionadas a este assunto tão crucial.

Particularmente, sou um tanto quanto neurótico quando se trata de backup. Na verdade, tenho bastante apreço por meus preciosos dados.

E quando menciono “dados”, estou me referindo a qualquer tipo de informação útil, relevante, por ventura armazenada em meus computadores e dispositivos.

Acredito também que você deve ter um interesse semelhante, uma vez que chegou até este guia. Pois bem, no Linux, o rsync é uma ferramenta excelente e confiável.

O utilitário (também um comando), além disso, está presente nos repositórios de muitas distribuições. Muito provavelmente seu sistema já o tem instalado.

Porém, é bem fácil verificar se sua distro possui a ferramenta instalada. Abra o terminal e digite o comando abaixo:

rsync --version

Caso uma saída semelhante à abaixo seja exibida, a ferramenta CLI (Command-line Interface, ou Interface de Linha de Comando) encontra-se instalada:

rsync - Verificando instalação

Agora, em caso contrário, basta prosseguir neste guia para instruções detalhadas a respeito da instalação.

Pré-requisitos

Agora vamos a alguns pré-requisitos:

Sistema/FerramentaPré-requisito
Sistema localLinux/Unix-like
Sistema remotoLinux/Unix-like
Ferramenta localTerminal / rsync / SSH
Ferramenta remotarsync / SSH

O que é rsync?

Antes de mais nada, é interessante mencionar que a palavra rsync significa “remote sync” (sincronização remota). Porém, o programa open source permite tanto sincronização quanto backups de dados.

Disponível para sistemas Linux e vários outros Unix-like, o utilitário é poderoso e muito versátil, o que engloba também uma série de opções , flags e argumentos.

Desenvolvido inicialmente pelos australianos Andrew Tridgell e Paul Mackerras, o rsync foi lançado oficialmente em 1996.

Trata-se de um produto extremamente sólido e confiável. Existem também algumas implementações voltadas ao Windows, como o cwRsync, por exemplo. Mas neste guia escrevo especificamente sobre a versão voltada ao OS do pinguim, ou seja, sobre o rsync Linux.

Através do utilitário, é possível trabalhar tanto com backup quanto com sincronização de arquivos e diretórios inteiros. Transferências remotas também são suportadas, e este tutorial também conta com detalhes a respeito.

O rsync encontra-se em constante desenvolvimento, o que significa que novas versões são periodicamente lançadas, contendo melhorias e correções de bugs.

Além disso, o software também é capaz de preservar, dentre outros elementos, permissões, links simbólicos, grupos e proprietários de arquivos e pastas. Ou seja, trata-se de uma ferramenta de backup muito poderosa e versátil.

O processo de cópia também pode levar em consideração apenas os dados modificados, o que se traduz também em maior economia de espaço e tempo.

O utilitário de código aberto é um dos mais utilizados na atualidade, quando se trata de backup de servidores Linux. Porém, ele também pode ser perfeitamente utilizado em desktops, notebooks e redes.

E se você se preocupa com quedas de conexão, por exemplo, saiba que a ferramenta é também capaz de resumir backups para destinos remotos, reiniciando do ponto em que parou, tão logo a conexão seja restabelecida.

Como instalar o rsync

Dificilmente você encontrará, no Linux, outra ferramenta de backup e sincronização tão completa, robusta e cheia de recursos. E, o melhor de tudo: trata-se de algo 100% gratuito.

É muito provável que o rsync já esteja instalado na sua distro. De qualquer forma, para instalá-lo basta utilizar um dos comandos abaixo, dependendo de seu OS:

Debian, Ubuntu e derivados

sudo apt install rsync

Arch Linux, Manjaro e derivados

sudo pacman -S rsync

CentOS ou Fedora

sudo dnf install rsync

Comandos do rsync

Antes de mais nada, vamos dar uma olhada em alguns comandos e opções da ferramenta, para que você se familiarize um pouco com seus inúmeros recursos.

Vale lembrar que você também pode realizar testes com o rsync, através da flag --dry-run: isto faz com que o programa execute uma simulação, sem que nada seja feito em definitivo.

Trata-se de um recurso muito útil, na verdade. Assim, eventuais problemas futuros podem ser detectados de forma antecipada. Mas não se preocupe, logo mais abaixo existem instruções detalhadas a respeito desta opção.

Em primeiro lugar, é também interessante citar a sintaxe básica do rsync:

rsync [opções] [origem] [destino]

Por exemplo:

rsync -r -t -v --progress /home/usuario/Documentos/ /run/media/usuario/SSD_Externo/

E, não se preocupe. Mais adiante você entenderá tudo isto perfeitamente.

Lista de opções do rsync

Agora, vamos a algumas opções, valendo a pena lembrar que as 4 utilizadas no exemplo acima encontram-se em primeiro lugar na tabela:

OpçãoDescrição
-rCópia de diretórios de forma recursiva
-tPreservar as datas de modificações
-v“Verbosidade”. Aumentar a quantidade de informações fornecidas durante cada execução
–progressExibir o progresso da operação
-aArquivar, incluindo modo recursivo e preservação de diversos atributos
-b / –backupArquivos existentes no destino serão deletados conforme a transferência progride
-eDefinir qual shell remoto deve ser utilizado
-qEliminar o fornecimento de mensagens, desde que não relacionadas a erros
-dCópia de diretórios de forma não recursiva
-uPular os arquivos que são mais recentes no destino
-pPreservar as permissões
-EPreservar as propriedades de execução de arquivos
-oPreservar o proprietário
-gPreservar o grupo
-zUtilizar compressão durante a transferência de dados
-n / –dry-runOperar em modo teste / simulação
–log-fileGrava detalhes da operação em um arquivo (Ex. de uso: –log-file=ARQUIVO

Obs: não se esqueça de que há diferenciação entre letras maiúsculas e minúsculas.

Obviamente, existem várias outras opções. Porém, dentro do escopo deste guia, a tabela acima é mais do que suficiente.

É importante também que você tenha em mente o fato de que o rsync sempre deve ser utilizado através da linha de comando, através dos 4 grupos de opções/comandos/argumentos acima descritos (no mínimo). A saber:

  • rsync: trata-se do comando propriamente dito. Este comando, na verdade, invoca o executável presente no diretório /usr/bin;
  • Grupo de opções (no exemplo acima, -r -t -v --progress);
  • Origem/fonte (no exemplo acima, /home/usuario/Documentos/);
  • Destino (no exemplo acima, /run/media/usuario/SSD_Externo/);

Como utilizar o rsync localmente

Em primeiro lugar, e para que você entenda bem como funciona o utilitário de backup e sincronização, vamos a um exemplo prático.

Sugiro a criação de alguns diretórios para testes, no seu sistema e dentro da pasta home. Utilize o seguinte comando:

sudo mkdir -p ~/testes/{origem,destino} && sudo touch ~/testes/origem/arquivo1.txt

O comando acima irá criar um diretório principal (~/testes) com dois subdiretórios (~/testes/origem e ~/testes/destino).

O comando também irá criar um arquivo .TXT vazio, apenas para que possamos realizar os devidos testes (arquivo1.txt), dentro do subdiretório ~/testes/origem.

Tudo bem simples, acima de tudo, e apenas para que você possa conferir na prática como tudo funciona.

Como simular tarefas de backup com o rsync

É muito interessante que você faça testes antes de rodar um comando. Para evitar quaisquer problemas, adicione a flag --dry-run ao comando durante sua primeira execução.

Isto fará com que o utilitário apenas efetue uma simulação. Ele exibirá uma lista dos arquivos que serão copiados, juntamente com a informação DRY RUN, indicando que trata-se apenas de um teste.

Obs: a opção --dry-run também pode ser utilizada durante operações de sincronização.

Terminado o teste, e desde que tudo tenha corrido bem, você pode remover a opção --dry-run e executar o comando novamente.

Como fazer backup local com o rsync

Dessa forma, agora você irá conferir como utilizar o rsync para a realização de backups locais. Como destino, é possível utilizar, por exemplo, um HD ou SSD externo, ou então um pen drive.

Da mesma forma, também é possível utilizar uma máquina qualquer da sua rede, desde que o respectivo compartilhamento tenha sido realizado, bem como o devido ponto de montagem tenha sido definido.

Porém, basicamente, você deve utilizar um comando com a seguinte sintaxe:

sudo rsync -r -t -v --progress ~/testes/origem/ ~/testes/destino

Obs: repare na barra (/) no final, quando estamos definindo a origem. Ela é necessária para a inclusão de todo o conteúdo da origem (no caso, ~/testes/origem/), de forma integral, no backup.

Observe que, de acordo com o comando acima, e utilizando opções e diretórios/arquivos de exemplo já vistos anteriormente, você está usando uma espécie de “comando completo de backup”, que copiará o conteúdo de ~/testes/origem/ para ~/testes/destino, incluindo subdiretórios e arquivos dentro destes.

Observe também que, de acordo com as opções utilizadas, será feita uma cópia recursiva de diretórios, além do uso das devidas opções para preservação das datas de modificação e “verbosidade”.

Rode o comando acima no terminal, e você obterá um resultado semelhante ao abaixo:

rsync - Backup local

Repare que o arquivo arquivo1.txt foi copiado de ~/testes/origem/ para ~/testes/destino/. Apenas lembre-se de realizar as devidas modificações, de acordo com suas necessidades, caminhos, locais de armazenamento, etc.

Note também que, caso o mesmo comando seja executado novamente, sem que existam modificações, nada será feito. Ou seja, estamos aqui trabalhando com uma operação de backup incremental.

Como sincronizar arquivos localmente com o rsync

O rsync também pode ser utilizado para tarefas de sincronização, de forma extremamente simples. Veja:

sudo rsync -a [origem] [destino]

Por exemplo:

sudo rsync -a ~/testes/origem/ ~/testes/destino

Apenas para relembrar: uma sincronização significa que ambos os diretórios (origem e destino) serão sempre idênticos, ou seja, eles terão sempre o mesmo conteúdo.

Obs: em tarefas de sincronização, também é possível utilizar, ao invés da flag -a, a flag -r. Entretanto, a primeira é geralmente mais usada em operações de sincronização.

Você também pode dar uma olhada na tabela acima, para mais detalhes sobre ambas as opções.

Vale a pena também lembrar que uma tarefa de sincronização pode trabalhar com servidores remotos. Apenas não entrarei em maiores detalhes aqui, uma vez que estou focando nos backups.

Como usar o rsync para backup em servidores remotos

Você também pode utilizar a ferramenta criada por Andrew Tridgell e Paul Mackerras para realizar backups de servidores remotos.

É possível, por exemplo, realizar tanto transferências de dados de uma máquina local para outra remota, quanto transferências entre dois servidores remotos.

Perceba, assim, que é totalmente possível utilizar o rsync como ferramenta de backup de servidores Linux remotos. Ou seja, se você possui um servidor web ou um servidor de e-mails, por exemplo, pode utilizar o utilitário também nestas situações.

Lembre-se de que backups são importantíssimos, e nestes casos é possível realizar primeiro um backup local (em alguma pasta ou partição da máquina remota), seguido de uma transferência para algum outro servidor.

Você pode inclusive criar um script para realizar tais backups, incluindo comandos para que o backup local seja deletado após a transferência para o (outro) servidor remoto. Assim, você também economiza seu precioso espaço em disco (claro, se desejar manter as cópias locais, sem problemas, também).

Como fazer backup em um servidor remoto com o rsync (porta padrão)

Se você deseja, por exemplo, copiar arquivos e/ou diretórios de seu desktop ou notebook local para um servidor remoto, para maior segurança, a sintaxe básica é a seguinte:

rsync -r -t -v --progress -e ssh /origem/ usuário_remoto@IP_Do_Servidor:/destino

Repare que agora existem algumas diferenças em relação ao comando utilizado quando se trata apenas de backups locais. Assim:

  • -e ssh: através desta opção estamos definindo um shell remoto;
  • usuario_remoto@IP_Do_Servidor:/destino: definição dos dados de acesso ao servidor remoto (usuário + IP do servidor) e do diretório nesta máquina onde o backup será armazenado;

Por exemplo, levando em consideração os mesmos dados de teste que usamos anteriormente (veja acima), você pode usar um comando semelhante ao abaixo para um backup que terá como destino um servidor remoto:

rsync -r -t -v --progress -e ssh ~/testes/origem/ [email protected]:~/destino

Obs: apenas não se esqueça de utilizar os dados reais, conforme seu uso/necessidades. Ou seja, informe o IP do servidor, seu usuário, o diretório remoto para o backup e também quais serão as pastas de origem (do que será feito backup).

Obs 2: note que no exemplo acima estou usando ~/ para indicar a pasta home do meu usuário. Isto é o mesmo que digitar /home/usuario. Você pode usar o modo que preferir.

Como fazer backup em um servidor remoto com o rsync (porta alterada)

Se você seguiu nosso guia para alteração da porta SSH em um servidor Linux, o procedimento/comando abaixo deve ser utilizado, pois é preciso informar, agora, qual porta deve ser utilizada.

Caso você ainda não tenha alterado a porta do SSH em seu servidor, não deixe de conferi o guia, para obter ainda mais segurança (clique aqui).

Pois bem, confira agora o comando adequado, neste caso:

rsync -r -t -v --progress -e 'ssh -p [numero_da_porta]' /origem/ usuario_remoto@IP_Do_Servidor:/destino

Observe que agora também existem diferenças em relação ao comando acima (com uso da porta padrão, a 22):

  • -e 'ssh -p [numero_da_porta]': neste “grupo de opções e argumentos” nós indicamos o shell remoto e a porta SSH;
  • usuario_remoto@IP_Do_Servidor:/destino: definição dos dados de acesso ao servidor remoto (usuário + IP do servidor) e do diretório nesta máquina onde o backup será armazenado;

Agora, por exemplo, e também levando em consideração os mesmos dados para testes acima descritos, você pode usar um comando como o abaixo, para um backup tendo como destino um servidor Linux remoto:

rsync -r -t -v --progress -e 'ssh -p 22222' ~/testes/origem/ [email protected]:~/destino

Obs: também aqui, não se esqueça de realizar as devidas substituições e adicionar o usuário, o IP, a porta correta e as pastas origem e destino, de acordo com suas necessidades.

Obs 2: note que também no exemplo acima estou usando ~/ para indicar a pasta home do meu usuário. Isto é o mesmo que digitar /home/usuario. Você pode usar o modo que preferir.

Sobre as chaves SSH

Além disso, é importante ressaltar que caso você esteja utilizando chaves SSH para autenticação, estas serão usadas no momento do login. E caso você tenha especificado uma senha de proteção para sua chave privada, esta senha também será solicitada.

Não se preocupe, porém. Temos um guia completo sobre este assunto, o qual você pode consultar através deste link.

De qualquer forma, usando os comandos acima você deverá obter uma saída semelhante à abaixo:

rsync - Backup via SSH

Como automatizar os backups remotos com rsync

Agora vamos utilizar o agendamento de tarefas do Linux para automatizar os backups remotos.

Através do Cron, é possível definir dias e horários para a execução. Você pode inclusive definir mais de uma tarefa, em horários distintos.

Antes de mais nada (mais detalhes no capítulo “Utilizar senha com a chave privada ou não?” – abaixo), estou assumindo que você não está protegendo sua chave privada mediante uma passphrase.

Para adicionar uma tarefa Cron e automatizar o backup com rsync, faça o seguinte:

  1. Abra sua crontab. Geralmente, isto é feito mediante o uso do comando crontab -e;
  2. Agora, com a crontab aberta, insira um comando semelhante ao abaixo:
30 2 * * * rsync -r -t -v --progress -e 'ssh -i /caminho/para/chave_privada -p [porta_SSH]' /origem/ usuario@IP_Do_Servidor_remoto:/destino

De antemão, observe que vários elementos foram modificados no comando, em relação àqueles usados para backups locais:

  • 'ssh -i /caminho/para/chave_privada -p [porta_SSH]': neste grupo, estamos especificando, além da porta, o caminho completo para a nossa chave SSH privada (veja acima). Aqui, você deve usar o caminho completo para sua chave privada. Algo como, por exemplo, /home/usuario/.ssh/id_rsa.

Obs: dê uma olhada no guia cujo link adicionei acima (sobre o uso de chaves SSH).

Ou seja, você deverá adicionar à sua crontab um comando como o abaixo, por exemplo (usando como base os diretórios e arquivos para testes, que criamos anteriormente):

30 2 * * * rsync -r -t -v --progress -e 'ssh -i /home/usuario/.ssh/id_rsa -p 22222' ~/testes/origem/ [email protected]:~/backupTeclinux

Finalmente, salve a modificação e feche a crontab.

Vale dizer que, através do comando acima, o backup via rsync será executado todos os dias, às 02:30 hrs da manhã. Lembre-se de fazer as substituições necessárias, ou seja, informe o IP, o usuário, a porta e o caminho completo para sua chave privada, além dos diretórios “origem” e “destino”.

Neste momento, não entrarei em maiores detalhes a respeito de Cron jobs e agendamentos. Além disso, achei interessante a configuração deste backup de forma diária.

Quanto ao horário de execução, sinta-se à vontade para alterá-lo. Por exemplo, para defini-lo para as 15:30 hrs, substitua 30 2 por 30 15. E assim por diante.

Utilizar senha com a chave privada ou não?

Neste ponto, é importante salientar que o comportamento normal do SSH faz com que ele solicite a senha de proteção da chave privada, caso esta tenha sido especificada.

Assim, a princípio sugiro que você não utilize uma senha de proteção da sua chave privada, caso deseje utilizar o rsync para backup local e/ou remoto.

Apesar de “menos seguro”, este método faz com que o SSH não pause a operação e fique aguardando por uma senha.

Obviamente, existem alguns workarounds, aqui. É possível usar ferramentas como o GPG (GNU Privacy Guard), por exemplo, ou então o utilitário sshpass, para aumentar a segurança durante o manuseio de senhas. Mas isto já é assunto para um outro tutorial.

Como restaurar backup com o rsync

Tão importante quanto efetuar um backup é ser capaz de restaurá-lo. O comando para restauração, nesse sentido, é bem simples.

Vale lembrar que é sempre necessário contar com um destino para a restauração, independentemente de onde ele esteja localizado (localmente ou remotamente).

Restaurando um backup local

Use um comando como o abaixo, para a restauração de um backup local:

sudo rsync -aAXv --delete /destino/ origem/

Observe, em primeiro lugar, que estamos invertendo um pouco a ordem das coisas. Agora, /destino vem em primeiro lugar e representa o local onde o nosso backup foi armazenado.

Já a /origem representa o diretório onde os dados devem ser restaurados. Por exemplo:

sudo rsync -aAXv --delete ~/testes/destino/ ~/testes/origem/

Mais uma vez, estamos usando os diretórios para testes criados anteriormente. Lembre-se de realizar as alterações necessárias, de acordo com seus paths e necessidades. Você obterá, então, uma saída semelhante à abaixo:

Backup via SSH

Além disso, nunca é demais frisar que você também pode restaurar um backup executado com o rsync de forma “manual”, ou “direta”. Ou seja, você pode simplesmente copiar o(s) diretório(s) pertencente(s) ao backup de seu local de armazenamento atual (um SSD externo, por exemplo) para seu computador local.

Isto fica a seu critério, claro, embora um comando como o acima descrito facilite bastante as coisas. E, do mesmo modo, vale lembrar que você pode usar o utilitário de backup para copiar e restaurar várias pastas ao mesmo tempo (veja detalhes acima).

Restaurando um backup remoto

Para a restauração de um backup transmitido para um servidor remoto, use um comando com a seguinte sintaxe:

rsync -aAXv --delete -e 'ssh -p [porta_SSH]' usuario_remoto@IP_Do_Servidor:/destino /origem/

Mais uma vez, observe que as coisas estão um pouco invertidas. Ou seja, /destino vem em primeiro lugar, e representa o local onde a cópia de segurança foi armazenada. Já /origem representa o local em que você deseja que o backup seja restaurado.

Ou seja, neste momento, use um comando como o abaixo, lembrando sempre de realizar as necessárias substituições:

rsync -aAXv --delete -e 'ssh -p 22222' [email protected]:~/backupTeclinux/ ~/testes/origem/

Obs: repare que no exemplo acima estou usando ~/ para indicar a pasta home do meu usuário. Isto é o mesmo que digitar /home/usuario. Você pode usar o modo que preferir.

Obviamente, dependendo da situação, você pode também desejar restaurar este backup de uma forma “manual”, digamos. Ou seja, você pode apenas acessar o servidor/diretório remoto através de um cliente FTP/SFTP e então efetuar o download dos dados. Isto também fica a seu critério.

Nunca é demais lembrar, também, que você pode utilizar a flag -z durante as tarefas de backup, para garantir economia de banda. Isto é muito interessante, principalmente no caso de grandes quantidades de dados.

Alguns detalhes importantes

O rsync e o SSH representam elementos bastante vastos. Com este guia, busquei um foco maior em tarefas de backup voltadas ao uso diário. Trata-se, aliás, de comandos/exemplos que eu mesmo uso, em meu dia a dia.

Obviamente, algumas coisas podem se complicar um pouco. É possível que problemas envolvendo permissões de arquivos e diretórios também apareçam. Dentre outros possíveis problemas, é claro.

Neste caso, sugiro que você deixe um comentário, e eu tentarei te ajudar.

Conclusão

Através deste guia você pôde conhecer um pouco mais do rsync, uma poderosa ferramenta de backup e sincronização largamente utilizada no mundo todo, principalmente por administradores de servidores Linux.

Obviamente, é bem difícil cobrir, pelo menos em apenas um artigo, todos os modos de uso, opções e recursos do utilitário. Este nem é o meu objetivo, é claro, apesar de nada impedir futuros guias a respeito, cobrindo diferentes aspectos da ferramenta.

De qualquer forma, este guia conta com instruções detalhadas sobre a instalação do rsync em sistemas Linux, passando pelas opções de uso mais comuns, backups e restaurações de dados.

Você também pôde conferir como usar o rsync sobre SSH, o que permite que backups sejam transmitidos e recebidos para/de servidores remotos.

Finalmente, também fiz questão de incluir detalhes sobre a automatização, para que você seja capaz de utilizar o rsync em conjunto com Cron jobs e, assim, desfrutar de backups automáticos.

Neste meio tempo, não deixe de consultar o “manual” do utilitário de backup, através do comando man rsync.

Espero que o conteúdo tenha sido interessante. Se você tiver alguma dúvida e/ou sugestão, sinta-se também à vontade para deixar seu comentário.

Compartilhe este conteúdo:

<a href="https://teclinux.com/author/marcos-zy/" target="_self">Marcos A.T. Silva</a>

Marcos A.T. Silva

Apaixonado por tecnologia desde tenra idade, trabalha com TI há mais de 20 anos. Tem no rock and roll (em suas mais variadas vertentes) uma válvula de escape, e adora escrever guias e tutoriais, além de ser um grande entusiasta do Linux e do software livre.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pin It on Pinterest

Share This

Compartilhe

Compartilhe este post com seus amigos!