blob: 6fc501f6a890ad086f877d0063def4ccb0aab04d (
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/usr/bin/env bash
LEVEL='0'
PROG_NAME="$(basename $0)"
XFSDUMP='/usr/bin/xfsdump'
DESTINATION="/backup"
SESSION_LABEL="weekly"
MEDIA_LABEL="root-fs"
FILESYSTEM="/"
ONE_SHOT=""
usage() {
printf "Usage: %s [--one-shot] (--weekly | --daily | --hourly) [--file-system=fs] [--help]\n" $PROG_NAME > /dev/stderr
}
one_shot_weekly() {
FOUND=""
TIME=$(date +'%F')
if [[ "$(date +'%a')" == 'Sat' ]];
then
for FILE in $DESTINATION/backup-*.0.dump;
do
if [[ $(stat -c '%w' $FILE | awk '{print $1}') == $TIME ]];
then
FOUND=$FILE
break
fi
done
if [[ -z $FOUND ]];
then
LEVEL='0'
SESSION_LABEL="weekly"
dump
fi
fi
}
one_shot_daily() {
FOUND=""
TIME=$(date +'%F')
for FILE in $DESTINATION/backup-*.1.dump;
do
if [[ $(stat -c '%w' $FILE | awk '{print $1}') == $TIME ]];
then
FOUND=$FILE
break
fi
done
if [[ -z $FOUND ]];
then
LEVEL='1'
SESSION_LABEL="daily"
dump
fi
}
dump() {
DESTINATION_FILE="$DESTINATION/backup-$(date +'%Y-%m-%d-%H_%M_%S').$LEVEL.dump"
$XFSDUMP -l $LEVEL -L $SESSION_LABEL -M $MEDIA_LABEL -f $DESTINATION_FILE $FILESYSTEM
}
while [[ $# -gt 0 ]]; do
case $1 in
--weekly)
LEVEL='0'
SESSION_LABEL="weekly"
;;
--daily)
LEVEL='1'
SESSION_LABEL="daily"
;;
--hourly)
LEVEL='2'
SESSION_LABEL="hourly"
;;
--file-system=*)
FILESYSTEM=$(echo $1 | sed "s|--file-system=||g")
;;
--one-shot)
ONE_SHOT='1'
;;
--help)
usage
exit 1
;;
*)
printf "Error: Unknown flag '%s'\n" $1 > /dev/stderr
usage
exit 1
;;
esac
shift
done
if [[ -z $ONE_SHOT ]];
then
dump
else
one_shot_weekly
one_shot_daily
fi
|