Plain-English ZFS snapshot scheduling, retention cleanup, and low-space protection for Unraid. ### 2026.06.21.01 (2026-06-21) - Fixed SSH ZFS send queue space approval so the sender checks remote destination capacity over SSH instead of reading the sender's local ZFS pool state. - Fixed remote ZFS send finalizers so zero-byte coordinator work skips destination space reservation instead of waiting forever on remote capacity checks. - Kept routine ZFS send coordinator jobs out of the visible queue list while keeping failed coordinators visible for troubleshooting. - Removed unfinished spiped controls from the ZFS Send WebGUI while keeping the staged backend/config plumbing in place for future work. ZFS Auto Snapshot adds plain-English scheduling and safe snapshot lifecycle management for Unraid. It keeps recent snapshots, consolidates older ones by day/week, and cleans up for low-space pressure using your configured prefix safeguards. https://forums.unraid.net/topic/197348-plugin-zfs-auto-snapshot/ https://raw.githubusercontent.com/bstone108/zfsautosnapshot-unraid/main/dist/zfs-autosnapshot-2026.06.21.01-noarch-1.txz dfda27ce1fa7f82b0b473c95268ace7d /dev/null 2>&1; then UPGRADEPKG="$(command -v upgradepkg)" elif [[ -x /sbin/upgradepkg ]]; then UPGRADEPKG="/sbin/upgradepkg" elif [[ -x /usr/sbin/upgradepkg ]]; then UPGRADEPKG="/usr/sbin/upgradepkg" else echo "ERROR: upgradepkg not found on system." >&2 exit 1 fi mkdir -p "${PKG_DIR}" download_pkg() { if command -v wget >/dev/null 2>&1; then wget --no-cache -O "${PKG_PATH}" "${PKG_URL}" else curl -fsSL "${PKG_URL}" -o "${PKG_PATH}" fi } verify_md5() { if command -v md5sum >/dev/null 2>&1; then echo "${PKG_MD5} ${PKG_PATH}" | md5sum -c - else [[ "$(md5 -q "${PKG_PATH}")" == "${PKG_MD5}" ]] fi } if [[ ! -f "${PKG_PATH}" ]]; then download_pkg fi if ! verify_md5; then rm -f "${PKG_PATH}" download_pkg verify_md5 fi "${UPGRADEPKG}" --install-new "${PKG_PATH}" if ! ls -1 /var/log/packages 2>/dev/null | grep -q "^${PKG_NAME}"; then echo "Package registration missing after install; retrying with --reinstall." >&2 "${UPGRADEPKG}" --install-new --reinstall "${PKG_PATH}" fi if ! ls -1 /var/log/packages 2>/dev/null | grep -q "^${PKG_NAME}"; then echo "ERROR: ${PKG_NAME} is still missing from /var/log/packages after install." >&2 exit 1 fi if [ -x /usr/local/emhttp/plugins/zfs.autosnapshot/scripts/repair-permissions.sh ]; then /usr/local/emhttp/plugins/zfs.autosnapshot/scripts/repair-permissions.sh || true fi if [ -x /usr/local/emhttp/plugins/zfs.autosnapshot/scripts/sync-cron.sh ]; then /usr/local/emhttp/plugins/zfs.autosnapshot/scripts/sync-cron.sh || true fi ]]> /dev/null 2>&1 || true # Fallback cleanup for installs that missed package DB registration. rm -f /usr/local/sbin/zfs_autosnapshot rm -rf /usr/local/emhttp/plugins/zfs.autosnapshot rm -f /boot/config/plugins/zfs.autosnapshot/zfs-autosnapshot-*-noarch-1.txz rm -f /boot/config/plugins/zfs.autosnapshot/zfs-autosnapshot-*-noarch-1.txz.md5 rmdir /boot/config/plugins/zfs.autosnapshot 2>/dev/null || true ]]>