Captura instantânea de arquivos grandes

3

Em casa, tenho o seguinte esquema de backup: Todas as máquinas rsync diariamente para o diretório $ FULL_COPY dos servidores. O servidor tira instantâneos desse diretório diariamente (também semanalmente / mensalmente), mantendo no máximo X instantâneos. Também usando o rsync:

rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT

Isso funciona muito bem, arquivos não alterados desde a última captura instantânea. O problema são arquivos grandes (para ser uma caixa de entrada precisa do Thunderbird), uma pequena alteração significa uma cópia inteira do arquivo. Meus instantâneos são facilmente um par de GB, mas talvez apenas alguns MB tenham mudado.

Existe uma maneira mais inteligente de fazer isso? (meu $ FULL_COPY também é replicado em uma máquina remota, então não estou precisando dessa redundância). Minha única idéia é um sistema de arquivos CoW que suporta instantâneos. Mas isso significaria uma grande cirurgia no meu sistema que eu não gosto muito.

    
por stacker 24.10.2013 / 21:55

1 resposta

1

Eu dou um longo artigo aqui, mas é bem simples, use patch.

Crie o $ FULL_COPY normalmente, mas para o $ NEW_SNAPSHOT, exclua o (s) arquivo (s) muito grande (s) .

Por enquanto, digamos que seja um arquivo e o caminho para o arquivo seja /home/myuser/.mail/INBOX que você executaria:

rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT --exclude=/home/myuser/.mail/INBOX

Isso diminuirá o tempo para tirar drasticamente os instantâneos.

Em seguida, vamos preencher os caminhos para mais clareza. Digamos que o diretório 'root' de $ FULL_COPY esteja em / mnt / full, portanto, o backup completo do diretório de e-mail do usuário vai para /mnt/full/home/myuser/.mail/INBOX. Da mesma forma, snap-shots de maneira semelhante vão em / mnt / snap-mm-dd-yy.

Em seguida, para obter apenas um delta da caixa de entrada e colocá-lo no snapshot correto em um local que faça sentido, execute:

diff -u /mnt/full/home/myuser/.mail/INBOX /home/myuser/.mail/INBOX > /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta

O que você fez aqui é usar diff para criar um arquivo de patch do arquivo de caixa de correio atual para o arquivo de backup completo (a opção -u do diff faz isso) e enviar o arquivo de correção para o diretório de snapshots em um local previsível ( isto é, o diretório .mail do usuário para essa data).

Por fim, se / quando você precisar restaurar a caixa de correio de volta para a aparência no dia do instantâneo porque você perdeu o original, primeiro restaure tudo para o caminho original usando $ FULL_COPY e $ SNAP_SHOT. Em seguida, execute o programa de correção para recuperar o delta da caixa de entrada:

patch < /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta

É isso.

Notas:

1) Se você olhar para o INBOX.delta, as duas primeiras linhas são os caminhos para os arquivos antigos e novos, então você poderia editá-lo se não quisesse corrigir usando o (s) caminho (s) original (ais).

2) Embora o delta cresça um pouco maior a cada dia, ele ainda permanece muito menor que o todo. Aumentar o delta até o próximo total será um uso mais eficiente dos recursos do que criar vários patches.

    
por 24.10.2013 / 23:56