Statistiques
| Révision :

root / bin / enable-snapshot @ 39

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

1
#!/bin/bash
2
# $Id: enable-snapshot 39 2013-10-08 12:46:21Z ltaulell $
3

    
4
DIR_CRON="/etc/cron.d/"
5
DIR_CONF_SNAPSHOT="/opt/gZFS/snapshots/"
6
BIN_ZFS_SNAPSHOT="/sbin/zfs-snapshot"
7

    
8

    
9
function usage {
10
  echo "Usage : $0 options" 1>&2
11
  echo "OPTIONS :" 1>&2
12
  echo "  -i : interactive mode, this option is not compatible with others options" 1>&2
13
  echo "  -m : minute field for cron snapshot" 1>&2
14
  echo "  -H : hour field for cron snapshots" 1>&2
15
  echo "  -D : Day of Month field for cron snapshots" 1>&2
16
  echo "  -M : Month field for cron snapshots" 1>&2
17
  echo "  -d : Day of week for cron snapshots" 1>&2
18
  echo "  -N : Name of ZFS Volume/FileSystem to snapshots" 1>&2
19
  echo "  -t : Type ZFS Volume or FileSystem. Possible value : volume or filesystem" 1>&2
20
  echo "  -k : Number of snapsot to keep" 1>&2
21
}
22

    
23
function checkField4Cron {
24
  if [[ $OPTARG =~ [a-zA-Z] ]]
25
  then
26
     echo "-$OPTION contain a bad value" 1>&2
27
     exit 1
28
  fi
29
}
30

    
31
function createCronFile4Snapshot {
32
FILE_NAME=$(echo "snapshot-"${NAMEZFS//\//-})
33
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
34
echo "name=$NAMEZFS" >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
35
echo "type=$TYPEZFS" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
36
echo "nbsnapshots=$SNAP2KEEP" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf
37
}
38

    
39
function interactive {
40
zfs list
41
echo "*** Choix du volume pour l'activation des snapshot (merci de saisir le path complet du volume) : ***"
42

    
43
while read inputline
44
do
45
   NAME_VOL=$inputline
46
   if [ "$NAME_VOL" = "" ]
47
   then
48
      echo "*** Choix du volume pour l'activation des snapshot : ***" 
49
   else
50

    
51
      echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
52
   
53

    
54
      while read inputConfirm
55
      do
56
         if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
57
         then
58
            break
59
         fi
60
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
61
      done
62

    
63
      if [ "$inputConfirm" = "y" ]
64
      then
65
         zfs list $NAME_VOL
66
         if [ $? -eq 0 ]
67
         then
68
            echo "*** Le volume saisi $NAME_VOL existe ***"
69
            break
70
         else
71
            echo "*** Le volume saisi $NAME_VOL n'existe pas ***"    
72
            echo "*** Choix du volume pour l'activation des snapshot : ***"
73
         fi
74
      fi
75
      if [ "$inputConfirm" != "y" ]
76
      then
77
         echo "*** Choix du volume pour l'activation des snapshot : ***"
78
      fi
79

    
80
   fi
81
done
82

    
83
echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***"
84

    
85
while read inputline
86
do
87
  if [ "$inputline" = "volume" ] || [ "$inputline" = "filesystem" ]
88
  then
89
     TYPE_ZFS=$inputline
90
     break
91
  else
92
    echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***"
93
     
94
  fi
95

    
96
done
97

    
98

    
99
echo "*** Nombre de snapshot a garder : ***"
100

    
101

    
102

    
103
while read inputline
104
do
105
   NB_SNAP=$inputline
106
   if [ "$NB_SNAP" = "" ]
107
   then
108

    
109
       echo "*** Nombre de snapshot a garder : ***"
110
              
111
   else
112
       
113
       echo "*** Creation du fichier de configuration ***"
114
       FILE_NAME=$(echo "snapshot-"${NAME_VOL//\//-}) 
115
       >$DIR_CONF_SNAPSHOT$FILE_NAME.conf
116
       echo "name=$NAME_VOL" > $DIR_CONF_SNAPSHOT$FILE_NAME.conf
117
       echo "nbsnapshots=$NB_SNAP" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
118
       echo "type=$TYPE_ZFS" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf
119
       break    
120
   fi
121
done
122

    
123
echo "*** Frequence des snapshots ***"
124
echo "1 - Tous les jours"
125
echo "2 - Toutes les semaines"
126
echo "3 - Tous les mois"
127
echo "*******************************"
128
while read inputline
129
do 
130
   case $inputline in
131
   
132
    "1" )
133
          echo "*** Saisir l'heure (HH:MM) "
134
          while read inputheure
135
          do
136
             if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
137
             then
138
                echo "Le choix de l'heure est : $inputheure"
139
                H_DEBUT=$(echo $inputheure |cut -d":" -f1)
140
                M_DEBUT=$(echo $inputheure |cut -d":" -f2)
141
                echo "$M_DEBUT $H_DEBUT * * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
142
                break;
143
             else
144
                echo "*** Saisir l'heure (HH:MM) "
145
             fi
146
          done
147

    
148
          break ;;
149
    "2" ) 
150
          echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
151
          while read inputjour
152
          do
153
             if [[ "$inputjour" =~ [0-9] ]]
154
             then
155
               
156
                 echo "*** Saisir l'heure (HH:MM) "
157
                 while read inputheure
158
                 do
159
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
160
                    then
161
                       echo "Le choix de l'heure est : $inputheure"
162
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
163
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
164
                       break;
165
                    else
166
                       echo "*** Saisir l'heure (HH:MM) "
167
                    fi
168
                  done
169
                
170
                  echo "$M_DEBUT $H_DEBUT * * $inputjour root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
171
                  echo "*** Planification du snapshot [OK]"
172
                  break;
173
             else
174
                 echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) "
175
             fi
176
          done
177

    
178
          break ;;
179

    
180
     "3" )
181
          echo "*** Saisir le jour du mois : 01-30"
182
          while read inputjour
183
          do
184
             if [[ "$inputjour" =~ [0-9][0-9] ]]
185
             then
186

    
187
                 echo "*** Saisir l'heure (HH:MM) "
188
                 while read inputheure
189
                 do
190
                    if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]]
