ZFS elimina instantáneas con interdependencias y clones

9

A continuación se muestra mi lista de volúmenes e instantáneas de ZFS, así como el origen y el clon para cada uno.

Quiero eliminar todas las instantáneas, pero mantener todos los sistemas de archivos. ¿Cómo puedo hacer esto?

He intentado zfs promoteseguir intentando borrar cada sistema de archivos para muchas combinaciones diferentes de los sistemas de archivos. Esto cambia alrededor de donde "viven" las instantáneas; por ejemplo, zfs promote tank/containers/sixmueve la instantánea Fde tank/containers/three@Fa tank/containers/six@F. Los datos en vivo en el sistema de archivos no se modifican (que es lo que quiero), pero todavía no puedo eliminar la instantánea (que no es lo que quiero).

Un típico zfs destroyintento me dice que tiene clones dependientes, algunas de las cuales (las instantáneas) Yo no quiero destruir, pero otros de los cuales (los sistemas de archivos) que no quieren destruir.

Por ejemplo.

# 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

En el ejemplo anterior, no quiero destruir tank/containers/fiveo tank/containers/two, pero si tengo zfs promotecinco y dos, todavía no puedo destruir ninguna instantánea. ¿Hay alguna solución?

# 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
fuente

Respuestas:

9

AFAIK tendrá que copiar esos conjuntos de datos en conjuntos de datos nuevos e independientes. La promoción simplemente cambia qué conjunto de datos es "padre" frente a "hijo", en realidad no interrumpe ninguna dependencia si desea conservar ambos.

P.ej:

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

Tómese su tiempo y asegúrese de lo que está haciendo. Especialmente con las eliminaciones reales.

Esta replicación es bloque por bloque, por lo que si hay datos significativos allí, llevará un tiempo. La pvparte es estrictamente opcional, pero le dará una barra de progreso para mirar mientras espera.

También puede considerar syncoid para automatizar las tareas de replicación, ahora y en el futuro. (Obligatorio: soy el autor original de esta herramienta, que tiene licencia GPLv3 y es de uso gratuito).

Jim Salter
fuente
Jim, por favor revela tu afiliación con syncoid. De las reglas del sitio: "Publique respuestas buenas y relevantes, y si algunas (pero no todas) son sobre su producto o sitio web, está bien. Sin embargo, debe revelar su afiliación en sus respuestas".
Costin Gușă
Felizmente, Costin, no me di cuenta de que era un gran problema, ya que me estaba vinculando directamente al proyecto GitHub repo y no decía nada sobre los servicios de consultoría.
Jim Salter