Manter cópias de segurança confiáveis é o pilar mais crítico da administração de sistemas e da segurança cibernética pessoal. Embora utilitários tradicionais como o tar e o rsync ainda tenham seu espaço, eles carecem de recursos essenciais para ambientes modernos, como criptografia autenticada por padrão e deduplicação nativa em nível de bloco. Se você transfere dados não criptografados para a nuvem ou armazena terabytes de dados redundantes, sua infraestrutura está vulnerável e consumindo recursos desnecessários.
Para resolver esse gargalo, o Restic se consolidou como uma das ferramentas de código aberto mais robustas do ecossistema Linux e BSD. Escrito em Go, ele trata cada backup como um snapshot criptografado de estado completo, verificando a integridade dos blocos por meio de criptografia AES-256 e assinaturas Poly1305. A seguir, detalhamos a configuração completa de um pipeline de backup blindado, automatizado com systemd e protegido contra falhas operacionais.
1. Instalação e Preparação do Repositório Seguro
O Restic está presente nos repositórios oficiais das principais distribuições Linux, mas é recomendável utilizar versões recentes para usufruir de melhorias de performance de compressão introduzidas nas versões mais novas.
# No Debian / Ubuntu
sudo apt update && sudo apt install restic -y
# No Fedora / RHEL
sudo dnf install restic -y
# No Arch Linux
sudo pacman -S restic
O conceito central do Restic é o repository (repositório), o local onde os dados deduplicados residem. Ele pode ser um disco externo montado localmente, um servidor SFTP ou um bucket S3/B2 compatível, como o Backblaze B2. Para este guia, estruturaremos um repositório local protegido em /mnt/backups/restic-repo.
Nunca passe senhas como argumento em texto puro na linha de comando, pois elas ficam visíveis no histórico do shell e no comando ps. Em vez disso, gerencie a chave via arquivo de credencial com permissões restritas:
# Gerar chave aleatória e salvar em arquivo seguro
sudo mkdir -p /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/backup-password.key > /dev/null
sudo chmod 600 /etc/restic/backup-password.key
# Inicializar o repositório criptografado
sudo restic init --repo /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key
2. Script de Execução com Filtros de Exclusão
Para evitar desperdício de espaço com caches temporários, arquivos de paginação e sockets, criamos um arquivo de exclusão em /etc/restic/excludes.txt contendo caminhos que devem ser ignorados durante a varredura:
/proc
/sys
/dev
/run
/tmp
/var/tmp
/var/cache
/home/*/.cache
**/.Trash*
Em seguida, criamos o script executável principal em /usr/local/bin/restic-backup.sh. Esse script lida com a execução do snapshot, rotação e manutenção da integridade:
#!/usr/bin/env bash
set -euo pipefail
export RESTIC_REPOSITORY="/mnt/backups/restic-repo"
export RESTIC_PASSWORD_FILE="/etc/restic/backup-password.key"
echo "[$(date)] Iniciando snapshot do sistema..."
# Executa o backup com exclusões e compressão equilibrada
restic backup \
--exclude-file=/etc/restic/excludes.txt \
--one-file-system \
--tag system-backup \
/etc /home /var/www
echo "[$(date)] Aplicando política de retenção (forget & prune)..."
restic forget \
--tag system-backup \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--prune
echo "[$(date)] Verificando integridade básica do repositório..."
restic check --read-data-subset=5%
echo "[$(date)] Processo de backup concluído com sucesso."
Defina as permissões corretas para que apenas o usuário root tenha acesso de execução e leitura do script:
sudo chmod 700 /usr/local/bin/restic-backup.sh
3. Automação Robusta via Systemd Timer
Diferente do cron convencional, os temporizadores do systemd gravam logs estruturados no journald, tratam falhas com maior visibilidade e evitam sobreposição se um backup anterior demorar mais do que o esperado. Vamos configurar um par de unidades: serviço e timer.
Primeiro, crie o arquivo de serviço em /etc/systemd/system/restic-backup.service:
[Unit]
Description=Rotina de Backup Criptografado com Restic
After=network.target local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
Nice=19
IOSchedulingClass=idle
PrivateTmp=true
Agora, crie o temporizador correspondente em /etc/systemd/system/restic-backup.timer configurado para rodar todas as noites às 02h00:
[Unit]
Description=Timer Noturno do Restic Backup
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=1800
[Install]
WantedBy=timers.target
Ative e inicialize a automação:
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
# Verificar status do timer
systemctl list-timers restic-backup.timer
4. Restauração Granular e Montagem de Snapshots com FUSE
Um plano de backup só é tão bom quanto o seu procedimento de restauração validado. O Restic oferece duas abordagens excepcionais para extrair dados sem sobrescrever acidentalmente estruturas em produção.
Listagem e Extração Direta
Para inspecionar snapshots criados e restaurar um arquivo pontual:
# Listar snapshots existentes
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key snapshots
# Restaurar um diretório específico do último snapshot para um diretório /tmp/recovery
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key \
restore latest \
--target /tmp/recovery \
--include /etc/nginx
Navegação Interativa via FUSE Mount
Uma das funções mais impressionantes do Restic é a capacidade de montar todo o repositório como um sistema de arquivos somente leitura através do FUSE. Isso permite abrir snapshots como pastas normais pelo terminal ou gerenciador gráfico de arquivos:
sudo mkdir -p /mnt/restic-mount
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key \
mount /mnt/restic-mount
Após a montagem, o diretório /mnt/restic-mount/snapshots/ apresentará pastas separadas por data e ID de snapshot. Você pode utilizar comandos corriqueiros como cp ou diff para inspecionar alterações antes de desmontar o diretório com fusermount -u /mnt/restic-mount.
Considerações Finais e Manutenção Preventiva
- Guarde a chave criptográfica fora do host: O arquivo
backup-password.keydeve ser mantido em um cofre seguro (como o Bitwarden ou impresso em cofre físico). Sem ele, os snapshots tornam-se computacionalmente irrecuperáveis. - Implemente a regra 3-2-1: Utilize um backend secundário. Você pode sincronizar a pasta do repositório local para a nuvem usando o utilitário Rclone com
rclone sync /mnt/backups/restic-repo remote:bucket-backup. - Teste restaurações semestrais: Crie um alerta no seu calendário para realizar restaurações de teste em máquinas virtuais limpas periodicamente, garantindo que dependências e permissões estejam intactas.
Com essa arquitetura implementada, seus backups ganham nível corporativo de confiabilidade, permanecem imunes a vazamentos de dados mesmo em armazenamentos públicos e operam silenciosamente em segundo plano com impacto mínimo de hardware.