ZFS supprimer des instantanés avec des interdépendances et des clones

9

Vous trouverez ci-dessous ma liste de volumes et d'instantanés ZFS, ainsi que l'origine et le clone de chacun.

Je veux supprimer tous les instantanés, mais conserver tous les systèmes de fichiers. Comment puis-je faire ceci?

J'ai essayé zfs promotesuivi en essayant de supprimer chaque système de fichiers pour de nombreuses combinaisons différentes des systèmes de fichiers. Cela change où les instantanés "vivent"; par exemple, zfs promote tank/containers/sixdéplace l'instantané Fde tank/containers/three@Fvers tank/containers/six@F. Les données en direct dans le système de fichiers ne sont pas modifiées (c'est ce que je veux!), Mais je ne peux toujours pas supprimer l'instantané (ce qui n'est pas ce que je veux).

Une typique zfs destroytentative me dit qu'il a des clones dépendants, dont certains (les clichés) Je ne veux détruire, mais d' autres dont (les systèmes de fichiers) Je ne veulent détruire.

Par exemple.

# zfs destroy tank/containers/six@A
cannot destroy 'tank/containers/six@A': snapshot has dependent clones
use '-R' to destroy the following datasets:
tank/containers/five
tank/containers/two@B
tank/containers/two

Dans l'exemple ci-dessus, je ne veux pas détruire tank/containers/fiveou tank/containers/two, mais si j'ai zfs promotecinq et deux, je ne peux toujours pas détruire les instantanés. Y a-t-il une solution?

# zfs list -t all -o name,origin,clones
NAME                         ORIGIN                       CLONES
tank                         -                            -
tank/containers              -                            -
tank/containers/five         tank/containers/two@B        -
tank/containers/four         tank/containers/six@C        -
tank/containers/one          -                            -
tank/containers/one@E        -                            tank/containers/three
tank/containers/two          tank/containers/six@A        -
tank/containers/two@B        -                            tank/containers/five
tank/containers/six          tank/containers/three@F      -
tank/containers/six@A        -                            tank/containers/two
tank/containers/six@C        -                            tank/containers/four
tank/containers/three        tank/containers/one@E        -
tank/containers/three@F      -                            tank/containers/six
allquixotic
la source

Réponses:

9

AFAIK, vous devrez copier ces ensembles de données vers de nouveaux ensembles de données indépendants. La promotion change simplement autour de quel ensemble de données est "parent" vs "enfant", elle ne casse en fait aucune dépendance si vous voulez garder les deux.

Par exemple:

root@box~# zfs snapshot tank/containers/six@1 
root@box~# zfs send tank/containers/six@1 | pv | zfs receive tank/containers/newsix  
root@box~# zfs destroy -R tank/containers/six  
root@box~# zfs destroy tank/containers/three@F 
root@box~# zfs rename tank/containers/newsix tank/containers/six

Prenez votre temps et soyez sûr de ce que vous faites. Surtout avec les suppressions réelles.

Cette réplication est bloc par bloc, donc s'il y a des données importantes dedans, cela prendra du temps. La pvpartie est strictement facultative, mais vous donnera une barre de progression à regarder pendant que vous attendez.

Peut - être envisager syncoid pour automatiser les tâches de réplication, maintenant et dans l'avenir. (Obligatoire: je suis l'auteur original de cet outil, qui est sous licence GPLv3 et gratuit à utiliser.)

Jim Salter
la source
Jim, veuillez divulguer votre affiliation avec syncoid. D'après les règles du site: "Publiez de bonnes réponses pertinentes et si certaines (mais pas toutes) concernent votre produit ou votre site Web, ce n'est pas grave. Cependant, vous devez divulguer votre affiliation dans vos réponses."
Costin Gușă
Heureux de, Costin - ne réalisait pas que c'était un gros problème, car je me connectais directement au projet GitHub repo et ne respirais pas un mot sur les services de conseil.
Jim Salter