Statistiques
| Révision :

root / bin / enable-snapshot @ 39

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 1 kreverch
9 1 kreverch
function usage {
10 1 kreverch
  echo "Usage : $0 options" 1>&2
11 1 kreverch
  echo "OPTIONS :" 1>&2
12 1 kreverch
  echo "  -i : interactive mode, this option is not compatible with others options" 1>&2
13 1 kreverch
  echo "  -m : minute field for cron snapshot" 1>&2
14 1 kreverch
  echo "  -H : hour field for cron snapshots" 1>&2
15 1 kreverch
  echo "  -D : Day of Month field for cron snapshots" 1>&2
16 1 kreverch
  echo "  -M : Month field for cron snapshots" 1>&2
17 1 kreverch
  echo "  -d : Day of week for cron snapshots" 1>&2
18 1 kreverch
  echo "  -N : Name of ZFS Volume/FileSystem to snapshots" 1>&2
19 1 kreverch
  echo "  -t : Type ZFS Volume or FileSystem. Possible value : volume or filesystem" 1>&2
20 1 kreverch
  echo "  -k : Number of snapsot to keep" 1>&2
21 1 kreverch
}
22 1 kreverch
23 1 kreverch
function checkField4Cron {
24 1 kreverch
  if [[ $OPTARG =~ [a-zA-Z] ]]
25 1 kreverch
  then
26 1 kreverch
     echo "-$OPTION contain a bad value" 1>&2
27 1 kreverch
     exit 1
28 1 kreverch
  fi
29 1 kreverch
}
30 1 kreverch
31 1 kreverch
function createCronFile4Snapshot {
32 20 ltaulell
FILE_NAME=$(echo "snapshot-"${NAMEZFS//\//-})
33 1 kreverch
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
34 1 kreverch
echo "name=$NAMEZFS" >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
35 1 kreverch
echo "type=$TYPEZFS" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
36 1 kreverch
echo "nbsnapshots=$SNAP2KEEP" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
37 1 kreverch
}
38 1 kreverch
39 1 kreverch
function interactive {
40 1 kreverch
zfs list
41 1 kreverch
echo "*** Choix du volume pour l'activation des snapshot (merci de saisir le path complet du volume) : ***"
42 1 kreverch
43 1 kreverch
while read inputline
44 1 kreverch
do
45 1 kreverch
   NAME_VOL=$inputline
46 1 kreverch
   if [ "$NAME_VOL" = "" ]
47 1 kreverch
   then
48 1 kreverch
      echo "*** Choix du volume pour l'activation des snapshot : ***"
49 1 kreverch
   else
50 1 kreverch
51 1 kreverch
      echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
52 1 kreverch
53 1 kreverch
54 1 kreverch
      while read inputConfirm
55 1 kreverch
      do
56 1 kreverch
         if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
57 1 kreverch
         then
58 1 kreverch
            break
59 1 kreverch
         fi
60 1 kreverch
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
61 1 kreverch
      done
62 1 kreverch
63 1 kreverch
      if [ "$inputConfirm" = "y" ]
64 1 kreverch
      then
65 1 kreverch
         zfs list $NAME_VOL
66 1 kreverch
         if [ $? -eq 0 ]
67 1 kreverch
         then
68 1 kreverch
            echo "*** Le volume saisi $NAME_VOL existe ***"
69 1 kreverch
            break
70 1 kreverch
         else
71 1 kreverch
            echo "*** Le volume saisi $NAME_VOL n'existe pas ***"
72 1 kreverch
            echo "*** Choix du volume pour l'activation des snapshot : ***"
73 1 kreverch
         fi
74 1 kreverch
      fi
75 1 kreverch
      if [ "$inputConfirm" != "y" ]
76 1 kreverch
      then
77 1 kreverch
         echo "*** Choix du volume pour l'activation des snapshot : ***"
78 1 kreverch
      fi
79 1 kreverch
80 1 kreverch
   fi
81 1 kreverch
done
82 1 kreverch
83 1 kreverch
echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***"
84 1 kreverch
85 1 kreverch
while read inputline
86 1 kreverch
do
87 1 kreverch
  if [ "$inputline" = "volume" ] || [ "$inputline" = "filesystem" ]
88 1 kreverch
  then
89 1 kreverch
     TYPE_ZFS=$inputline
90 1 kreverch
     break
91 1 kreverch
  else
92 1 kreverch
    echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***"
93 1 kreverch
94 1 kreverch
  fi
95 1 kreverch
96 1 kreverch
done
97 1 kreverch
98 1 kreverch
99 1 kreverch
echo "*** Nombre de snapshot a garder : ***"
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 1 kreverch
       echo "*** Nombre de snapshot a garder : ***"
110 1 kreverch
111 1 kreverch
   else
112 1 kreverch
113 1 kreverch
       echo "*** Creation du fichier de configuration ***"
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 1 kreverch
echo "*** Frequence des snapshots ***"
124 1 kreverch
echo "1 - Tous les jours"
125 1 kreverch
echo "2 - Toutes les semaines"
126 1 kreverch
echo "3 - Tous les mois"
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 1 kreverch
          echo "*** Saisir l'heure (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 1 kreverch
                echo "Le choix de l'heure est : $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 1 kreverch
                echo "*** Saisir l'heure (HH:MM) "
145 1 kreverch
             fi
146 1 kreverch
          done
147 1 kreverch
148 1 kreverch
          break ;;
149 1 kreverch
    "2" )
150 1 kreverch
          echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
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 1 kreverch
                 echo "*** Saisir l'heure (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 1 kreverch
                       echo "Le choix de l'heure est : $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 1 kreverch
                       echo "*** Saisir l'heure (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 1 kreverch
                  echo "*** Planification du snapshot [OK]"
172 1 kreverch
                  break;
173 1 kreverch
             else
174 1 kreverch
                 echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
175 1 kreverch
             fi
176 1 kreverch
          done
177 1 kreverch
178 1 kreverch
          break ;;
179 1 kreverch
180 1 kreverch
     "3" )
181 1 kreverch
          echo "*** Saisir le jour du mois : 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 1 kreverch
                 echo "*** Saisir l'heure (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 1 kreverch
                       echo "Le choix de l'heure est : $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 1 kreverch
                       echo "*** Saisir l'heure (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 1 kreverch
                  echo "*** Planification du snapshot [OK]"
203 1 kreverch
                  break;
204 1 kreverch
             else
205 1 kreverch
                 echo "*** Saisir le jour du mois : 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 1 kreverch
   echo "*** Frequence des snapshots *** "
213 1 kreverch
   echo "1 - Tous les jours"
214 1 kreverch
   echo "2 - Toutes les semaines"
215 1 kreverch
   echo "3 - Tous les mois"
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