Statistiques
| Révision :

root / bin / enable-snapshot @ 67

Historique | Voir | Annoter | Télécharger (7,49 ko)

1 1 kreverch
#!/bin/bash
2 39 ltaulell
# $Id$
3 51 ltaulell
# Copyright (C) 2013 Kevin Reverchon, Loïs Taulelle
4 51 ltaulell
# This file/program is part of gZFS free software
5 51 ltaulell
# See COPYING file for details
6 51 ltaulell
#
7 1 kreverch
8 1 kreverch
DIR_CRON="/etc/cron.d/"
9 1 kreverch
DIR_CONF_SNAPSHOT="/opt/gZFS/snapshots/"
10 1 kreverch
BIN_ZFS_SNAPSHOT="/sbin/zfs-snapshot"
11 49 kreverch
BINZFS="/sbin/zfs"
12 49 kreverch
BINZPOOL="/sbin/zpool"
13 1 kreverch
14 1 kreverch
function usage {
15 1 kreverch
  echo "Usage : $0 options" 1>&2
16 1 kreverch
  echo "OPTIONS :" 1>&2
17 40 ltaulell
  echo "  -i : interactive mode, this option is not compatible with other options" 1>&2
18 1 kreverch
  echo "  -m : minute field for cron snapshot" 1>&2
19 40 ltaulell
  echo "  -H : hour field for cron snapshot" 1>&2
20 40 ltaulell
  echo "  -D : Day of Month field for cron snapshot" 1>&2
21 40 ltaulell
  echo "  -M : Month field for cron snapshot" 1>&2
22 40 ltaulell
  echo "  -d : Day of week for cron snapshot" 1>&2
23 40 ltaulell
  echo "  -N : Name of ZFS Volume/FileSystem to snapshot" 1>&2
24 40 ltaulell
  echo "  -t : Type (Possible values: volume or filesystem)" 1>&2
25 40 ltaulell
  echo "  -k : Number of snapshot to keep" 1>&2
26 1 kreverch
}
27 1 kreverch
28 1 kreverch
function checkField4Cron {
29 1 kreverch
  if [[ $OPTARG =~ [a-zA-Z] ]]
30 1 kreverch
  then
31 1 kreverch
     echo "-$OPTION contain a bad value" 1>&2
32 1 kreverch
     exit 1
33 1 kreverch
  fi
34 1 kreverch
}
35 1 kreverch
36 1 kreverch
function createCronFile4Snapshot {
37 20 ltaulell
FILE_NAME=$(echo "snapshot-"${NAMEZFS//\//-})
38 1 kreverch
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
39 1 kreverch
echo "name=$NAMEZFS" >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
40 1 kreverch
echo "type=$TYPEZFS" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
41 1 kreverch
echo "nbsnapshots=$SNAP2KEEP" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
42 1 kreverch
}
43 1 kreverch
44 1 kreverch
function interactive {
45 49 kreverch
$BINZFS list
46 47 kreverch
echo "*** Select the ZFS volume/filesystem : ***"
47 1 kreverch
48 1 kreverch
while read inputline
49 1 kreverch
do
50 1 kreverch
   NAME_VOL=$inputline
51 1 kreverch
   if [ "$NAME_VOL" = "" ]
52 1 kreverch
   then
53 47 kreverch
      echo "*** Select the ZFS volume/filesystem : ***"
54 1 kreverch
   else
55 1 kreverch
56 47 kreverch
      echo "*** Are you sur : $inputline ? (y/n) ***"
57 1 kreverch
58 1 kreverch
59 1 kreverch
      while read inputConfirm
60 1 kreverch
      do
61 1 kreverch
         if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
62 1 kreverch
         then
63 1 kreverch
            break
64 1 kreverch
         fi
65 47 kreverch
         echo "*** Are you sur : $inputline ? (y/n) ***"
66 1 kreverch
      done
67 1 kreverch
68 1 kreverch
      if [ "$inputConfirm" = "y" ]
69 1 kreverch
      then
70 49 kreverch
         $BINZFS list $NAME_VOL
71 1 kreverch
         if [ $? -eq 0 ]
72 1 kreverch
         then
73 47 kreverch
            echo "*** The ZFS volume/filesystem $NAME_VOL exists ***"
74 1 kreverch
            break
75 1 kreverch
         else
76 47 kreverch
            echo "*** The ZFS volume/filesystem $NAME_VOL does not exist ***"
77 47 kreverch
            echo "*** Select the ZFS volume/filesystem : ***"
78 1 kreverch
         fi
79 1 kreverch
      fi
80 1 kreverch
      if [ "$inputConfirm" != "y" ]
81 1 kreverch
      then
82 47 kreverch
         echo "*** Select the ZFS volume/filesystem : ***"
83 1 kreverch
      fi
84 1 kreverch
85 1 kreverch
   fi
86 1 kreverch
done
87 1 kreverch
88 47 kreverch
echo "*** ZFS Type : volume or filesystem ? ***"
89 1 kreverch
90 1 kreverch
while read inputline
91 1 kreverch
do
92 1 kreverch
  if [ "$inputline" = "volume" ] || [ "$inputline" = "filesystem" ]
93 1 kreverch
  then
94 1 kreverch
     TYPE_ZFS=$inputline
95 1 kreverch
     break
96 1 kreverch
  else
97 47 kreverch
    echo "*** ZFS Type : volume or filesystem ? ***"
98 1 kreverch
  fi
99 1 kreverch
100 1 kreverch
done
101 1 kreverch
102 1 kreverch
103 47 kreverch
echo "*** How many snapshot to keep ? ***"
104 1 kreverch
105 1 kreverch
106 1 kreverch
107 1 kreverch
while read inputline
108 1 kreverch
do
109 1 kreverch
   NB_SNAP=$inputline
110 1 kreverch
   if [ "$NB_SNAP" = "" ]
111 1 kreverch
   then
112 1 kreverch
113 47 kreverch
       echo "*** How many snapshot to keep ? ***"
114 1 kreverch
115 1 kreverch
   else
116 1 kreverch
117 47 kreverch
       echo "*** Creation of the configuration file ***"
118 20 ltaulell
       FILE_NAME=$(echo "snapshot-"${NAME_VOL//\//-})
119 1 kreverch
       >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
120 1 kreverch
       echo "name=$NAME_VOL" > $DIR_CONF_SNAPSHOT$FILE_NAME.conf
121 1 kreverch
       echo "nbsnapshots=$NB_SNAP" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
122 1 kreverch
       echo "type=$TYPE_ZFS" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
123 1 kreverch
       break
124 1 kreverch
   fi
125 1 kreverch
done
126 1 kreverch
127 47 kreverch
echo "*** Snapshots Frequency ***"
128 47 kreverch
echo "1 - Every days"
129 47 kreverch
echo "2 - Every weeks"
130 47 kreverch
echo "3 - Every Months"
131 1 kreverch
echo "*******************************"
132 1 kreverch
while read inputline
133 1 kreverch
do
134 1 kreverch
   case $inputline in
135 1 kreverch
136 1 kreverch
    "1" )
137 47 kreverch
          echo "*** Enter the Time (HH:MM) "
138 1 kreverch
          while read inputheure
139 1 kreverch
          do
140 1 kreverch
             if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
141 1 kreverch
             then
142 47 kreverch
                echo "Snapshot will be taken at : $inputheure"
143 1 kreverch
                H_DEBUT=$(echo $inputheure |cut -d":" -f1)
144 1 kreverch
                M_DEBUT=$(echo $inputheure |cut -d":" -f2)
145 1 kreverch
                echo "$M_DEBUT $H_DEBUT * * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
146 1 kreverch
                break;
147 1 kreverch
             else
148 47 kreverch
                echo "*** Enter the Time (HH:MM) "
149 1 kreverch
             fi
150 1 kreverch
          done
151 1 kreverch
152 1 kreverch
          break ;;
153 1 kreverch
    "2" )
154 47 kreverch
          echo "*** Select day of week : 0-6 (0 is sunday) "
155 1 kreverch
          while read inputjour
156 1 kreverch
          do
157 1 kreverch
             if [[ "$inputjour" =~ [0-9] ]]
158 1 kreverch
             then
159 1 kreverch
160 47 kreverch
                 echo "*** Enter the Time (HH:MM) "
161 1 kreverch
                 while read inputheure
162 1 kreverch
                 do
163 1 kreverch
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
164 1 kreverch
                    then
165 47 kreverch
                       echo "Snapshot will be taken at : $inputheure"
166 1 kreverch
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
167 1 kreverch
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
168 1 kreverch
                       break;
169 1 kreverch
                    else
170 47 kreverch
                       echo "*** Enter the Time (HH:MM) "
171 1 kreverch
                    fi
172 1 kreverch
                  done
173 1 kreverch
174 1 kreverch
                  echo "$M_DEBUT $H_DEBUT * * $inputjour root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
175 47 kreverch
                  echo "*** Snapshot Configuration [OK]"
176 1 kreverch
                  break;
177 1 kreverch
             else
178 47 kreverch
                 echo "*** Select day of week : 0-6 (0 is sunday) "
179 1 kreverch
             fi
180 1 kreverch
          done
181 1 kreverch
182 1 kreverch
          break ;;
183 1 kreverch
184 1 kreverch
     "3" )
185 47 kreverch
          echo "*** Selelct day of month : 01-30"
186 1 kreverch
          while read inputjour
187 1 kreverch
          do
188 1 kreverch
             if [[ "$inputjour" =~ [0-9][0-9] ]]
189 1 kreverch
             then
190 1 kreverch
191 47 kreverch
                 echo "*** Enter the Time (HH:MM) "
192 1 kreverch
                 while read inputheure
193 1 kreverch
                 do
194 1 kreverch
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
195 1 kreverch
                    then
196 47 kreverch
                       echo "Snapshot will be taken at : $inputheure"
197 1 kreverch
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
198 1 kreverch
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
199 1 kreverch
                       break;
200 1 kreverch
                    else
201 47 kreverch
                       echo "*** Enter the Time (HH:MM) "
202 1 kreverch
                    fi
203 1 kreverch
                  done
204 1 kreverch
205 1 kreverch
                  echo "$M_DEBUT $H_DEBUT $inputjour * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
206 47 kreverch
                  echo "*** Snapshot configuration [OK]"
207 1 kreverch
                  break;
208 1 kreverch
             else
209 47 kreverch
                 echo "*** Select the day of month : 01-30 "
210 1 kreverch
             fi
211 1 kreverch
          done
212 1 kreverch
213 1 kreverch
          break ;;
214 1 kreverch
215 1 kreverch
   esac
216 47 kreverch
   echo "*** Snapshots Frequency *** "
217 47 kreverch
   echo "1 - Every days"
218 47 kreverch
   echo "2 - Every weeks"
219 47 kreverch
   echo "3 - Every months"
220 1 kreverch
   echo "*******************************"
221 1 kreverch
222 1 kreverch
done
223 1 kreverch
/etc/init.d/cron restart
224 1 kreverch
}
225 1 kreverch
226 1 kreverch
while getopts "im:H:D:M:d:N:t:k:h" OPTION
227 1 kreverch
do
228 1 kreverch
     case $OPTION in
229 1 kreverch
         h)
