{
  "slug": "zfs-deferred-snapshot-destruction",
  "term": "ZFS deferred snapshot destruction",
  "aliases": [
    "zfs destroy -d",
    "ZFS defer_destroy"
  ],
  "definition": "ZFS deferred snapshot destruction marks an ineligible snapshot for automatic deletion once its holds and clone dependencies no longer prevent removal.",
  "note": "Request versus waiting: zfs destroy -d can delete an eligible snapshot immediately; it is not a preview command. A pending snapshot remains visible and can acquire new holds or clones. [destroy]\n\nPending status: defer_destroy is read-only. Adding a hold does not cancel the pending request. Inspect userrefs, hold tags and clones together; visibility alone is not a retention guarantee. [properties] [destroy]\n\nRemoval triggers: releasing the final hold can delete a pending snapshot with no remaining clones. Destroying the final dependent clone can delete its pending origin when no user holds remain. These paths are source-verified in OpenZFS 2.3.0; active internal long holds can make the release check return EBUSY. [userhold-source] [destroy-source]\n\nPromotion is different: it reverses the origin/clone relationship and transfers snapshot ownership, rather than removing every dependency. Reinspect the snapshot under its new owner. A releasable hold is not administrator-resistant retention. [promote] [allow]",
  "related": [
    "zfs-snapshot-hold",
    "zfs-clone",
    "zfs-clone-promotion",
    "snapshot"
  ],
  "citations": [
    {
      "id": "destroy",
      "title": "OpenZFS v2.3: zfs-destroy(8), snapshot eligibility and -d versus -n",
      "url": "https://openzfs.github.io/openzfs-docs/man/v2.3/8/zfs-destroy.8.html",
      "accessed": "2026-10-22"
    },
    {
      "id": "properties",
      "title": "OpenZFS v2.3: zfsprops(7), read-only defer_destroy, userrefs and clones",
      "url": "https://openzfs.github.io/openzfs-docs/man/v2.3/7/zfsprops.7.html",
      "accessed": "2026-10-22"
    },
    {
      "id": "userhold-source",
      "title": "OpenZFS zfs-2.3.0: dsl_userhold.c, release check and sync paths",
      "url": "https://github.com/openzfs/zfs/blob/zfs-2.3.0/module/zfs/dsl_userhold.c",
      "accessed": "2026-10-22"
    },
    {
      "id": "destroy-source",
      "title": "OpenZFS zfs-2.3.0: dsl_destroy.c, immediate snapshot and deferred origin destruction",
      "url": "https://github.com/openzfs/zfs/blob/zfs-2.3.0/module/zfs/dsl_destroy.c",
      "accessed": "2026-10-22"
    },
    {
      "id": "promote",
      "title": "OpenZFS v2.3: zfs-promote(8), reversed dependency and transferred snapshots",
      "url": "https://openzfs.github.io/openzfs-docs/man/v2.3/8/zfs-promote.8.html",
      "accessed": "2026-10-22"
    },
    {
      "id": "allow",
      "title": "OpenZFS v2.3: zfs-allow(8), release permission may destroy a snapshot",
      "url": "https://openzfs.github.io/openzfs-docs/man/v2.3/8/zfs-allow.8.html",
      "accessed": "2026-10-22"
    }
  ],
  "advantages": [],
  "limitations": [],
  "status": "shipping",
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-22",
  "provenance": [
    "Documentation review of OpenZFS v2.3 and source inspection of tag zfs-2.3.0; no live pool, deletion or recovery experiment was performed."
  ]
}
