Below is my list of ZFS volumes and
snapshots, as well as the origin and clone for
each.
I want to delete all the
snapshots, but keep all the filesystems. How can I do
this?
I have tried zfs
followed by attempting to delete each filesystem for many different
promote
combinations of the filesystems. This shifts around where the snapshots "live"; for
instance, zfs promote tank/containers/six
moves snapshot
F
from tank/containers/three@F
to
tank/containers/six@F
. The live data in the filesystem isn't
modified (which is what I want!), but I still can't delete the snapshot (which is not
what I want).
A typical zfs
attempt tells me it has dependent clones, some of which (the
destroy
snapshots) I do want to destroy, but others of which (the
filesystems) I do not want to
destroy.
For
example.
# 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
In
the above example, I don't want to destroy tank/containers/five
or tank/containers/two
, but if I zfs
five and two, I still can't destroy any snapshots. Is there a
promote
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
AFAIK
you're going to have to copy those datasets out to new, independent datasets. Promotion
just switches around which dataset is "parent" vs "child", it doesn't actually break any
dependencies if you want to keep both.
Eg:
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
Take
your time and be sure of what you're doing. Especially with the actual
deletions.
This replication is block-for-block,
so if there's any significant data in there it WILL take a while. The
pv
part is strictly optional, but will give you a progress bar
to look at while you wait.
Also maybe consider
syncoid to
automate the replication tasks, now and in the future. (Obligatory: I am the original
author of this tool, which is GPLv3 licensed and free to
use.)
Comments
Post a Comment