Statistiques
| Révision :

root / bin / enable-snapshot @ 40

Historique | Voir | Annoter | Télécharger (7,61 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 1 kreverch
8 40 ltaulell
# TODO: traduire les msg
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 1 kreverch
zfs list
42 1 kreverch
echo "*** Choix du volume pour l'activation des snapshot (merci de saisir le path complet du volume) : ***"
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 1 kreverch
      echo "*** Choix du volume pour l'activation des snapshot : ***"
50 1 kreverch
   else
51 1 kreverch
52 1 kreverch
      echo "*** Etes-vous sur du nom : $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 1 kreverch
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
62 1 kreverch
      done
63 1 kreverch
64 1 kreverch
      if [ "$inputConfirm" = "y" ]
65 1 kreverch
      then
66 1 kreverch
         zfs list $NAME_VOL
67 1 kreverch
         if [ $? -eq 0 ]
68 1 kreverch
         then
69 1 kreverch
            echo "*** Le volume saisi $NAME_VOL existe ***"
70 1 kreverch
            break
71 1 kreverch
         else
72 1 kreverch
            echo "*** Le volume saisi $NAME_VOL n'existe pas ***"
73 1 kreverch
            echo "*** Choix du volume pour l'activation des snapshot : ***"
74 1 kreverch
         fi
75 1 kreverch
      fi
76 1 kreverch
      if [ "$inputConfirm" != "y" ]
77 1 kreverch
      then
78 1 kreverch
         echo "*** Choix du volume pour l'activation des snapshot : ***"
79 1 kreverch
      fi
80 1 kreverch
81 1 kreverch
   fi
82 1 kreverch
done
83 1 kreverch
84 1 kreverch
echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/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 1 kreverch
    echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***"
94 1 kreverch
95 1 kreverch
  fi
96 1 kreverch
97 1 kreverch
done
98 1 kreverch
99 1 kreverch
100 1 kreverch
echo "*** Nombre de snapshot a garder : ***"
101 1 kreverch
102 1 kreverch
103 1 kreverch
104 1 kreverch
while read inputline
105 1 kreverch
do
106 1 kreverch
   NB_SNAP=$inputline
107 1 kreverch
   if [ "$NB_SNAP" = "" ]
108 1 kreverch
   then
109 1 kreverch
110 1 kreverch
       echo "*** Nombre de snapshot a garder : ***"
111 1 kreverch
112 1 kreverch
   else
113 1 kreverch
114 1 kreverch
       echo "*** Creation du fichier de configuration ***"
115 20 ltaulell
       FILE_NAME=$(echo "snapshot-"${NAME_VOL//\//-})
116 1 kreverch
       >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
117 1 kreverch
       echo "name=$NAME_VOL" > $DIR_CONF_SNAPSHOT$FILE_NAME.conf
118 1 kreverch
       echo "nbsnapshots=$NB_SNAP" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
119 1 kreverch
       echo "type=$TYPE_ZFS" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
120 1 kreverch
       break
121 1 kreverch
   fi
122 1 kreverch
done
123 1 kreverch
124 1 kreverch
echo "*** Frequence des snapshots ***"
125 1 kreverch
echo "1 - Tous les jours"
126 1 kreverch
echo "2 - Toutes les semaines"
127 1 kreverch
echo "3 - Tous les mois"
128 1 kreverch
echo "*******************************"
129 1 kreverch
while read inputline
130 1 kreverch
do
131 1 kreverch
   case $inputline in
132 1 kreverch
133 1 kreverch
    "1" )
134 1 kreverch
          echo "*** Saisir l'heure (HH:MM) "
135 1 kreverch
          while read inputheure
136 1 kreverch
          do
137 1 kreverch
             if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
138 1 kreverch
             then
139 1 kreverch
                echo "Le choix de l'heure est : $inputheure"
140 1 kreverch
                H_DEBUT=$(echo $inputheure |cut -d":" -f1)
141 1 kreverch
                M_DEBUT=$(echo $inputheure |cut -d":" -f2)
142 1 kreverch
                echo "$M_DEBUT $H_DEBUT * * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
143 1 kreverch
                break;
144 1 kreverch
             else
145 1 kreverch
                echo "*** Saisir l'heure (HH:MM) "
146 1 kreverch
             fi
147 1 kreverch
          done
148 1 kreverch
149 1 kreverch
          break ;;
150 1 kreverch
    "2" )
151 1 kreverch
          echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
152 1 kreverch
          while read inputjour
153 1 kreverch
          do
154 1 kreverch
             if [[ "$inputjour" =~ [0-9] ]]
155 1 kreverch
             then
156 1 kreverch
157 1 kreverch
                 echo "*** Saisir l'heure (HH:MM) "
158 1 kreverch
                 while read inputheure
159 1 kreverch
                 do
160 1 kreverch
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
161 1 kreverch
                    then
162 1 kreverch
                       echo "Le choix de l'heure est : $inputheure"
163 1 kreverch
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
164 1 kreverch
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
165 1 kreverch
                       break;
166 1 kreverch
                    else
167 1 kreverch
                       echo "*** Saisir l'heure (HH:MM) "
168 1 kreverch
                    fi
169 1 kreverch
                  done
170 1 kreverch
171 1 kreverch
                  echo "$M_DEBUT $H_DEBUT * * $inputjour root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
172 1 kreverch
                  echo "*** Planification du snapshot [OK]"
173 1 kreverch
                  break;
174 1 kreverch
             else
175 1 kreverch
                 echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
176 1 kreverch
             fi
177 1 kreverch
          done
178 1 kreverch
179 1 kreverch
          break ;;
180 1 kreverch
181 1 kreverch
     "3" )
