Comment vérifier qu'une copie de fichier est reflink / CoW?

8

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

Wu Yongzheng
la source

Réponses:

5

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 inodequi, 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 ioctlDocumentation/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' filefragutilitaire est censé montrer les extensions avec -v. En outre, btrfs-debug-treeaffiche 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:

pwaller
la source
Très bonne réponse! Comment utiliseriez-vous btrfs-debug-treepour répertorier les extensions sur un nom de fichier donné?
Tom Hale
4

Suite à ma réponse précédente , je viens de publier fienodequi 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.

pwaller
la source