Statistiques
| Révision :

root / bin / enable-replica @ 20

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

1
#!/bin/bash
2

    
3
DIR_CONF_REPLICA="/opt/gZFS/replicas/"
4
DIR_CRON="/etc/cron.d/"
5
BIN_ZFS_REPLICA="/sbin/zfs-replica"
6

    
7
function usage {
8
  echo "USAGE :"
9
  echo "$0 -o volume_fs_to_replicate -r volume_fs_destination -n number_replicas_to_keep -m minute_cron -H hour_cron -D Day_of_Month_cron -M month_cron -d day_of_week_cron [-s server destination]" 1>&2
10
  echo "or" 1>&2
11
  echo "$0 -i : for a interactive mode" 1>&2
12
  echo "" 1>&2
13
  echo "OPTIONS : " 1>&2
14
  echo "  -o : origin volume or a filesystem to replicate" 1>&2
15
  echo "  -r : volume or filesystem replicated" 1>&2
16
  echo "  -n : number replicas to keep" 1>&2
17
  echo "  -s : if the replica destination is on a another zfs server, so you need to specify this option with the name of server." 1>&2
18
  echo "      The remote replication use ssh. So please, generate a ssh private/public key and the public key in /root/.ssh/authorized_key" 1>&2
19
  echo "      on the remote server" 1>&2
20
  echo "  -m : minute field for cron replication" 1>&2
21
  echo "  -H : hour field for cron replication" 1>&2
22
  echo "  -D : Day of Month field for cron replication" 1>&2
23
  echo "  -M : Month field for cron replication" 1>&2
24
  echo "  -d : Day of week for cron replication" 1>&2
25
  echo "  -h : display this message"
26

    
27
}
28

    
29
function checkField4Cron {
30
  if [[ $OPTARG =~ [a-zA-Z] ]]
31
  then
32
     echo "-$OPTION contain a bad value" 1>&2
33
     exit 1
34
  fi
35
}
36

    
37
function createCronFile4Snapshot {
38
FILE_NAME=$(echo "replica-"${volfs//\//-})
39
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_REPLICA $DIR_CONF_REPLICA$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
40
}
41

    
42
function interactive {
43
zfs list
44
echo "*** Choix du volume pour l'activation de la replication : ***" 
45

    
46
while read inputline
47
do
48
   volfs=$inputline
49
   if [ "$volfs" = "" ]
50
   then
51
      echo "*** Choix du volume pour l'activation de la replication : ***" 
52
   else
53

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

    
56

    
57
      while read inputConfirm
58
      do
59
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
60
         then
61
            break
62
         fi
63
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
64
      done
65
      if [ "$inputConfirm" = "y" ]
66
      then
67
         zfs list $volfs
68
         if [ $? -eq 0 ]
69
         then
70
            echo "*** Le volume saisi $volfs existe ***"
71
            break
72
         else
73
            echo "*** Le volume saisi $volfs n'existe pas ***"    
74
            echo "*** Choix du volume pour l'activation de la replication : ***"
75
         fi
76
      fi
77
      if [ "$inputConfirm" != "y" ]
78
      then
79
         echo "*** Choix du volume pour l'activation de la replication : ***"
80
      fi
81
   fi
82
done
83

    
84
echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
85
echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
86
while read inputline
87
do
88
   volfsdestination=$inputline
89
   if [ "$volfsdestination" = "" ]
90
   then
91
      echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
92
      echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
93
   else
94

    
95
      echo "*** Etes-vous sur du nom du replica: $inputline ? (y/n) ***"
96

    
97

    
98
      while read inputConfirm
99
      do
100
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
101
         then
102
            break
103
         fi
104
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
105
      done
106
      if [ "$inputConfirm" != "y" ]
107
      then
108
         echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
109
         echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
110
      else
111
        break
112
      fi
113
   fi
114
done
115

    
116
echo "*** La replica est-elle sur un serveur distant (y/n)?"
117
while read inputConfirm
118
do
119
   if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
120
   then
121
      break
122
   fi
123
   echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
124
done
125
if [ "$inputConfirm" = "y" ]
126
then
127
   echo "*** Saisir le nom du server : "
128
   while read inputserver
129
   do
130
      if [ "$inputserver" != "" ]
131
      then
132
         server=$inputserver
133
         break
134
      fi
135
      echo "*** Saisir le nom du server : "
136
   done
137
else
138
   server=""
139
fi
140
   
141
echo "*** Nombre de replica a garder : ***"
142
while read inputline
143
do
144
   nbreplica=$inputline
145
   if [ "$nbreplica" = "" ]
146
   then
147
     echo "*** Nombre de snapshot a garder : ***"
148
   else
149
     echo "*** Creation du fichier de configuration ***"
150
     FILE_NAME=$(echo "replica-"${volfs//\//-})
151
     >$DIR_CONF_REPLICA$FILE_NAME.conf
152
      echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
153
      echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
154
      echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
155
      echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
156
      echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
157
     break
158
   fi
159
done
160

    
161
}
162

    
163

    
164

    
165
function nointeractive {
166
  FILE_NAME=$(echo "replica-"${volfs//\//-})
167
  >$DIR_CONF_REPLICA$FILE_NAME.conf
168
  echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
169
  echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
170
  echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
171
  echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
172
  echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
173
}
174

    
175

    
176
while getopts "is:r:o:n:m:H::D:M:d:h" OPTION
177
do
178
     case $OPTION in
179
         h)
180
             usage
181
             exit 1
182
             ;;
183
         r)
184
            volfsdestination=$OPTARG
185
            ;;
186
         o)
187
            volfs=$OPTARG
188
            ;;
189
         n)
190
            nbreplica=$OPTARG
191
            ;;
192
         s)
193
            server=$OPTARG
194
            ;;
195
         m)
196
            checkField4Cron
197
            MINUTE=$OPTARG
198
            ;;
199
         H)
200
            checkField4Cron
201
            HOUR=$OPTARG
202
            ;;
203
         D)
204
            checkField4Cron
205
            DAYMONTH=$OPTARG
206
            ;;
207
         M)
208
            checkField4Cron
209
            MONTH=$OPTARG
210
            ;;
211
         d)
212
            checkField4Cron
213
            DAYWEEK=$OPTARG
214
            ;;
215
         i)
216
            interactive
217
            exit 0
218
            ;;
219
     esac
220
done
221
if [[ -z $volfsdestination ]] || [[ -z $volfs ]] || [[ -z $nbreplica ]] || [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] 
222
then
223
     usage
224
     exit 1
225
fi
226

    
227
nointeractive
228
createCronFile4Snapshot
229

    
230
/etc/init.d/cron restart