Comment déplacer des fichiers d'un système de fichiers zfs vers un autre système de fichiers zfs dans le même pool?

17

J'ai deux systèmes de fichiers dans le même pool zfs, /mnt/fs_aet /mnt/fs_b. Je souhaite déplacer environ 1 To de données de fs_avers fs_b. Mais quand je:

mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/

à ma grande surprise, il commence à copier les fichiers bloc par bloc. Étant donné le temps qu'il a fallu pour déplacer un fichier de 2 Go, il semble que cette opération prendrait des jours de thrashing massif pour se terminer.

Il doit y avoir un moyen beaucoup plus intelligent et plus rapide de le faire, non?

Fred Hamilton
la source

Réponses:

22

(cela a commencé comme un commentaire mais est devenu trop long, c'est maintenant une réponse)

Malheureusement, la réponse est non". Il n'y a pas de moyen plus rapide ou plus intelligent de le faire.

Les systèmes de fichiers ZFS (même s'ils se trouvent sur le même pool) sont des systèmes de fichiers distincts. Ni mvaucun autre outil ne peut simplement déplacer les pointeurs de bloc ou quoi que ce soit afin que les fichiers qui étaient allumés fs_asoient maintenant activés fs_b.

(BTW, plusieurs partitions formatées ou volumes LVM sur le même disque ou baie RAID sont également des systèmes de fichiers distincts et sont également mvchargés de les copier-supprimer)

Ce problème a été soulevé plusieurs fois au fil des ans (avec des discussions sur la création d'un outil pour faire ce que vous voulez) et si je comprends bien, la principale difficulté qui le place dans le panier trop dur est la question de savoir comment gérer les instantanés - s'il y a des instantanés de fs_a, les blocs seraient dans les deux systèmes de fichiers en même temps. Il en va de même pour les fichiers qui ont des liens physiques.

Je l'ai rencontré moi-même de nombreuses fois (par exemple lors du déplacement de fichiers entre des ensembles de données comme vous l'avez fait, ou lorsque j'ai besoin de convertir un sous-répertoire en fs), et je viens d'apprendre à supporter les inconvénients. Il peut s'agir d'un PITA majeur.

si fs_best vide ou n'existe pas encore et que vous voulez déplacer l' ensemble contenu fs_aà fs_b(et pas seulement certains ou même la plupart des fichiers et répertoires) que vous pouvez utiliser zfs renamepour renommer fs_aà fs_b. Je soupçonne cependant que cela n'est pas pertinent pour votre situation.

Il y a un problème ouvert à ce sujet pour ZFSOnLinux à https://github.com/zfsonlinux/zfs/issues/2991

Je n'ai pas cherché mais je m'attendrais à ce qu'OpenZFS en amont et même Sun / Oracle ZFS aient probablement des rapports de bogues / demandes de fonctionnalités similaires.

BTW, voir également /server/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume

cas
la source
3
Merci pour la réponse complète. J'apprécie la suggestion de changement de nom, mais comme vous pensez que j'ai encore plus de données sur ce que je ne veux pas sur b. Au moins, je peux continuer maintenant et copier les fichiers via un disque tampon pour au moins éliminer le thrashing.
Fred Hamilton du