pve保留6个快照的脚本,保留日快照、周快照、月快照各2个。
创建定时任务crontab
30 1 * * * bash /usr/local/bin/snapshot.sh
编辑/usr/local/bin/snapshot.sh
#!/bin/bash
#功能:保留日快照、周快照、月快照各2个
# TODO 列出要保存快照的QVMIDs
qvmids=(100 101 102 103 104)
# 获取今天的日期
today=$(date +%Y-%m-%d)
# 把qm命令所在的路径加入PATH
PATH=$PATH:/usr/sbin/
# 创建快照,删除多余快照
manage_snapshot() {
id=$1
# 如果今天不是周一,也不是每月的第一天,则创建日快照,删除多余日快照
if [ "$(date +%u)" -ne 1 ] && [ "$(date +%d)" -ne 01 ]; then
qm listsnapshot $id | grep -q "daily-${today}" || { qm snapshot $id "daily-${today}" && echo "add $id daily-${today}" >> /var/log/snapshot.log; }
snapshots=($(qm listsnapshot $id | grep -E 'daily-' | awk '{print $2}' | sort -r))
if [ ${#snapshots[@]} -gt 2 ]; then
for snapshot in "${snapshots[@]:2}"; do
qm delsnapshot $id "$snapshot" && echo "del $id $snapshot" >> /var/log/snapshot.log
done
fi
fi
# 如果今天是星期一,并且不是每月的第一天,则创建新的快照,删除多余周快照
if [ "$(date +%u)" -eq 1 ] && [ "$(date +%d)" -ne 01 ]; then
qm listsnapshot $id | grep -q "weekly-${today}" || { qm snapshot $id "weekly-${today}" && echo "add $id weekly-${today}" >> /var/log/snapshot.log; }
snapshots=($(qm listsnapshot $id | grep -E 'weekly-' | awk '{print $2}' | sort -r))
if [ ${#snapshots[@]} -gt 2 ]; then
for snapshot in "${snapshots[@]:2}"; do
qm delsnapshot $id "$snapshot" && echo "del $id $snapshot" >> /var/log/snapshot.log
done
fi
fi
# 如果今天是每月的第一天,则创建新的快照,删除多余月快照
if [ "$(date +%d)" -eq 01 ]; then
qm listsnapshot $id | grep -q "monthly-${today}" || { qm snapshot $id "monthly-${today}" && echo "add $id monthly-${today}" >> /var/log/snapshot.log; }
snapshots=($(qm listsnapshot $id | grep -E 'monthly-' | awk '{print $2}' | sort -r))
if [ ${#snapshots[@]} -gt 2 ]; then
for snapshot in "${snapshots[@]:2}"; do
qm delsnapshot $id "$snapshot" && echo "del $id $snapshot" >> /var/log/snapshot.log
done
fi
fi
}
echo "------------"`date`"------------" >> /var/log/snapshot.log
for qvmid in ${qvmids[@]}; do
manage_snapshot $qvmid
done
874






