É possível (no ext4 clássico e/ou em qualquer outro sistema de arquivos) criar dois arquivos que apontem para o mesmo conteúdo, de modo que, se um arquivo for modificado, o conteúdo seja duplicado e os dois arquivos se tornem diferentes? Seria muito prático economizar espaço no meu disco rígido.
Contexto: Tenho alguns vídeos pesados que compartilho em um servidor de nuvem próprio que podem ser modificados por muitas pessoas e, portanto, pode ser possível que algumas pessoas modifiquem/removam esses arquivos... Eu realmente gostaria de ter certeza de que tenho um backup desses arquivos e, portanto, preciso manter dois diretórios, o nextcloud normal e um diretório "backup", que (pelo menos) dobra o tamanho necessário para armazená-lo.
Eu estava pensando em criar um repositório git no topo do diretório nextcloud, e isso tornaria o processo de backup muito mais fácil quando novos vídeos são adicionados (apenas git add .
), mas git
ainda dobra o espaço entre o blob e o diretório de trabalho.
Idealmente, uma solução que possa ser combinada com o git seria incrível (ou seja, que me permita criar um histórico das alterações de vídeo, com commits, checkouts... sem dobrar o espaço em disco.
Além disso, estou curioso para ter solução para vários sistemas de arquivos (especialmente se você tiver truques para sistemas de arquivos que não implementam snapshots). Observe que o instantâneo do LVM não é realmente uma solução, pois não quero fazer backup do meu volume completo, apenas de alguns arquivos/pastas específicos.
Obrigado!
Sim em sistemas de arquivos Copy On Write (Btrfs, ZFS). git-annex é o mais próximo possível do ext4. Observe que você pode
mount --bind
usar um volume com suporte de LVM ou um sistema de arquivos Btrfs em uma pasta em outro sistema de arquivos.Os links físicos fazem isso, desde que qualquer pessoa que edite os arquivos o faça criando um novo arquivo e renomeando-o sobre o original. Isso quebraria o link, já que o novo arquivo está vinculado a apenas um nome e o outro link é substituído pela regravação.
O problema é que é difícil saber em geral se um programa vai sobrescrever os dados no mesmo inode, ou se vai criar um novo arquivo ao salvar.
Tornar as "cópias de backup" somente leitura pode ajudar, pois elas não podem ser modificadas, mas os links ainda podem ser removidos e o mesmo nome recriado. Mas isso pode levar a muitos erros quando os programas não puderem gravar nesse inode.
Então, do meu ponto de vista, a desduplicação em nível de arquivo como essa por meio de links físicos é possível, mas somente se você controlar os programas que gravam nos links.
Eu acho que as outras respostas não dizem isso explicitamente, então sim, é possível em btrfs usando reflinks em vez de hardlinks.
Quando um hardlink é modificado, o outro nome de arquivo também mostra a modificação, pois ambos fazem referência ao mesmo arquivo.
Quando um reflink é modificado, o outro arquivo não é modificado. As edições são gravadas em um novo pedaço de disco, enquanto as partes inalteradas dos dois arquivos ainda se referem aos mesmos pedaços de disco, economizando espaço.
https://hackernoon.com/reflinks-vs-symlinks-vs-hard-links-and-how-they-can-help-machine-learning-projects-wz2ej3xa7