Comment dupliquer un fichier sans copier ses données avec btrfs?

14

Je n'ai aucune expérience avec btrfs, mais il est annoncé pour pouvoir dé-dupliquer des fichiers.

Dans mon application, je devrais dupliquer des arborescences de répertoires entières.

D'après ce que j'ai appris, btrfs ne dédoublonne que dans certains post-scan, pas immédiatement. Même une simple utilisation cpne semble pas déclencher de déduplication (au moins, dfmontre une utilisation accrue du disque dans la taille des fichiers copiés).

Puis-je éviter de déplacer complètement les données et dire btrfsdirectement de dupliquer un fichier à un autre emplacement, essentiellement en clonant simplement ses métadonnées?

Essentiellement, semblable à un lien physique, mais avec des métadonnées indépendantes (autorisations, heures de modification, ...).

Udo G
la source
7
cp --reflink=always.
mikeserv
3
Notez que cela ne ressemble en rien à un lien dur. Lorsque vous cp --reflink=always, le résultat du point de vue de l'utilisateur sera deux fichiers complètement indépendants dans tous les sens. Le fait que le système de fichiers sous-jacent en déduit que via la copie sur écriture n'est qu'un détail d'implémentation. Vous n'obtenez pas "un lien dur, mais avec des métadonnées indépendantes". À ma connaissance, btrfs ne fait pas encore de déduplication automatique. Je pense que c'est un plan futur, mais je ne suis pas positif à ce sujet.
ormaaj
@ormaaj - un lien physique n'aurait pas de métadonnées indépendantes . et Udo a demandé un détail de mise en œuvre . lorsque vous effectuez un nouveau lien vers un fichier, vous clonez essentiellement ses métadonnées . ce n'est que lorsque les références changent indépendamment que les fichiers divergent - et c'est à cela que sert la déduplication!
mikeserv
1
@mikeserv Er, je suis sûr que la déduplication a un sens différent. La déduplication consiste à prendre des copies redondantes des données déjà existantes et à les unifier à nouveau. COW est un moyen de minimiser la duplication, ce n'est pas la déduplication.
ormaaj
@ormaaj - je pense que c'est une chose étrange à dire: la déduplication ne consiste pas à minimiser la duplication.
mikeserv

Réponses:

12

Il y a deux options:

  1. cp --reflink=always
  2. cp --reflink=auto

Le second est presque toujours préférable au premier. En utilisantauto signifie que cela reviendra à faire une copie vraie si le système de fichiers ne prend pas en charge la réflexion (par exemple, ext4 ou la copie sur un partage NFS). Avec la première option, je suis presque sûr qu'elle échouera et cessera de copier.

Si vous l'utilisez dans le cadre d'un script qui doit être robuste face à des conditions non idéales, autocela vous servira mieux.

eestrada
la source
êtes-vous Eric Estrada?
mikeserv
2
@mikeserv Lol, non. Mon prénom est Ethan. Ce serait drôle cependant; Eric Estrada: acteur de jour, administrateur système de nuit. Croyez-le ou non, c'est la première fois en plus d'une décennie de passer par la poignée en ligne eestradaque quelqu'un me pose cette question.
eestrada
2
bien sûr, Eric. de toute façon, bonne réponse.
mikeserv