Untitled

 avatar
unknown
plain_text
a year ago
976 B
12
Indexable
#!/bin/sh

SNAP_PREFIX="autosnap"

get_dataset() {
    zfs list -H -o name,mountpoint | while read ds mp; do
        case "$PWD" in
            "$mp"/* | "$mp")
                echo "$ds"
                return
                ;;
        esac
    done
}

backup() {
    ds=$(get_dataset) || { echo "No dataset found"; return 1; }
    snap="${ds}@${SNAP_PREFIX}-$(date +%Y%m%d-%H%M%S)"
    zfs snapshot "$snap" && echo "Snapshot created: $snap"
}

restore() {
    ds=$(get_dataset) || { echo "No dataset found"; return 1; }
    snap=$(zfs list -t snapshot -H -o name -s creation | grep "^${ds}@${SNAP_PREFIX}-" | tail -n 1)
    [ -z "$snap" ] && { echo "No snapshot found"; return 1; }
    echo "Rollback to $snap? This is destructive. Type 'yes' to confirm:"
    read confirm
    [ "$confirm" = "yes" ] && zfs rollback -r "$snap"
}

case "$1" in
    backup) backup ;;
    restore) restore ;;
    *) echo "Usage: $0 {backup|restore}" ;;
esac
Editor is loading...
Leave a Comment