182 1 kreverch
          echo "*** Saisir le jour du mois : 01-30"
183 1 kreverch
          while read inputjour
184 1 kreverch
          do
185 1 kreverch
             if [[ "$inputjour" =~ [0-9][0-9] ]]
186 1 kreverch
             then
187 1 kreverch
188 1 kreverch
                 echo "*** Saisir l'heure (HH:MM) "
189 1 kreverch
                 while read inputheure
190 1 kreverch
                 do
191 1 kreverch
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
192 1 kreverch
                    then
193 1 kreverch
                       echo "Le choix de l'heure est : $inputheure"
194 1 kreverch
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
195 1 kreverch
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
196 1 kreverch
                       break;
197 1 kreverch
                    else
198 1 kreverch
                       echo "*** Saisir l'heure (HH:MM) "
199 1 kreverch
                    fi
200 1 kreverch
                  done
201 1 kreverch
202 1 kreverch
                  echo "$M_DEBUT $H_DEBUT $inputjour * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
203 1 kreverch
                  echo "*** Planification du snapshot [OK]"
204 1 kreverch
                  break;
205 1 kreverch
             else
206 1 kreverch
                 echo "*** Saisir le jour du mois : 01-30 "
207 1 kreverch
             fi
208 1 kreverch
          done
209 1 kreverch
210 1 kreverch
          break ;;
211 1 kreverch
212 1 kreverch
   esac
213 1 kreverch
   echo "*** Frequence des snapshots *** "
214 1 kreverch
   echo "1 - Tous les jours"
215 1 kreverch
   echo "2 - Toutes les semaines"
216 1 kreverch
   echo "3 - Tous les mois"
217 1 kreverch
   echo "*******************************"
218 1 kreverch
219 1 kreverch
done
220 1 kreverch
/etc/init.d/cron restart
221 1 kreverch
}
222 1 kreverch
223 1 kreverch
while getopts "im:H:D:M:d:N:t:k:h" OPTION
224 1 kreverch
do
225 1 kreverch
     case $OPTION in
226 1 kreverch
         h)
227 1 kreverch
             usage
228 1 kreverch
             exit 1
229 1 kreverch
             ;;
230 1 kreverch
         i)
231 1 kreverch
            interactive
232 1 kreverch
            exit 0
233 1 kreverch
            ;;
234 1 kreverch
         m)
235 1 kreverch
            checkField4Cron
236 1 kreverch
            MINUTE=$OPTARG
237 1 kreverch
            ;;
238 1 kreverch
         H)
239 1 kreverch
            checkField4Cron
240 1 kreverch
            HOUR=$OPTARG
241 1 kreverch
            ;;
242 1 kreverch
         D)
243 1 kreverch
            checkField4Cron
244 1 kreverch
            DAYMONTH=$OPTARG
245 1 kreverch
            ;;
246 1 kreverch
         M)
247 1 kreverch
            checkField4Cron
248 1 kreverch
            MONTH=$OPTARG
249 1 kreverch
            ;;
250 1 kreverch
         d)
251 1 kreverch
            checkField4Cron
252 1 kreverch
            DAYWEEK=$OPTARG
253 1 kreverch
            ;;
254 1 kreverch
         N)
255 1 kreverch
            NAMEZFS=$OPTARG
256 1 kreverch
            ;;
257 1 kreverch
         t)
258 1 kreverch
            TYPEZFS=$OPTARG
259 1 kreverch
            ;;
260 1 kreverch
         k)
261 1 kreverch
            SNAP2KEEP=$OPTARG
262 1 kreverch
            ;;
263 1 kreverch
         *)
264 1 kreverch
            usage
265 1 kreverch
            exit 1
266 1 kreverch
            ;;
267 1 kreverch
     esac
268 1 kreverch
done
269 1 kreverch
270 1 kreverch
if [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] || [[ -z $NAMEZFS ]] || [[ -z $TYPEZFS ]] || [[ -z $SNAP2KEEP ]]
271 1 kreverch
then
272 1 kreverch
     usage
273 1 kreverch
     exit 1
274 1 kreverch
fi
275 1 kreverch
276 1 kreverch
createCronFile4Snapshot
277 1 kreverch
278 1 kreverch
/etc/init.d/cron restart
279 1 kreverch