-
Notifications
You must be signed in to change notification settings - Fork 0
/
daily_snapshot_rotate.sh
executable file
·69 lines (54 loc) · 2.1 KB
/
daily_snapshot_rotate.sh
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
66
67
68
69
#!/bin/bash
# ----------------------------------------------------------------------
# mikes handy rotating-filesystem-snapshot utility: daily snapshots
# ----------------------------------------------------------------------
# intended to be run daily as a cron job when hourly.3 contains the
# midnight (or whenever you want) snapshot; say, 13:00 for 4-hour snapshots.
# ----------------------------------------------------------------------
unset PATH
# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;
MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
# ------------- file locations -----------------------------------------
#MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/media/hdd/backup/snapshot;
# ------------- the script itself --------------------------------------
# make sure we're running as root
#if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root. Exiting..."; exit; } fi
# attempt to remount the RW mount point as RW; else abort
#$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
#if (( $? )); then
# {
# $ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
# exit;
#}
#fi;
# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/daily.2 ] ; then \
$RM -rf $SNAPSHOT_RW/daily.2 ; \
fi ;
# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/daily.1 ] ; then \
$MV $SNAPSHOT_RW/daily.1 $SNAPSHOT_RW/daily.2 ; \
fi;
if [ -d $SNAPSHOT_RW/daily.0 ] ; then \
$MV $SNAPSHOT_RW/daily.0 $SNAPSHOT_RW/daily.1; \
fi;
# step 3: make a hard-link-only (except for dirs) copy of
# hourly.3, assuming that exists, into daily.0
if [ -d $SNAPSHOT_RW/hourly.3 ] ; then \
$CP -al $SNAPSHOT_RW/hourly.3 $SNAPSHOT_RW/daily.0 ; \
fi;
# note: do *not* update the mtime of daily.0; it will reflect
# when hourly.3 was made, which should be correct.
# now remount the RW snapshot mountpoint as readonly
#$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
#if (( $? )); then
# {
# $ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
# exit;
#} fi;