přeskočit na obsah
[JJ]
zpět na snippety
bashproxmoxzfsbashbackup8. 5. 2026

Proxmox ZFS snapshot rotation

Cron skript co bere automatický snapshot rpool/data každé 6 hodin a maže snapshoty starší 7 dní. Lehký, žádné závislosti.

Mám na PXM1 a PXM2 rpool s daty ze všech LXC kontejnerů. Snapshot každých 6 hodin ti zachrání zadek, kdyžs nedopatřením smázl /etc v produkci. (Stalo se. Ne, fakt.)

Skript

bash
#!/usr/bin/env bash
# /usr/local/bin/zfs-snap-rotate.sh
set -euo pipefail

POOL="${1:-rpool/data}"
KEEP_DAYS="${2:-7}"
PREFIX="auto"

TS=$(date -u +%Y%m%d-%H%M%S)
SNAP_NAME="${POOL}@${PREFIX}-${TS}"

# Vytvoř nový snapshot (rekurzivně přes všechny child datasety)
zfs snapshot -r "${SNAP_NAME}"

# Smaž snapshoty starší než KEEP_DAYS
CUTOFF=$(date -u -d "${KEEP_DAYS} days ago" +%s)

zfs list -H -t snapshot -o name,creation -p | \
  awk -v cutoff="${CUTOFF}" -v prefix="${PREFIX}" '
    $1 ~ prefix && $2 < cutoff { print $1 }
  ' | while read -r snap; do
    echo "[remove] ${snap}"
    zfs destroy "${snap}"
  done

Cron

bash
# crontab -e
0 */6 * * * /usr/local/bin/zfs-snap-rotate.sh rpool/data 7 >> /var/log/zfs-snap.log 2>&1

Variace

Pro PBS sync přidej před zfs destroy push do proxmox-backup-client:

bash
proxmox-backup-client backup data.pxar:/data \
  --repository root@pam!api@pbs:rpool-snaps

Pro per-CT snapshoty (Proxmox je dělá taky, ale jsou na úrovni LXC), iteruj přes pct list. Pohoda.