31.01.2025

Como configurar backups periódicos incrementais usando o Rsync no Ubuntu 20.04

Anteriormente, vimos instalando o Rsync no Ubuntu 20.04 e criando um backup único. Para concluir a configuração do guia atual, siga as etapas do primeiro artigo.

Para muitas tarefas, basta adicionar a execução desse backup ao cron, mas essas ferramentas permitem que você faça e armazene várias cópias de arquivos e tenha um histórico de alterações em um determinado período de tempo. Neste tutorial, daremos uma olhada em como configurar um backup periódico incremental usando o Rsync no Ubuntu 20.04.

Lógica de backup

Ao fazer o backup pela primeira vez, todos os arquivos de destino são colocados na pasta full. Nas execuções subsequentes, o script atualiza todos os arquivos nessa pasta e coloca as versões antigas dos arquivos alterados na pasta increment com a data correspondente. Dessa forma, um backup completo atualizado é mantido constantemente, bem como uma lista de arquivos alterados para cada data. O período de retenção é configurado, bem como a frequência do lançamento da tarefa.

Realizamos a configuração básica para a interação de servidores usando o Rsync na primeira parte do manual. Agora vamos criar um script para backups incrementais regulares.

Criando um script de backup

Crie pastas para armazenar seus backups:

sudo mkdir -p /opt/destination/full
sudo mkdir -p /opt/destination/increment

Ao criar um arquivo de script, você pode selecionar uma pasta de localização. Se você o colocar na pasta /etc/cron.hourly, a sincronização ocorrerá de hora em hora e, se estiver na pasta /etc/cron.daily, então diariamente, etc. Vamos criar um arquivo de script:

sudo nano /etc/cron.hourly/backup

Evite pontos no nome do arquivo de script nas pastas do agendador do cron. Saiba mais sobre o Cron.

No script a seguir, você deve especificar pelo menos o endereço IP correto do servidor de origem. O restante dos valores pode ser deixado como está. Cole as seguintes linhas no arquivo aberto:

#!/bin/bash
# Path to folder for backups
dest=/opt/destination
# Source server IP address
ip=10.5.5.10
# Rsync user on source server
user=backup-user
# The resource we configured in the /etc/rsyncd.conf file on the source server
src=data
# Set the retention period for incremental backups in days
retention=30
# Start the backup process
rsync -a --delete --password-file=/etc/rsyncd.passwd ${user}@${ip}::${src} ${dest}/full/ --backup --backup-dir=${dest}/increment/`date +%Y-%m-%d`/
# Clean up incremental archives older than the specified retention period
find ${dest}/increment/ -mindepth 1 -maxdepth 2 -type d -mtime +${retention} -exec rm -rf {} ;

Salve o arquivo de script e adicione os direitos de inicialização:

sudo chmod 0744 /etc/cron.hourly/backup

Agora o script sincronizará os dados na origem e no destino a cada hora, adicionando versões antigas de arquivos excluídos à pasta correspondente em /opt/destination/increment/.