mirror of
https://github.com/m8tin/cis.git
synced 2025-12-06 15:58:26 +01:00
better structure
This commit is contained in:
33
script/host/zfs/snapshot/snapshot-cleanup.sh
Normal file
33
script/host/zfs/snapshot/snapshot-cleanup.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
MIN_MIN=$(date --date="- 5 minutes" -u "+%Y%m%d%H%M")
|
||||
HOUR_MIN=$(date --date="- 1 days" -u "+%Y%m%d%H")
|
||||
DAY_MIN=$(date --date="- 7 days" -u "+%Y%m%d")
|
||||
MONTH_MIN=$(date --date="- 3 years" -u "+%Y%m")
|
||||
|
||||
zfs list -Hr -o name -t snapshot -r "zpool1/persistent" | grep -E "^zpool1/persistent/[a-zA-Z0-9_-]+@(SNAPHOURLY|SNAPDAILY|SNAPMONTHLY|SNAPMINUTLY)_[0-9]{6,12}$" | while read SNAPSHOT; do
|
||||
SNAPSHOT_TIME=$(echo "$SNAPSHOT" | grep -oE "[0-9]+$")
|
||||
if [[ ${#SNAPSHOT_TIME} == 12 && "$SNAPSHOT_TIME" < "${MIN_MIN}" ]]; then
|
||||
zfs destroy "${SNAPSHOT}"
|
||||
fi
|
||||
if [[ ${#SNAPSHOT_TIME} == 10 && "$SNAPSHOT_TIME" < "${HOUR_MIN}" ]]; then
|
||||
zfs destroy "${SNAPSHOT}"
|
||||
fi
|
||||
if [[ ${#SNAPSHOT_TIME} == 8 && "${SNAPSHOT_TIME}" < "${DAY_MIN}" ]]; then
|
||||
zfs destroy "${SNAPSHOT}"
|
||||
fi
|
||||
if [[ ${#SNAPSHOT_TIME} == 6 && "${SNAPSHOT_TIME}" < "${MONTH_MIN}" ]]; then
|
||||
zfs destroy "${SNAPSHOT}"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
MONTH_MIN_QA=$(date --date="- 1 month" -u "+%Y%m")
|
||||
|
||||
zfs list -Hr -o name -t snapshot -r "zpool1/persistent" | grep -E "^zpool1/persistent/[a-zA-Z0-9_-]+-qa@SNAPMONTHLY_[0-9]{6}$" | while read SNAPSHOT_QA; do
|
||||
SNAPSHOT_TIME_QA=$(echo "$SNAPSHOT_QA" | grep -oE "[0-9]+$")
|
||||
if [[ "${SNAPSHOT_TIME_QA}" < "${MONTH_MIN_QA}" ]]; then
|
||||
zfs destroy "${SNAPSHOT_QA}"
|
||||
fi
|
||||
done
|
||||
|
||||
13
script/host/zfs/snapshot/snapshot-minutly.sh
Normal file
13
script/host/zfs/snapshot/snapshot-minutly.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
|
||||
|
||||
_TIMESTAMP="$(date -u "+%Y%m%d%H%M")"
|
||||
_ZFS_FILESYSTEM="${1:?"Missing first parameter ZFS_FILESYSTEM."}"
|
||||
echo "${_ZFS_FILESYSTEM}" | grep -E '\-prod$' &> /dev/null \
|
||||
&& zfs snapshot "${_ZFS_FILESYSTEM}@SNAPMINUTLY_${_TIMESTAMP}" \
|
||||
&& exit 0
|
||||
|
||||
echo "Snapshot konnte nicht angelegt werden:"
|
||||
echo " - ${_ZFS_FILESYSTEM}@SNAPMINUTLY_${_TIMESTAMP}"
|
||||
echo " (Minuten-Snapshots sollen nur auf 'PROD'-Containeren angelegt werden, sodass diese dann syncronisiert werden)"
|
||||
exit 1
|
||||
57
script/host/zfs/snapshot/snapshot.sh
Normal file
57
script/host/zfs/snapshot/snapshot.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
HOUR=$(date -u "+%Y%m%d%H")
|
||||
DAY=${HOUR:0:8}
|
||||
MONTH=${HOUR:0:6}
|
||||
HOSTOWNER=$(cat /invra/hostowner)
|
||||
if [ ! -d /tmp/locks ]; then
|
||||
mkdir /tmp/locks
|
||||
fi
|
||||
|
||||
zfs list -Hr -o name zpool1/persistent | grep -v -- -BACKUP | tail -n +2 | while read DATASET; do
|
||||
CONTAINER=${DATASET#zpool1/persistent/}
|
||||
(
|
||||
flock -n 9 || exit 1
|
||||
|
||||
MODE_FILE="/invra/state/$HOSTOWNER/containers/$CONTAINER/snapshot-mode"
|
||||
HOURLY=1
|
||||
DAILY=1
|
||||
MONTHLY=1
|
||||
|
||||
if [ -f "$MODE_FILE" ]; then
|
||||
grep -i "NONE" "$MODE_FILE" &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
exit
|
||||
fi
|
||||
grep -i "HOURLY" "$MODE_FILE" &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
HOURLY=0
|
||||
fi
|
||||
grep -i "DAILY" "$MODE_FILE" &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
DAILY=0
|
||||
fi
|
||||
grep -i "MONTHLY" "$MODE_FILE" &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
MONTHLY=0
|
||||
fi
|
||||
fi
|
||||
SNAPSHOT_HOUR="${DATASET}@SNAPHOURLY_${HOUR}"
|
||||
SNAPSHOT_DAY="${DATASET}@SNAPDAILY_${DAY}"
|
||||
SNAPSHOT_MONTH="${DATASET}@SNAPMONTHLY_${MONTH}"
|
||||
|
||||
zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_HOUR}$" > /dev/null
|
||||
if [[ $? -ne 0 && $HOURLY -eq 1 ]]; then
|
||||
zfs snapshot "${SNAPSHOT_HOUR}"
|
||||
fi
|
||||
|
||||
zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_DAY}$" > /dev/null
|
||||
if [[ $? -ne 0 && $DAILY -eq 1 ]]; then
|
||||
zfs snapshot "${SNAPSHOT_DAY}"
|
||||
fi
|
||||
|
||||
zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_MONTH}$" > /dev/null
|
||||
if [[ $? -ne 0 && $MONTHLY -eq 1 ]]; then
|
||||
zfs snapshot "${SNAPSHOT_MONTH}"
|
||||
fi
|
||||
) 9>>/tmp/locks/snapshot.${CONTAINER}.lock
|
||||
done
|
||||
Reference in New Issue
Block a user