Replace the Python Textual app (tui.py) with zfs-snapshot.sh, a single-file whiptail TUI matching the house style of the sibling scripts in this folder (sudo re-exec header, msg/yesno/run_and_show helpers, action functions, a menuconfig-style main menu). Keeps all prior functionality: - Snapshots: list / create / delete / rollback - Schedules: cron auto-snapshots with auto-prune (keep last N) + snapshot-now - Datasets: usage view - LXC Mounts: pct bind-mountpoint add/remove (hidden when pct is absent) - Replication: full/incremental zfs send | recv - Scrub: start / stop / schedule per pool Cron entries are kept in a single owner file (/etc/cron.d/pve-zfs-tui); helper scripts are generated on demand. README rewritten to match. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
proxmox-zfs-snapshot-management-script
An interactive, menuconfig-style (whiptail TUI) script to manage ZFS snapshots and related storage tasks on a Proxmox VE host — snapshots, scheduled auto-snapshots, datasets, LXC bind-mountpoints, dataset replication, and pool scrubs — all from one keyboard-driven menu.
Features
- Snapshots — list, create, delete, and roll back ZFS snapshots
(rollback uses
zfs rollback -r, with a clear destructive-action warning). - Schedules — cron-driven auto-snapshots per dataset with auto-pruning (keep last N). Includes a "snapshot now" action that reuses the same helper. Frequency presets (hourly … weekly) plus a custom cron expression.
- Datasets — view all ZFS datasets with
used/available/ mountpoint. - LXC Mounts — view, add, and remove bind-mountpoints on LXC
containers via
pct(auto-picks the next freempNslot). - Replication —
zfs send | recva dataset to another dataset, choosing full vs incremental automatically based on the latest common snapshot. - Scrub — start / stop a scrub and schedule periodic scrubs per pool.
All cron entries this tool manages live in a single owner file
(/etc/cron.d/pve-zfs-tui), rewritten in full on every change — your other
cron jobs are never touched. Two small helper scripts are installed on demand:
| Path | Purpose |
|---|---|
/usr/local/bin/pve-zfs-snapshot.sh |
snapshot + prune (run by snapshot cron) |
/usr/local/bin/pve-zfs-replicate.sh |
full/incremental replication (manual or cron) |
/etc/pve-zfs-tui/replication.tsv |
configured replication source→target pairs |
Requirements
- Proxmox VE host (Debian-based) with ZFS — provides
zfs,zpool, and (for the LXC menu)pct. The non-Proxmox menus work on any ZFS-on-Linux box; the LXC Mounts menu is hidden whenpctis absent. root— the script re-execs itself withsudoautomatically.whiptail(installed automatically if missing).
Usage
chmod +x zfs-snapshot.sh
./zfs-snapshot.sh
The main menu lets you drill into each area; every destructive action (delete, rollback, schedule removal, mount removal) asks for confirmation, and every command shows its output and exit code in a scrollable box.
Scheduling an auto-snapshot
-
Schedules → Add / update a schedule.
-
Pick the dataset, choose a frequency (or enter a custom cron expression), and set keep last N.
-
The schedule is written to
/etc/cron.d/pve-zfs-tui, e.g.:# Snapshot schedules (auto-prune keeps last N) 0 3 * * * root /usr/local/bin/pve-zfs-snapshot.sh RAID1_1TB/data 7On each run it creates
DATASET@auto-YYYYMMDD-HHMMSSand destroys the oldestauto-*snapshots beyond the keep limit. Manual snapshots (any name not starting withauto-) are never auto-pruned.
Safety notes
- Rollback destroys all newer snapshots and changes since the chosen snapshot. The TUI warns before confirming.
- LXC mount changes may require the container to be stopped (Proxmox warns).
- Removing a replication target only forgets the pair — it does not destroy the target dataset.
- The cron file is owned entirely by this tool; edit schedules via the menus.
License
MIT