230 1 kreverch
             usage
231 1 kreverch
             exit 1
232 1 kreverch
             ;;
233 1 kreverch
         i)
234 1 kreverch
            interactive
235 1 kreverch
            exit 0
236 1 kreverch
            ;;
237 1 kreverch
         m)
238 1 kreverch
            checkField4Cron
239 1 kreverch
            MINUTE=$OPTARG
240 1 kreverch
            ;;
241 1 kreverch
         H)
242 1 kreverch
            checkField4Cron
243 1 kreverch
            HOUR=$OPTARG
244 1 kreverch
            ;;
245 1 kreverch
         D)
246 1 kreverch
            checkField4Cron
247 1 kreverch
            DAYMONTH=$OPTARG
248 1 kreverch
            ;;
249 1 kreverch
         M)
250 1 kreverch
            checkField4Cron
251 1 kreverch
            MONTH=$OPTARG
252 1 kreverch
            ;;
253 1 kreverch
         d)
254 1 kreverch
            checkField4Cron
255 1 kreverch
            DAYWEEK=$OPTARG
256 1 kreverch
            ;;
257 1 kreverch
         N)
258 1 kreverch
            NAMEZFS=$OPTARG
259 1 kreverch
            ;;
260 1 kreverch
         t)
261 1 kreverch
            TYPEZFS=$OPTARG
262 1 kreverch
            ;;
263 1 kreverch
         k)
264 1 kreverch
            SNAP2KEEP=$OPTARG
265 1 kreverch
            ;;
266 1 kreverch
         *)
267 1 kreverch
            usage
268 1 kreverch
            exit 1
269 1 kreverch
            ;;
270 1 kreverch
     esac
271 1 kreverch
done
272 1 kreverch
273 1 kreverch
if [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] || [[ -z $NAMEZFS ]] || [[ -z $TYPEZFS ]] || [[ -z $SNAP2KEEP ]]
274 1 kreverch
then
275 1 kreverch
     usage
276 1 kreverch
     exit 1
277 1 kreverch
fi
278 1 kreverch
279 1 kreverch
createCronFile4Snapshot
280 1 kreverch
281 1 kreverch
/etc/init.d/cron restart
282 1 kreverch