Como o Backup é Armazenado
Cada execução de uma task produz um arquivo completo e autocontido. Não
há deduplicação entre runs, não há backup incremental, e não há cadeia de
dependência entre arquivos: qualquer .ally restaura sozinho, com nada além
dele e da chave.
Versões anteriores desta página descreviam deduplicação FastCDC e backups incrementais. Esses recursos nunca existiram no cliente. O fatiamento em blocos que havia até a 0.27 não deduplicava nada e foi removido na 0.28.0, quando o restore de arquivos passou a devolver a árvore original.
O que um run produz
origem ──► tar ──► compressão ──► cifra (opcional) ──► .ally ──► storage| Etapa | O que acontece |
|---|---|
| tar | Fileset: a árvore real, com caminho relativo à raiz, symlink, diretório vazio, permissão e mtime. Banco: o dump. Tudo em streaming, direto para o disco temporário |
| compressão | zstd nível 3 (padrão) ou nenhuma, sobre o tar inteiro |
| cifra | AES-256-GCM em blocos de 1 MiB (STREAM), chave de dados envelopada em RSA-4096, header como dado autenticado. Só quando key_mode do config global não é none |
.ally |
Header de 48 bytes (magic, versão, flags, fingerprint da chave, compressão) seguido do payload |
Ver Segurança e Criptografia para o envelope e o fingerprint.
O que isso significa na prática
- Restore simples: um arquivo, um comando. Não existe "restaurar a cadeia até o full de domingo"
- Sem estado local a proteger: perder o servidor de origem não invalida nenhum backup, porque nenhum depende de índice, catálogo ou cache de assinaturas
- Cada run custa o tamanho inteiro: 10 backups de 2 GB ocupam 20 GB. A economia vem de compressão, exclusão e retenção, não de dedup
Como economizar espaço de verdade
Exclua o que não precisa voltar
[target]
kind = "fileset"
includes = ["/var/www"]
excludes = ["**/node_modules", "**/.git", "**/cache/**", "*.log", "*.tmp"]Diretório excluído corta a subárvore inteira. Ver Padrões de Exclusão.
Compressão: use o padrão
[packer]
compressor = "zstd" # padrão; "none" desligazstd roda sempre no nível 3 — compression_level é lido e ignorado. lz4
é aceito mas grava gzip. Dados já comprimidos (imagens, vídeo, .zip) não
encolhem — exclua-os ou aceite o tamanho.
Deixe a retenção apagar o velho
[[storage]]
driver = "b2"
retention = "daily 7, weekly 4, monthly 6"
Meça antes de decidir
backupally measureMostra, por task, quanto a origem ocupa, quanto virou backup e a taxa de compressão. Ver backupally measure.
Chaves de configuração que existem mas não fazem nada
Por compatibilidade, o parser aceita estas chaves; nenhuma tem efeito:
| Onde | Chave | Situação |
|---|---|---|
[global] |
chunk_algo, avg_chunk_mb |
Obrigatórias no config global (o parser exige), ignoradas |
[collector] da task |
chunk_algo, chunk_avg_mb, incremental |
Lidas e ignoradas |
Deixe-as como estão nos exemplos; não configure nada esperando resultado.
Roadmap
Deduplicação e incremental continuam no roadmap como candidatos, sem data. Quando existirem, virão com formato novo e esta página será reescrita — até lá, o que está descrito acima é o que roda.