Se você criar hardlinks, preste atenção nos direitos desse arquivo. Aviso, proprietário, grupo, modo, atributos estendidos, hora e ACL (se você usar isso) são armazenados no INODE. Somente nomes de arquivos são diferentes, pois eles são armazenados na estrutura de diretórios e outros apontam para as propriedades INODE. Essa causa, todos os nomes de arquivos vinculados ao mesmo inode, têm os mesmos direitos de acesso. Você deve impedir a modificação desse arquivo, porque qualquer usuário pode danificá-lo para outro. É simples É o suficiente, qualquer usuário coloca outro arquivo com o mesmo nome. O número do inode é salvo e o conteúdo do arquivo original é destruído (substituído) para todos os nomes com links físicos.
Melhor maneira é a desduplicação na camada do sistema de arquivos. Você pode usar BTRFS (muito popular da última vez), OCFS ou assim. Veja a página: https://en.wikipedia.org/wiki/Comparison_of_file_systems , especialmente na tabela Recursos e deduplicação de dados da coluna. Você pode clicar e classificar :)
Veja especialmente o sistema de arquivos ZFS. Está disponível como FUSE, mas dessa maneira é muito lento. Se você deseja suporte nativo, consulte a página http://zfsonlinux.org/ . Então você deve corrigir o kernel e, em seguida, instalar as ferramentas zfs para gerenciamento. Eu não entendo, por que o linux não suporta como drivers, é o caminho para muitos outros sistemas operacionais / kernels.
Os sistemas de arquivos oferecem suporte à desduplicação de 2 maneiras, arquivos ou desduplicados. O ZFS suporta bloco. Isso significa que o mesmo conteúdo que se repete no mesmo arquivo pode ser deduplicado. Outra maneira é o momento em que os dados são deduplicados, que podem estar online (zfs) ou offline (btrfs).
Observe que a desduplicação consome RAM. É por isso que a gravação de arquivos no volume ZFS montado com o FUSE causa um desempenho dramaticamente lento. Isso está descrito na documentação. Mas você pode ativar / desativar a deduplicação on-line no volume. Se você vir algum dado que deve ser desduplicado, basta ativar a desduplicação, reescrever algum arquivo para qualquer temporário e finalmente substituí-lo. Depois disso, você pode desativar a desduplicação e restaurar o desempenho total. Obviamente, você pode adicionar ao armazenamento quaisquer discos de cache. Pode ser discos de rotação muito rápida ou discos SSD. Claro que isso pode ser discos muito pequenos. No trabalho real, isso substitui a RAM :)
No linux, você deve cuidar do ZFS, porque nem todos funcionam como deveriam, especialmente quando você gerencia o sistema de arquivos, faz instantâneos 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 opensolaris, ele suporta nativamente o ZFS :) O que é muito bom no ZFS é que ele funciona tanto como sistema de arquivos quanto como gerenciador de volumes semelhante ao LVM. Você não precisa disso quando usa o ZFS. Consulte a documentação se você quiser saber mais.
Observe a diferença entre o ZFS e o BTRFS. O ZFS é mais antigo e maduro, infelizmente apenas no Solaris e no OpenSolaris (infelizmente estrangulado pelo oracle). O BTRFS é mais jovem, mas da última vez é muito bom suportado. Eu recomendo kernel fresco. O ZFS possui desduplicação online, o que causa gravações mais lentas, porque tudo é calculado online. O BTRFS suporta desduplicação offline. Isso economiza desempenho, mas quando o host não tem nada a fazer, você executa periodicamente a ferramenta para fazer a desduplicação. E o BTRFS é criado nativamente no linux. Talvez seja melhor FS para você :)