É possível usar hardlinks para fins de desduplicação de backup?

2

Eu sei sobre backups completos, backups incrementais e backups decrementais. No entanto, fiquei imaginando por que ninguém (Windows Backup, TrueImage, Paragon) parece ter implementado o seguinte algoritmo de backup.

Ele precisa de um meio de backup que suporte links, por exemplo, NTFS. Idealmente, a mídia de backup é do mesmo formato para suportar todos os recursos, como fluxos de dados alternativos (ADS).

  1. O primeiro backup é um backup completo. Isso irá copiar todos os arquivos para o meio de backup em uma subpasta de \. Vamos chamar essa pasta L (para "last"). Não há formato de arquivo especial, apenas copie os arquivos.
  2. Com o próximo backup, uma nova subpasta de \ será criada, vamos chamá-la C (para "atual"). Os arquivos que foram alterados a partir do backup completo serão copiados novamente do disco de origem. Arquivos que não foram alterados são movidos de L para C e um link físico é criado para apontar de L para C .
  3. Em backups repetidos, o mesmo procedimento será aplicado com C e outra nova pasta.

Há alguma coisa que eu sinto falta neste algoritmo que não funcionaria?

Embora tenha percebido algum problema, vejo as seguintes vantagens:

  • o último backup ( C ) é sempre um backup completo. Para restaurar o backup, você precisa apenas deste backup. O usuário pode excluir qualquer backup antigo sem destruir a possibilidade de recuperação (o que não é o caso de backups completos, incrementais e decrementais).
  • Backups antigos agem como backups completos devido aos links, mas ocupam muito menos espaço no disco.
  • há um histórico completo de alterações no arquivo, caso o usuário não tenha excluído um arquivo. Mas, ao contrário do SVN, é possível excluir revisões antigas.
  • Mover arquivos e criar links são operações muito rápidas. Criar o backup deve ter o mesmo desempenho.
  • É possível excluir seletivamente arquivos alterados em backups antigos (por exemplo, somente os grandes), não excluindo um backup completo
por Thomas Weller 06.01.2014 / 20:10

4 respostas

2

O que você descreve já está em uso, com a opção rsync e sua --link-dest= , por meio de dezenas de programas de wrapper, como dirvish , entre outros.

    
por 07.01.2014 / 04:55
3

Parece um plano viável. Isso diminuiria o tempo gasto para visualizar e usar os backups. Se os backups são usados com freqüência e é preciso ver os instantâneos completos, isso seria muito útil.

Eu mudaria o texto "movido de L para C" para simplesmente dizer "linkado de L para C".

Uma consideração - excluir um arquivo com um grande número de links (em referência ao seu último ponto) significa localizar todos esses links e removê-los. Então, recuperar o espaço seletivamente dessa maneira seria mais desafiador, mas fácil o suficiente para fazer com o comando find.

    
por 07.01.2014 / 04:45
0

O que você está descrevendo é essencialmente um esquema de backup incremental.

Como Dan D. aponta , ele é realmente usado por várias ferramentas, especialmente em plataformas semelhantes a Unix, nas quais os hardlinks são manipulado nativamente por muitos dos programas que se importam.

No entanto, muitos programas do Windows não lidam muito bem com hardlinks. Nos dias de FAT, os hardlinks na verdade teriam sido considerados um erro , já que dois nomes no sistema de arquivos não tinham permissão para apontar para os mesmos blocos de dados.

O que você descreve é um esquema de backup incremental, porque qualquer backup é construído sobre todos os backups anteriores. A única diferença real é como esses backups anteriores são referenciados e o fato de que é mais fácil excluir um backup anterior porque os dados só serão realmente excluídos quando a contagem de referência para o arquivo em questão chegar a zero, o que acontecerá quando não houver mais sendo referenciado de qualquer backup. Claro que a desvantagem disso é que é mais difícil prever exatamente quanto espaço será liberado, excluindo um backup anterior; no caso extremo, exceto pelo espaço usado pelos metadados do sistema de arquivos e recuperado, ele pode, na verdade, ser zero. (Sem alterações entre esse backup e um backup adjacente).

No caso de backups incrementais "normais", você precisa fazer as restaurações manualmente. No caso do que você está descrevendo, a referência é implícita. No entanto, se você excluir tudo o que não foi realmente copiado durante (tem uma contagem de referência de exatamente um em) o backup mais recente, o backup ainda seria tão incompleto como seria se você tivesse feito vários backups incrementais e tentei restaurar apenas o mais recente.

    
por 07.01.2014 / 11:11
0

Eu acho que é basicamente o que você chama de cópia Deloreana. Há, por exemplo, o Link Shell Extension para Windows, que implementa esse comportamento. Eles têm uma explicação muito boa em sua documentação:

link

    
por 08.03.2017 / 16:17