Comment vérifier une copy de file est reflink / CoW?

Je joue avec btrfs, ce qui permet à cp --reflink de copyr-écrire. D'autres programmes, tels que lxc-clone , peuvent également utiliser cette fonctionnalité. Ma question est, comment dire si un file est un CoW d'un autre? Comme pour le hardlink, je peux dire à partir du numéro d'inode.

Bonne question. On dirait qu'il n'y a pas à l'heure actuelle de moyens faciles à comprendre.

Un problème est qu'un file ne peut partager qu'une partie des données via Copy-on-Write. C'est ce qu'on appelle une étendue physique, et certains ou tous les extents physiques peuvent être partagés entre les files CoW.

Il n'y a rien d'analogue à un inode qui, comparé entre les files, vous dirait que les files partagent les mêmes étendues physiques. (Edit: voir mon autre réponse ).

La réponse de bas niveau est que vous pouvez requestr au kernel quelles extensions physiques sont utilisées pour le file à l'aide de l' ioctl FS_IOC_FIEMAP , documenté dans Documentation/filesystems/fiemap.txt . En principe, si toutes les extensions physiques sont identiques, le file doit partager le même stockage sous-jacent.

Peu de choses mettent en œuvre un moyen de regarder cette information à un niveau supérieur. J'ai trouvé un peu de code ici . Apparemment, l'utilitaire filefrag est censé montrer les extensions avec -v. En outre, btrfs-debug-tree affiche cette information.

Je ferais toutefois preuve de prudence, car ces éléments peuvent avoir eu peu d'utilité dans la nature à cet effet, vous pourriez find des bugs vous donnant de fausses réponses, alors méfiez-vous de ces données pour décider des opérations qui pourraient causer la corruption des données.

Quelques questions connexes:

  • Comment savoir si un file sur btrfs est copy-on-write?
  • Comment find des copys de données d'un file donné dans le système de files Btrfs?

Suite à ma réponse précédente , je viens de publier fienode qui calcule un hachage SHA1 des extensions physiques du file et peut être utilisé pour find des copys de reflet (identiques). Attention cependant, il y a des mises en garde (voir la documentation ). BTRFS a décidé de modifier certains, mais pas tous, les extensions physiques d'une copy refink j'ai fait sans provocation ou avertissement, ce qui provoque la modification de la valeur.