Backup de Arquivos

Este guia mostra como configurar backup de arquivos e diretórios.

Backup Rápido

Para backup pontual sem configuração:

backupally quick /var/www/html -d /backups/ -z

Com upload para S3:

backupally quick /var/www/html -d s3://bucket/backups/ -t s3 \
  --access-key AKIAIO... \
  --secret-key wJalrX... \
  --bucket my-bucket \
  -z

Criar Task de Backup

Website

Crie /etc/backupally/tasks.d/website.toml:

[task]
id = "website"
name = "Website Files"
enabled = true
schedule = "0 4 * * *"

[target]
kind = "fileset"
includes = ["/var/www/html"]
excludes = [
  "**/.git",
  "**/node_modules",
  "**/*.log",
  "**/cache/*",
  "**/tmp/*"
]

[packer]
compressor = "zstd"
compression_level = 6

[[storage]]
id = "local"
driver = "local"
path = "/backup/website"
retention = "daily 7, weekly 4"

Configurações do Sistema

[task]
id = "system-config"
name = "System Configuration"
enabled = true
schedule = "0 5 * * *"

[target]
kind = "fileset"
includes = [
  "/etc/nginx",
  "/etc/systemd",
  "/etc/cron.d",
  "/etc/backupally"
]

[packer]
compressor = "zstd"

[[storage]]
driver = "s3"
bucket = "system-backups"
path = "config/${hostname}/${date}"
retention = "daily 30, monthly 12"

Home de Usuário

[task]
id = "home-backup"
name = "User Home Directory"
enabled = true
schedule = "0 2 * * *"

[target]
kind = "fileset"
includes = ["/home/usuario"]
excludes = [
  "**/.cache",
  "**/Downloads",
  "**/Trash",
  "**/.local/share/Trash"
]

[[storage]]
driver = "b2"
bucket = "personal-backups"
retention = "daily 7, weekly 4, monthly 6"

Padrões de Exclusão

Sintaxe Glob

Padrão Significado
* Qualquer sequência exceto /
** Qualquer sequência incluindo /
? Qualquer caractere único
[abc] Qualquer caractere do conjunto

Exemplos Comuns

excludes = [
  # Controle de versão
  "**/.git",
  "**/.svn",
  "**/.hg",

  # Node.js
  "**/node_modules",
  "**/package-lock.json",

  # Python
  "**/__pycache__",
  "**/*.pyc",
  "**/venv",
  "**/.venv",

  # Build
  "**/dist",
  "**/build",
  "**/target",

  # Logs e temporários
  "**/*.log",
  "**/logs",
  "**/tmp",
  "**/temp",
  "**/cache",

  # IDE
  "**/.idea",
  "**/.vscode",

  # Sistema
  "**/Thumbs.db",
  "**/.DS_Store"
]

O que o backup de arquivos faz, sem opção para mudar:

Situação Comportamento
Symlink Guardado como link (alvo não é seguido). Volta como link no restore
Diretório vazio Guardado e restaurado
Permissão, dono e mtime Preservados
Outro filesystem dentro do include Atravessado — use excludes para /proc, /sys, /dev, /run, /mnt/* se o include for amplo
Socket, FIFO, device Ignorados
Include inexistente Erro — o backup não roda com menos do que a task declarou
[target]
kind = "fileset"
includes = ["/"]
excludes = ["/proc/**", "/sys/**", "/dev/**", "/run/**", "/tmp/**", "/mnt/**"]

As chaves follow_symlinks e one_filesystem, que apareciam em versões anteriores desta página, não existem: são ignoradas se declaradas.

Validar e Executar

backupally task validate website
backupally backup --target website

Restaurar Backup

Listar Snapshots

backupally history --target website

Restaurar

backupally restore \
  --target website \
  --snapshot /backups/website/website_20260904_040000.tar.ally \
  --path /restore/website

O backup guarda a árvore real, com o caminho relativo à raiz. Um include /var/www/html volta em /restore/website/var/www/html/... — symlinks, diretórios vazios, permissões e mtime preservados.

Restaurar para Local Original

Como o caminho dentro do backup já é o caminho absoluto sem a barra inicial, restaurar no lugar é apontar --path para a raiz:

backupally restore \
  --target website \
  --snapshot /backups/website/website_20260904_040000.tar.ally \
  --path /

Apontar --path /var/www/html não restaura no lugar: produz /var/www/html/var/www/html/.... Para trocar só alguns arquivos, restaure em um diretório temporário e copie o que precisar.

Backups de fileset feitos antes da 0.28.0 não restauram como arquivos: o formato antigo guardava blocos sem caminho nem ordem. Refaça o backup.

Tamanho e Frequência

Cada run é um backup completo — não há incremental. Para reduzir o custo:

  • Exclua o que não precisa voltar (node_modules, caches, logs)
  • Deixe a retenção apagar runs antigos
  • Meça com backupally measure antes de mudar a frequência

Ver Como o Backup é Armazenado.

Condições de Execução

Verificar Carga do Sistema

[condition]
when = "loadavg() < 2.0"

Verificar Espaço em Disco

[condition]
when = "diskfree('/backup') > 50GB"

Janela de Execução

[window]
start = "00:00"
end = "06:00"

Monitoramento

[notification]
enabled = true

[notification.webhook]
url = "https://hooks.slack.com/services/xxx"

Troubleshooting

Permissão Negada

Execute como root ou ajuste permissões:

sudo backupally backup --target website

Arquivos Muito Grandes

Aumente o timeout:

[network]
timeout_seconds = 1800

Muitos Arquivos Pequenos

Use pack maior:

[packer]
pack_size_mb = 200
By Borlot.com.br on 11/02/2026