Se você fizer hardlinks, preste atenção nos direitos sobre esse arquivo. Aviso, proprietário, grupo, modo, atributos estendidos, tempo e ACL (se você usar isso) é armazenado em INODE. Somente nomes de arquivos são diferentes porque são armazenados na estrutura de diretórios e outros apontam para as propriedades INODE. Esta causa, todos os nomes de arquivo ligados ao mesmo inode, possuem os mesmos direitos de acesso. Você deve impedir a modificação desse arquivo, porque qualquer usuário pode danificar o arquivo para outro. É simples. É o suficiente, qualquer usuário colocar outro arquivo no mesmo nome. O número do inode é então salvo e o conteúdo do arquivo original é destruído (substituído) para todos os nomes com hardlink.
A melhor maneira é a desduplicação na camada do sistema de arquivos. Você pode usar BTRFS (última vez muito popular), OCFS ou assim. Veja a página: link , especialmente na tabela Recursos e deduplicação de dados da coluna. Você pode clicar e classificar:)
Veja especificamente o sistema de arquivos ZFS. Isto está disponível como FUSE, mas desta forma é muito lento. Se você quiser suporte nativo, veja a página link . Em seguida, você deve corrigir o kernel e, em seguida, instalar as ferramentas do zfs para gerenciamento. Eu não entendo, porque o linux não suporta como drivers, é o caminho para muitos outros sistemas operacionais / kernels.
Os sistemas de arquivos suportam deduplicação de duas formas, desduplicando arquivos ou blocos. O ZFS suporta bloco. Isso significa que o mesmo conteúdo que se repete no mesmo arquivo pode ser desduplicado. Outra forma é a hora em que os dados são desduplicados, isso pode ser online (zfs) ou offline (btrfs).
Observe que a desduplicação consome RAM. Por isso, gravar arquivos no volume ZFS montado com o FUSE causa um desempenho extremamente lento. Isso está descrito na documentação.
Mas você pode on-line on / off desduplicação no volume. Se você vir dados desduplicados, simplesmente defina a deduplicação, reescreva algum arquivo para qualquer arquivo temporário e, finalmente, substitua. Depois disso, você pode desativar a deduplicação e restaurar o desempenho total. Claro, você pode adicionar ao armazenamento qualquer cache de discos. Isso pode ser muito rápido girar discos ou discos SSD. Claro que isso pode ser discos muito pequenos. No trabalho real, isso é substituto para a RAM:)
No linux, você deve tomar cuidado com o ZFS, porque nem todos funcionam como deveria, especialmente quando você gerencia o sistema de arquivos, cria um instantâneo, etc., mas se você faz a configuração e não a altera, tudo funciona corretamente. De outra forma, você deve mudar o linux para o opensolaris, ele suporta nativamente o ZFS :) O que é muito bom com o ZFS é que isso funciona tanto como sistema de arquivos, quanto como gerenciador de volume similar ao LVM. Você não precisa quando usa o ZFS. Veja a documentação se você quiser saber mais.
Observe a diferença entre o ZFS e o BTRFS. O ZFS é mais antigo e mais maduro, infelizmente apenas no Solaris e OpenSolaris (infelizmente estrangulado pelo oracle). BTRFS é mais novo, mas da última vez muito bem suportado. Eu recomendo o kernel fresco. O ZFS tem deduplicação on-line, que causa lentidão nas gravações, porque tudo é calculado on-line. BTRFS suporta desduplicação off-line. Isso economiza desempenho, mas quando o host não tem nada para fazer, você executa a ferramenta periodicamente para fazer a deduplicação. E o BTRFS é criado nativamente sob o linux. Talvez seja melhor para você:)