blob: 514b9ab893632f56c2c47d22a2449fe228a53066 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#!/bin/sh
# backup garbage collector
# keep:
# 1 backup per year the previous years
hd=3600 # hour duration: 60s * 60
h12=43200 # 12h
dd=86400 # day duration: hd * 24
wd=604800 # week duration: dd * 7
md=2592000 # month duration: dd * 30
yd=31557600 # year duration: dd * 365.25
now=$(date +%Y%m%d_%H%M%S)
date2ts() {
t=$1; r=${t#????}; Y=${t%$r}
t=$r; r=${t#??}; m=${t%$r}
t=$r; r=${t#??}; d=${t%$r}
t=${r#_}; r=${t#??}; H=${t%$r}
t=$r; r=${t#??}; M=${t%$r}
S=${t#??}
date -d "$Y-$m-$d $H:$M:$S" +%s
}
# timestamp to date
ts2date() { date -d @$ts +%Y%m%d_%H%M%S; }
tsn=$(date2ts $now)
# minimal retention delay, according to age
retention_delay() {
d=$(($tsn - $1))
if (($d < $h12)); then R1=0
# keep all backups in the last 12 hours
elif (($d < $dd)); then R1=$hd
# keep 1 backup per hour in the last day
elif (($d < $wd)); then R1=$dd
# keep 1 backup per day in the last week
elif (($d < $md)); then R1=$wd
# keep 1 backup per week in the last month
elif (($d < $yd)); then R1=$md
# keep 1 backup per month in the last year
else R1=$yd
# keep 1 backup per year in the previous years
fi
echo $R1
}
# sorted list of backups, most recent first
lbu=$(ssh bip ls -rv /home/backup/swift)
for d in $lbu; do
tsc=$(date2ts $d)
if ! [ "$tsp" ]; then
echo keep $d
tsp=$tsc
continue
fi
mrd=$(retention_delay $tsp)
dp=$(($tsp - $tsc))
if (($dp < $mrd)); then
echo "delete $d"
else
echo "keep $d"
tsp=$tsc
fi
done
|