Boa pergunta. Parece que atualmente não há maneiras fáceis de dizer de alto nível.
Um problema é que um arquivo pode compartilhar apenas parte dos dados via Copy-on-Write. Isso é chamado de extensão física e algumas ou todas as extensões físicas podem ser compartilhadas entre arquivos CoW.
Não há nada análogo ao inode
que, quando comparado entre arquivos, diga que os arquivos compartilham as mesmas extensões físicas. (Editar: veja minha outra resposta ).
A resposta de baixo nível é que você pode perguntar ao kernel quais extensões físicas são usadas para o arquivo usando o , que está documentado . Em princípio, se todas as extensões físicas forem iguais, o arquivo deverá compartilhar o mesmo armazenamento subjacente.FS_IOC_FIEMAP
ioctl
Documentation/filesystems/fiemap.txt
Poucas coisas implementam uma maneira de ver essas informações em um nível superior. Encontrei alguns códigos aqui . Aparentemente, o filefrag
utilitário deve mostrar as extensões com -v. Além disso, btrfs-debug-tree
mostra essas informações.
Eu teria cuidado, no entanto, como essas coisas podem ter tido pouco uso na natureza para esse fim, você pode encontrar bugs com respostas erradas; portanto, tenha cuidado com esses dados para decidir sobre as operações que podem causar corrupção de dados.
Algumas questões relacionadas:
btrfs-debug-tree
para listar as extensões em um determinado nome de arquivo?Além da minha resposta anterior , acabei de lançar o
fienode
qual calcula um hash SHA1 das extensões físicas do arquivo e pode ser usado para encontrar algumas cópias de reflink (idênticas). Cuidado, porém, existem advertências (consulte a documentação ). O BTRFS decidiu alterar algumas, mas não todas, as extensões físicas de uma cópia de refink que eu fiz sem provocação ou aviso, causando a alteração do valor.fonte