1. A regra 3-2-1
Tenha três cópias, em dois meios diferentes, com uma delas fora do ambiente principal. O backup só é confiável quando a recuperação foi testada e o tempo de restauração é conhecido.
2. Repositório Restic
export RESTIC_REPOSITORY=s3:s3.amazonaws.com/bucket-servidor
export RESTIC_PASSWORD_FILE=/etc/restic/password
sudo chmod 600 /etc/restic/password
restic init
restic backup /etc /opt /srvO Restic deduplica snapshots e criptografa o repositório. A senha é parte do backup: armazene-a em um cofre separado do servidor.
3. Retenção e integridade
restic snapshots
restic check
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune4. Restore ensaiado
mkdir /tmp/restore
restic restore latest --target /tmp/restore
diff -ru /srv/app /tmp/restore/srv/app5. Checklist final
- Destino externo
- Senha fora do servidor
- Retenção definida
- Alertas de falha
- Restore testado
6. Automação e alertas
O job de backup precisa produzir uma saída verificável. Registre início, fim, quantidade de snapshots e código de saída. Um timer systemd permite definir janela, dependências de rede e histórico no journal.
systemctl list-timers --all
journalctl -u restic-backup --since yesterday
7. Comandos explicados
| Comando ou variável | O que faz |
|---|---|
RESTIC_REPOSITORY=s3:s3.amazonaws.com/bucket-servidor | Aponta o repositório para um bucket S3. Para o S3, defina também AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY. |
RESTIC_PASSWORD_FILE=/etc/restic/password | Lê a senha de um arquivo. |
sudo chmod 600 /etc/restic/password | Só o dono lê e escreve o arquivo da senha. |
restic init e restic backup /etc /opt /srv | Cria o repositório e faz o primeiro snapshot dessas pastas. |
restic check | Verifica a integridade da estrutura do repositório. |
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune | Aplica a política de retenção e libera o espaço dos dados sem uso. |
restic restore latest --target /tmp/restore | Restaura o snapshot mais recente para uma pasta de teste. |
diff -ru /srv/app /tmp/restore/srv/app | Compara as duas pastas. -r percorre subpastas e -u mostra as diferenças de forma legível. Sem saída, são idênticas. |
systemctl list-timers --all e journalctl -u restic-backup --since yesterday | Confere o agendamento e o resultado da última execução. |
| Regra 3-2-1 | Como fica neste artigo |
|---|---|
| 3 cópias | os dados em produção, um backup local e um backup remoto |
| 2 meios diferentes | disco do servidor e armazenamento de objetos |
| 1 fora do ambiente | o bucket S3 |
| Política de retenção | O que guarda |
|---|---|
--keep-daily 7 | um snapshot por dia nos últimos 7 dias |
--keep-weekly 4 | um por semana nas últimas 4 semanas |
--keep-monthly 12 | um por mês nos últimos 12 meses, cobrindo cerca de um ano |
8. Exemplo: restaurar só uma pasta para testar
mkdir /tmp/restore
restic restore latest --target /tmp/restore --include /srv/app
diff -ru /srv/app /tmp/restore/srv/appO --include restaura apenas o caminho indicado, o que torna o teste mensal rápido. Registre o tempo que levou, porque ele é a base do seu prazo real de recuperação.
9. Erros comuns e como resolver
| Sintoma | Causa provável | Solução |
|---|---|---|
| Falha ao abrir o repositório S3 | Faltam as credenciais AWS ou o nome do bucket está errado. | Exporte AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY e confira o endereço do repositório. |
O restic check reporta erros | Upload incompleto ou dano no armazenamento. | Investigue o destino e, se preciso, refaça o backup em um repositório novo. |
| O restore não bate com a origem | Diferenças de permissões, dono ou exclusões no backup. | Compare com diff -ru, revise o --exclude e teste a restauração como root. |
| A senha do repositório foi perdida | O conteúdo é criptografado e não há recuperação sem a senha. | Guarde a senha em um cofre separado do servidor, antes de precisar dela. |