191
                    then
192
                       echo "Le choix de l'heure est : $inputheure"
193
                       H_DEBUT=$(echo $inputheure |cut -d":" -f1)
194
                       M_DEBUT=$(echo $inputheure |cut -d":" -f2)
195
                       break;
196
                    else
197
                       echo "*** Saisir l'heure (HH:MM) "
198
                    fi
199
                  done
200

    
201
                  echo "$M_DEBUT $H_DEBUT $inputjour * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
202
                  echo "*** Planification du snapshot [OK]"
203
                  break;
204
             else
205
                 echo "*** Saisir le jour du mois : 01-30 "
206
             fi
207
          done
208

    
209
          break ;;
210

    
211
   esac
212
   echo "*** Frequence des snapshots *** "
213
   echo "1 - Tous les jours"
214
   echo "2 - Toutes les semaines"
215
   echo "3 - Tous les mois"
216
   echo "*******************************"
217
   
218
done
219
/etc/init.d/cron restart
220
}
221

    
222
while getopts "im:H:D:M:d:N:t:k:h" OPTION
223
do
224
     case $OPTION in
225
         h)
226
             usage
227
             exit 1
228
             ;;
229
         i)
230
            interactive
231
            exit 0
232
            ;;
233
         m)
234
            checkField4Cron
235
            MINUTE=$OPTARG
236
            ;;
237
         H)
238
            checkField4Cron
239
            HOUR=$OPTARG
240
            ;;
241
         D) 
242
            checkField4Cron
243
            DAYMONTH=$OPTARG
244
            ;;
245
         M)
246
            checkField4Cron
247
            MONTH=$OPTARG
248
            ;;
249
         d)
250
            checkField4Cron
251
            DAYWEEK=$OPTARG
252
            ;;
253
         N)
254
            NAMEZFS=$OPTARG
255
            ;;
256
         t)
257
            TYPEZFS=$OPTARG
258
            ;;
259
         k)
260
            SNAP2KEEP=$OPTARG
261
            ;;
262
         *)
263
            usage
264
            exit 1
265
            ;;
266
     esac
267
done
268

    
269
if [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] || [[ -z $NAMEZFS ]] || [[ -z $TYPEZFS ]] || [[ -z $SNAP2KEEP ]]
270
then
271
     usage
272
     exit 1
273
fi
274

    
275
createCronFile4Snapshot
276

    
277
/etc/init.d/cron restart
278

    
279