Statistiques
| Révision :

root / bin / enable-snapshot @ 44

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

1
#!/bin/bash
2
# $Id: enable-snapshot 44 2013-10-09 12:43:42Z kreverch $
3

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

    
8
# TODO: traduire les msg
9

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

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

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

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

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

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

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

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

    
81
   fi
82
done
83

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

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

    
97
done
98

    
99

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

    
102

    
103

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

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

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

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

    
179
          break ;;
180

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

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

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

    
210
          break ;;
211

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

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

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

    
276
createCronFile4Snapshot
277

    
278
/etc/init.d/cron restart
279

    
280