66 lines
1.4 KiB
Bash
Executable file
66 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
if [ $# -ne 1 ]
|
|
then
|
|
echo "USAGE: $0 <tank>"
|
|
exit 1
|
|
fi
|
|
|
|
TANK="$1"
|
|
|
|
IS_TANK_EXIST=$(zfs list | grep -c "tank/${TANK} ")
|
|
|
|
if [ "${IS_TANK_EXIST}" -ne 1 ]
|
|
then
|
|
echo "${TANK} n'existe pas. Arrêt."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
TODAY=$(date "+%Y-%m-%d")
|
|
|
|
# On ne garde que les 365 dernières snapshots ZFS
|
|
LIMIT=$(date -d "${TODAY} -1year" "+%Y-%m-%d")
|
|
LIMIT_EPOCH=$(date -d "${LIMIT}" "+%s")
|
|
|
|
while true
|
|
do
|
|
|
|
# On vérifie qu'il existe au moins 365 backups
|
|
COUNT=$(zfs list -t snapshot \
|
|
| grep -c "tank/${TANK}")
|
|
|
|
if [ "${COUNT}" -le 365 ]
|
|
then
|
|
echo "Il y a moins de 366 backups. Fin."
|
|
break
|
|
fi
|
|
|
|
# On récupère la plus vieille snapshot
|
|
OLDEST_SNAPSHOT=$(zfs list -t snapshot \
|
|
| grep "tank/${TANK}" \
|
|
| cut -d' ' -f1 | cut -d'@' -f2 \
|
|
| sort | head -n1)
|
|
|
|
OLDEST_SNAPSHOT_EPOCH=$(date -d "${OLDEST_SNAPSHOT}" "+%s")
|
|
|
|
# Sanity-check: Si la plus vieille backup est celle d'il y a moins d'un an: On sort.
|
|
if [ "${OLDEST_SNAPSHOT_EPOCH}" -ge "${LIMIT_EPOCH}" ]
|
|
then
|
|
echo "La backup locale ${TANK} ${OLDEST_SNAPSHOT} est suffisament récente. Fin."
|
|
break
|
|
fi
|
|
|
|
# Sinon, on supprime la plus vieille snapshot.
|
|
echo "Suppression de la backup ${TANK} ${OLDEST_SNAPSHOT}."
|
|
sleep 2
|
|
|
|
zfs destroy "tank/${TANK}@${OLDEST_SNAPSHOT}"
|
|
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "La suppression s'est mal déroulée. Arrêt."
|
|
exit 1
|
|
fi
|
|
|
|
done
|