mirror of
https://github.com/m8tin/cis.git
synced 2025-12-06 07:48:26 +01:00
54 lines
1.7 KiB
Bash
54 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
BACKUPHOST=${1:?"BACKUPHOST missing"}
|
|
CONTAINER=${2:?"CONTAINER missing"}
|
|
BACKUPHOST=$(echo $1 | sed -E 's|[^a-zA-Z0-9._-]*||g')
|
|
CONTAINER=$(echo $2 | sed -E 's|[^a-zA-Z0-9_-]*||g')
|
|
LAST_SNAPSHOT=$(echo $3 | sed -E 's|[^a-zA-Z0-9._:-]*||g')
|
|
NEW_SNAPSHOT=$(date -u "+%Y-%m-%d_%H:%M:%S")
|
|
|
|
if [[ "${LAST_SNAPSHOT}" == "RESUME" ]]; then
|
|
RESUME_TOKEN=$(echo $4 | sed -E 's|[^a-zA-Z0-9._:-]*||g')
|
|
zfs send -t "${RESUME_TOKEN}"
|
|
exit
|
|
fi
|
|
|
|
DATASET="zpool1/persistent/$CONTAINER"
|
|
SNAPSHOT_PREFIX="${DATASET}@SYNC_${BACKUPHOST}_"
|
|
LAST_SNAPSHOT_NAME="${SNAPSHOT_PREFIX}${LAST_SNAPSHOT}"
|
|
NEW_SNAPSHOT_NAME="${SNAPSHOT_PREFIX}${NEW_SNAPSHOT}"
|
|
SNAPSHOT_FOUND=""
|
|
|
|
# Existiert der Snapshot?
|
|
while read -r ZEILE
|
|
do
|
|
if [[ "$ZEILE" == "$LAST_SNAPSHOT_NAME" ]]; then
|
|
SNAPSHOT_FOUND="1"
|
|
continue
|
|
fi
|
|
done < <(zfs list -H -o name -s name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}")
|
|
|
|
# Falls ja, alle anderen Snapshots wegräumen - eine frühere Version des Skripts hat hier nur die Älteren weggeräumt. Das führt allerdings zum Vollmüllen
|
|
# mit neueren Snapshots, wenn der Sync immer wieder fehlschlägt - im Einzelfall bis zur Unbenutzbarkeit des Senders
|
|
if [[ "${SNAPSHOT_FOUND}x" == "1x" ]]; then
|
|
while read -r ZEILE
|
|
do
|
|
if [[ "$ZEILE" == "$LAST_SNAPSHOT_NAME" ]]; then
|
|
continue
|
|
fi
|
|
zfs destroy "$ZEILE"
|
|
done < <(zfs list -H -o name -s name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}")
|
|
fi
|
|
|
|
zfs snapshot "$NEW_SNAPSHOT_NAME"
|
|
|
|
if [[ "$LAST_SNAPSHOT" != "" ]]; then
|
|
if [[ "$SNAPSHOT_FOUND" == "" ]]; then
|
|
echo "Angeforderter Snapshot '${LAST_SNAPSHOT}' nicht vorhanden"
|
|
exit 1;
|
|
fi
|
|
zfs send -I "${LAST_SNAPSHOT_NAME}" "${NEW_SNAPSHOT_NAME}"
|
|
else
|
|
zfs send "${NEW_SNAPSHOT_NAME}"
|
|
fi
|