3 # Snapshot Snapping Scheme
5 # This is a cron bot to manage the snapshots of an nilfs2 file system,
6 # so as to preserve 7 most recent daily, 4 most recent weekly and 12
7 # most recent monthly snapshots, in addition to labelled ones.
9 # The cron bot is expected to run once an hour
12 # daily = .. keep one of the hourly yesterday
13 # weekly = .. keep one of the daily last week
14 # monthly = .. keep one of the daily last month
20 FIVELY="$(date -d '-5 minutes' '+%Y-%m-%d %H:%M:%S')"
21 HOURLY="$(date -d '-1 hour' '+%Y-%m-%d %H:%M:%S')"
22 DAILY="$(date -d '-1 days' '+%Y-%m-%d %H:%M:%S')"
23 MONTHLY="$(date -d '-1 months' '+%Y-%m-%d %H:%M:%S')"
24 WEEKLY="$(date -d '-7 days' '+%Y-%m-%d %H:%M:%S')"
25 YEARLY="$(date -d '-1 years' '+%Y-%m-%d %H:%M:%S')"
27 date "+%Y-%m-%d %H:%M:%S ---- checking" >&2
28 lscp -s | while read CNO DATE TIME REST ; do
30 [ "$CNO" = "CNO" ] && continue
31 if [[ ! "$TS" > "$YEARLY" ]] ; then
32 if [ "$KEEPYY" = "${DATE:0:4}" ] ; then
33 echo "# discard year duplicate $CNO $DATE $TIME" >&2
38 echo "# keep first of year $CNO $DATE $TIME" >&2
42 if [[ ! "$TS" > "$MONTHLY" ]] ; then
43 if [ "$KEEPMM" = "${DATE:0:7}" ] ; then
44 echo "# discard month duplicate $CNO $DATE $TIME" >&2
51 if [[ ! "$TS" > "$WEEKLY" ]] ; then
52 if [[ "$KEEPDD" = "${DATE:8:2}" ]] ; then
53 if [ -z "$KEEPWW" ] ; then
57 echo "# discard duplicate day $KEEPDD: $CNO $DATE $TIME" >&2
59 echo "# discard not day $KEEPDD: $CNO $DATE $TIME" >&2
65 if [[ ! "$TS" > "$DAILY" ]] ; then
66 [[ "$KEEPHH" = "${TIME:0:2}" ]] && continue
67 echo "# discard not hour $KEEPHH: $CNO $DATE $TIME" >&2
72 if [[ ! "$TS" > "$HOURLY" ]] ; then
73 if [ "$KEEP55" = "${TIME:0:2}" ] ; then
74 echo "# discard duplicate for hour $KEEP55: $CNO $DATE $TIME" >&2
78 #echo "# keep first of hour $KEEP55: $CNO $DATE $TIME" >&2
83 #echo "# keep within last hour $CNO $DATE $TIME" >&2
84 [[ ! "$TS" > "$FIVELY" ]] && continue
85 echo "$CNO $DATE $TIME is within last five minutes"
86 #echo "# $CNO is within last five minutes " >&2
87 done | if read X ; then
89 elif [[ $(( $(date +%M) % 5 )) = 0 ]] ; then
90 date "+# new snapshot at %Y-%m-%d %H:%M:%S" >&2