Bonne question. Il semble qu'il n'y ait actuellement aucun moyen facile de le dire.
Un problème est qu'un fichier ne peut partager qu'une partie des données via la copie sur écriture. C'est ce qu'on appelle une extension physique et certaines ou toutes les extensions physiques peuvent être partagées entre les fichiers CoW.
Il n'y a rien d'analogue à un inode
qui, comparé entre les fichiers, vous dirait que les fichiers partagent les mêmes extensions physiques. (Edit: voir mon autre réponse ).
La réponse de bas niveau est que vous pouvez demander au noyau quelles extensions physiques sont utilisées pour le fichier en utilisant le , qui est documenté dans . En principe, si toutes les extensions physiques sont identiques, le fichier doit partager le même stockage sous-jacent.FS_IOC_FIEMAP
ioctl
Documentation/filesystems/fiemap.txt
Peu de choses implémentent un moyen de regarder ces informations à un niveau supérieur. J'ai trouvé du code go ici . Apparemment, l' filefrag
utilitaire est censé montrer les extensions avec -v. En outre, btrfs-debug-tree
affiche ces informations.
Cependant, je ferais preuve de prudence, car ces choses peuvent avoir été peu utilisées à l'état sauvage à cette fin, vous pouvez trouver des bogues vous donnant de mauvaises réponses, alors méfiez-vous de ces données pour décider des opérations qui pourraient entraîner une corruption des données.
Quelques questions connexes:
btrfs-debug-tree
pour répertorier les extensions sur un nom de fichier donné?Suite à ma réponse précédente , je viens de publier
fienode
qui calcule un hachage SHA1 des étendues physiques du fichier et peut être utilisé pour trouver des copies de refixation (identiques). Attention cependant, il y a des mises en garde (voir la documentation ). BTRFS a décidé de modifier une partie, mais pas la totalité, de l'étendue physique d'une copie de raffinage que j'ai faite sans provocation ni avertissement, entraînant une modification de la valeur.la source