Statistiques
| Révision :

root / bin / enable-snapshot @ 26

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

1
#!/bin/bash
2

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

    
7

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

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

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

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

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

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

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

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

    
79
   fi
80
done
81

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

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

    
95
done
96

    
97

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

    
100

    
101

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

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

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

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

    
177
          break ;;
178

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

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

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

    
208
          break ;;
209

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

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

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

    
274
createCronFile4Snapshot
275

    
276
/etc/init.d/cron restart
277

    
278