Statistiques
| Révision :

root / bin / enable-snapshot @ 49

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

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