J'essaie de faire des copies de vache de certains fichiers / répertoires, mais de plusieurs façons que je connais, toutes semblent sous-optimales.
Par exemple, btrfs peut, avec l'utilisation de cp --reflink=auto
générer rapidement des copies de vache de fichiers.
Ce que j'ai essayé:
- Liens symboliques: Pas bon. Fichier renommé, lien brisé.
- Liens physiques: Mieux, mais toujours pas bons. Les modifications apportées à un fichier changeront l'autre, et je ne veux pas nécessairement que l'autre fichier soit modifié.
- Créez un instantané de l'ensemble de données, puis clonez l'instantané: cela peut fonctionner, mais pas bien. Souvent, je ne recherche pas une copie de l'ensemble de données ni les copies pour agir comme un autre ensemble de données. Ensuite, il y a les relations parent / enfant entre le clone / l'instantané / l'original, qui, si je comprends bien, sont difficiles, voire impossibles à briser.
- En utilisant
zfs send/receive
et activé la déduplication, répliquez l'ensemble de données dans un nouvel ensemble de données: cela évite les relations parent / enfant d'utiliser un clone, mais crée toujours inutilement un autre ensemble de données, et souffre toujours de la lenteur impliquée dans les fichiers devant être lus à 100% et les blocs ont de nouveau référencé au lieu d'être écrits. - Copiez les fichiers et laissez dedup faire son travail: cela fonctionne, mais est lent car les fichiers doivent être lus à 100%, puis les blocs référencés à nouveau au lieu d'écrire.
La lenteur de l'envoi / de la réception zfs et de la copie ou de la synchronisation physique est encore exacerbée car la plupart des choses sont stockées compressées et doivent être décompressées pendant la lecture, puis compressées avant que la déduplication ne fasse référence à des blocs en double.
Dans toutes mes recherches, je n'ai rien trouvé qui ressemble à distance à la simplicité de --reflink dans btrfs.
Alors, existe-t-il un moyen de créer des copies de vache dans ZFS? Ou est-ce que la copie «physique» et le fait que le dédoublage fasse son travail sont la seule vraie option?
cp --reflink=auto
.L'option 5 est la meilleure.
En ce qui concerne les jeux de données parent / enfant dans l'option 3, vous pouvez promouvoir un clone et il ne sera plus un enfant du jeu de données cloné. Il n'utilisera toujours pas de blocs supplémentaires.Edit: A noté que cela ne fait qu'inverser la relation parent / enfant, pas la détruire.En ce qui concerne les choses compressées / cryptées et qui ralentissent la copie, c'est complètement faux. Votre processeur est beaucoup plus rapide que votre périphérique bloc (même si vous utilisez des SSD). Juste pour quelques exemples de chiffres, disons qu'il faut 10 secondes pour lire un bloc, mais il ne faut qu'une seconde pour le décompresser et 2 secondes pour le décrypter. Le bloc 1 est lu en 10 secondes et envoyé au CPU. Le CPU commence la décompression et le décryptage pendant que le disque commence la lecture du bloc 2. Le CPU terminera sa tâche en 3 secondes, puis passera les 7 prochaines secondes à attendre sur le disque. Le disque a quant à lui passé exactement le même temps à lire ces deux blocs (20 secondes), que les blocs soient compressés ou non.
De même lors de l'écriture, seul le premier bloc est retardé. Le CPU compresse / chiffre le bloc 1 et l'envoie sur le disque. Pendant que le disque écrit le bloc 1, le CPU commencera à compresser / chiffrer les blocs suivants. Le CPU va parcourir les blocs beaucoup plus rapidement que le disque ne peut les écrire, donc ce n'est pas un problème. (Oui, c'est plus complexe que cela, mais c'est l'essentiel.)
Désolé pour l'explication trop longue d'un point mineur dans votre question, mais je voulais clarifier cette idée fausse.
la source