Statistiques
| Révision :

root / bin / enable-snapshot @ 26

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

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