From f9cb3f3daa91f3c5c643f735826b6f857a0dc677 Mon Sep 17 00:00:00 2001 From: hoangvv Date: Tue, 31 Dec 2024 10:38:39 +0700 Subject: [PATCH] Add ZFS-Snapshot --- ZFS-Snapshot | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 ZFS-Snapshot diff --git a/ZFS-Snapshot b/ZFS-Snapshot new file mode 100644 index 0000000..cf1088a --- /dev/null +++ b/ZFS-Snapshot @@ -0,0 +1,30 @@ +#!/bin/bash + +# Tên dataset +DATASET="$1" +RETAIN="$2" +# Định dạng tên snapshot: dataset@autosnap-YYYY-MM-DD-HH:MM:SS +SNAPSHOT_NAME="${DATASET}@autosnap-$(date +'%Y-%m-%d-%H:%M:%S')" +# Tạo snapshot mới +echo "Creating snapshot: $SNAPSHOT_NAME" +if ! zfs snapshot "$SNAPSHOT_NAME"; then + echo "Error creating snapshot: $SNAPSHOT_NAME" + exit 1 +fi +# Liệt kê tất cả snapshot có "autosnap" trong tên và sắp xếp theo thời gian tạo +SNAPSHOTS=$(zfs list -t snapshot -o name,creation | grep "autosnap" | sort -k2) +# Đếm số lượng snapshot +SNAPSHOT_COUNT=$(echo "$SNAPSHOTS" | wc -l) +# Xóa snapshot cũ nếu vượt quá giới hạn giữ lại +if [ "$SNAPSHOT_COUNT" -gt "$RETAIN" ]; then + echo "Deleting old snapshots..." + SNAPSHOTS_TO_DELETE=$(echo "$SNAPSHOTS" | head -n -"$RETAIN" | cut -d' ' -f1) + for SNAP in $SNAPSHOTS_TO_DELETE; do + echo "Deleting snapshot: $SNAP" + if ! zfs destroy "$SNAP"; then + echo "Error deleting snapshot: $SNAP" + fi + done +else + echo "No snapshots to delete. Total snapshots: $SNAPSHOT_COUNT" +fi