A duplicidade cria instantâneos, mas na forma de arquivos compactados, não em um formato que possa ser lido diretamente.
Existem várias maneiras de criar instantâneos. Alguns sistemas de arquivos avançados, como ZFS e Btrfs tê-los como um recurso interno, assim como algumas camadas de disco, como LVM .
Em um sistema de arquivos genérico, uma técnica básica é reproduzir a árvore de diretórios da qual você deseja fazer um instantâneo, mas criar hard links para cada arquivo, em vez de copiar arquivos. Quando um arquivo é excluído e substituído por uma nova versão, o instantâneo retém a versão antiga. Observe que alguns aplicativos modificam arquivos no lugar; isso também modificaria a versão do snapshot, já que são o mesmo arquivo. Este é um problema inerente às soluções baseadas em hard link.
Uma variante da vinculação direta direta é sempre fazer uma cópia ao fazer backup de um arquivo, mas se um arquivo não tiver sido alterado desde o último backup, crie um link físico para o backup anterior em vez de criar uma nova cópia. Ao contrário da abordagem anterior, essa é adequada para backups, pois não corre o risco de reescrever o histórico modificando arquivos em backups antigos.
Rsync com a opção --link-dest
e Rsnapshot são as ferramentas mais comuns para criar esses instantâneos. O Rsnapshot é uma ferramenta de nível superior: ele usa o rsync sob o capô, mas cuida de chamá-lo com os argumentos certos, de gerenciar o abatimento de backups antigos, etc.
Com o rsnapshot, você especifica como selecionar backups antigos definindo vários intervalos. O intervalo mais baixo é a frequência com que os backups são feitos, no seu caso, no dia exato. Intervalos mais longos definem quais backups são retidos. Para cada diretiva retain INTERVAL N
in rsnapshot.conf
, quando você executa rsnapshot INTERVAL
, o rsnapshot faz duas coisas:
- Selecione os diretórios de backup para que apenas os instantâneos
N
-1 permaneçam porINTERVAL
. - Para o intervalo mais baixo, faça um backup; para outros intervalos, replique a imagem atual para o intervalo anterior.
Por exemplo, para fazer backups diários e reter os backups de 3, 5 e 10 dias atrás e incluir as seguintes retain
linhas no seu /etc/rsnapshot.conf
:
retain daily 2
retain day3 2
retain day5 3
Execute rsnapshot daily
como uma tarefa cron diária. Poucos minutos antes desse trabalho, execute rsnapshot day3
e rsnapshot day5
a cada três dias; você pode aproximar assim:
04 04 5,10,15,20,25,30 * * rsnapshot day5
07 04 3,6,9,12,15,18,21,24,27,30 * * rsnapshot day3
10 04 * * * rsnapshot daily
(Você não pode ter backups de exatamente três dias atrás, porque você está apagando no segundo dia - o que você faz é manter um backup diário em 3.) Um esquema de retenção mais clássico é a retenção semanal e mensal, conforme ilustrado na documentação do rsnapshot.