Statistiques
| Révision :

root / bin / enable-replica @ 2

Historique | Voir | Annoter | Télécharger (5,83 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
while read inputline
85
do
86
   volfsdestination=$inputline
87
   if [ "$volfsdestination" = "" ]
88
   then
89
      echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
90
      echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
91
   else
92

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

    
95

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

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

    
154
}
155

    
156

    
157

    
158
function nointeractive {
159
  FILE_NAME=$(echo "replica-"${volfs/\//-})
160
  >$DIR_CONF_REPLICA$FILE_NAME.conf
161
  echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
162
  echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
163
  echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
164
  echo "lastsnapshotReplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
165
  echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
166
}
167

    
168

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

    
220
nointeractive
221
createCronFile4Snapshot
222

    
223
/etc/init.d/cron restart