Statistiques
| Révision :

root / bin / zfs-replica @ 5

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

1 1 kreverch
#!/bin/bash
2 1 kreverch
3 1 kreverch
#--- Define variables ---#
4 1 kreverch
DIR_CONF_REPLICA="/opt/gZFS/replicas/"
5 1 kreverch
getConfigSnapshotTool="/sbin/get-conf-snapshot"
6 1 kreverch
zfsSnapshot="/sbin/zfs-snapshot"
7 1 kreverch
FILE_NAME=$1
8 1 kreverch
9 1 kreverch
#********************************
10 1 kreverch
#* function initenv
11 1 kreverch
#*******************************
12 1 kreverch
function initenv {
13 1 kreverch
echo "start initenv"
14 1 kreverch
if [ "$#" -eq 0 ]
15 1 kreverch
then
16 1 kreverch
   echo "/!\\ Le fichier de configuration est manquant /!\\"
17 1 kreverch
   exit
18 1 kreverch
fi
19 1 kreverch
20 1 kreverch
if [ ! -f $1 ]
21 1 kreverch
then
22 1 kreverch
   echo "/!\\ Le fichier de configuration n'existe pas /!\\"
23 1 kreverch
   exit
24 1 kreverch
fi
25 1 kreverch
26 1 kreverch
if [ ! -e $FILE_NAME ]
27 1 kreverch
then
28 1 kreverch
   echo "Replica Configuration file not found"
29 1 kreverch
   exit 1;
30 1 kreverch
fi
31 1 kreverch
echo $FILE_NAME
32 5 kreverch
lastsnapshotReplicated=$(cat $FILE_NAME|grep lastsnapshotreplicated|cut -d "=" -f2)
33 1 kreverch
server=$(cat $FILE_NAME|grep server|cut -d "=" -f2)
34 1 kreverch
nbreplica=$(cat $FILE_NAME|grep nbreplica|cut -d "=" -f2)
35 1 kreverch
namereplica=$(cat $FILE_NAME|grep namereplica|cut -d "=" -f2)
36 1 kreverch
namevolfs=$(cat $FILE_NAME|grep "name="|cut -d "=" -f2)
37 1 kreverch
38 1 kreverch
if [[ -z $namereplica ]] || [[ -z $nbreplica ]] || [[ -z $namevolfs ]]
39 1 kreverch
then
40 1 kreverch
   echo "Incoherence data in $FILE_NAME"
41 1 kreverch
   exit 1
42 1 kreverch
fi
43 1 kreverch
44 1 kreverch
echo "$getConfigSnapshotTool $namevolfs"
45 1 kreverch
getlistSnapshot=$($getConfigSnapshotTool $namevolfs)
46 1 kreverch
if [[ "$getlistSnapshot" == "" ]]
47 1 kreverch
then
48 1 kreverch
  echo "Please, enable a snapshot configuration for $namevolfs"
49 1 kreverch
  exit 1
50 1 kreverch
fi
51 1 kreverch
echo "End of initenv"
52 1 kreverch
}
53 1 kreverch
54 1 kreverch
#****************************************
55 1 kreverch
#* function check server ssh connection
56 1 kreverch
#***************************************
57 1 kreverch
function checkServerConnection {
58 1 kreverch
59 1 kreverch
ssh root@$server ls
60 1 kreverch
61 1 kreverch
if [ "$?" == "1" ]
62 1 kreverch
then
63 1 kreverch
  echo "SSH Connection server $server failed"
64 1 kreverch
  exit 1
65 1 kreverch
fi
66 1 kreverch
67 1 kreverch
}
68 1 kreverch
69 1 kreverch
function del_old_snapshot {
70 1 kreverch
#*** ETAPE SUPPRESSION DES SNAPSHOTS OBSELETES ***#
71 1 kreverch
if [[ "$server" == "" ]]
72 1 kreverch
then
73 1 kreverch
  echo ""
74 1 kreverch
  CPT_SNAP=$(/sbin/zfs list -t snapshot -r $namereplica |cut -d" " -f1 |grep -i $namereplica\@ |wc -l)
75 1 kreverch
  echo "*** Le nombre de snapshot pour $namereplica est : $CPT_SNAP"
76 1 kreverch
  /sbin/zfs list -t snapshot -r $namereplica
77 1 kreverch
78 1 kreverch
  if [ $CPT_SNAP -gt $nbreplica ]
79 1 kreverch
  then
80 1 kreverch
    echo "*** Detection du snapshot le plus ancien"
81 1 kreverch
    for ID_SNAP_OLDER in $(/sbin/zfs list -t snapshot -r $namereplica |cut -d" " -f1 |grep -i $namereplica\@)
82 1 kreverch
    do
83 1 kreverch
      echo "*** Le snapshot le plus ancien est : $ID_SNAP_OLDER"
84 1 kreverch
      break
85 1 kreverch
    done
86 1 kreverch
    /sbin/zfs destroy $ID_SNAP_OLDER
87 1 kreverch
    if [ $? -eq 0 ]
88 1 kreverch
    then
89 1 kreverch
       echo "*** Suppression du snapshot $ID_SNAP_OLDER [OK]"
90 1 kreverch
    else
91 1 kreverch
      echo "/!\\ Suppression du snapshot $ID_SNAP_OLDER [ERROR]."
92 1 kreverch
    fi
93 1 kreverch
  fi
94 1 kreverch
95 1 kreverch
else
96 1 kreverch
  echo ""
97 1 kreverch
  CPT_SNAP=$(ssh root@$server /sbin/zfs list -t snapshot -r $namereplica |cut -d" " -f1 |grep -i $namereplica\@ |wc -l)
98 1 kreverch
  echo "*** Le nombre de snapshot pour $namereplica est : $CPT_SNAP"
99 1 kreverch
  ssh root@$server /sbin/zfs list -t snapshot -r $namereplica
100 1 kreverch
101 1 kreverch
  if [ $CPT_SNAP -gt $nbreplica ]
102 1 kreverch
  then
103 1 kreverch
    echo "*** Detection du snapshot le plus ancien"
104 1 kreverch
    for ID_SNAP_OLDER in $(ssh root@$server /sbin/zfs list -t snapshot -r $namereplica |cut -d" " -f1 |grep -i $namereplica\@)
105 1 kreverch
    do
106 1 kreverch
      echo "*** Le snapshot le plus ancien est : $ID_SNAP_OLDER"
107 1 kreverch
      break
108 1 kreverch
    done
109 1 kreverch
    ssh root@$server /sbin/zfs destroy $ID_SNAP_OLDER
110 1 kreverch
    if [ $? -eq 0 ]
111 1 kreverch
    then
112 1 kreverch
       echo "*** Suppression du snapshot $ID_SNAP_OLDER [OK]"
113 1 kreverch
    else
114 1 kreverch
      echo "/!\\ Suppression du snapshot $ID_SNAP_OLDER [ERROR]."
115 1 kreverch
    fi
116 1 kreverch
  fi
117 1 kreverch
118 1 kreverch
fi
119 1 kreverch
#*** FIN ETAPE SUPPRESSION DES SNAPSHOTS OBSELETES ***#
120 1 kreverch
}
121 1 kreverch
122 1 kreverch
123 1 kreverch
#*************************************
124 1 kreverch
#* function FULL REPLICATION
125 1 kreverch
#*************************************
126 1 kreverch
function fullreplication {
127 1 kreverch
if [[ "$server" == "" ]]
128 1 kreverch
then
129 1 kreverch
    /sbin/zfs send $snapshot2replicate | /sbin/zfs recv $namereplica
130 1 kreverch
    if [[ "$?" == "0" ]]
131 1 kreverch
    then
132 1 kreverch
       cpt=0
133 1 kreverch
       while read line
134 1 kreverch
       do
135 1 kreverch
         if [ $cpt -eq 0 ]
136 1 kreverch
         then
137 1 kreverch
            echo $line
138 5 kreverch
            $(echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$snapshot2replicate:g" >$FILE_NAME)
139 1 kreverch
            cpt=1
140 1 kreverch
         else
141 5 kreverch
            $(echo $line|sed -e "s:lastsnapshotreplicated=.*$:astsnapshotreplicated=$snapshot2replicate:g" >>$FILE_NAME)
142 1 kreverch
         fi
143 1 kreverch
       done <<< "$(cat $FILE_NAME)"
144 1 kreverch
       del_old_snapshot
145 1 kreverch
    fi
146 1 kreverch
147 1 kreverch
else
148 1 kreverch
  checkServerConnection
149 1 kreverch
  if [[ "$snapshot2replicate" != "" ]]
150 1 kreverch
  then
151 1 kreverch
    /sbin/zfs send $snapshot2replicate |ssh root@$server /sbin/zfs recv $namereplica
152 1 kreverch
    if [[ "$?" == "0" ]]
153 1 kreverch
    then
154 1 kreverch
       cpt=0
155 1 kreverch
       while read line
156 1 kreverch
       do
157 1 kreverch
         if [ $cpt -eq 0 ]
158 1 kreverch
         then
159 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$snapshot2replicate:g" >$FILE_NAME
160 1 kreverch
            cpt=1
161 1 kreverch
         else
162 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$snapshot2replicate:g" >>$FILE_NAME
163 1 kreverch
         fi
164 1 kreverch
       done <<< "$(cat $FILE_NAME)"
165 1 kreverch
       del_old_snapshot
166 1 kreverch
    fi
167 1 kreverch
  fi
168 1 kreverch
exit 0
169 1 kreverch
fi
170 1 kreverch
171 1 kreverch
}
172 1 kreverch
173 1 kreverch
174 1 kreverch
175 1 kreverch
function incremental_replication {
176 1 kreverch
177 1 kreverch
echo "Start incremental replication"
178 1 kreverch
if [[ "$server" == "" ]]
179 1 kreverch
then
180 1 kreverch
    cmd="zfs send -i $lastsnapshotReplicated $namevolfs@$lastsnaphot | ssh root@cisticole-test zfs recv $namereplica"
181 1 kreverch
    echo $cmd
182 1 kreverch
    if [[ "$?" == "0" ]]
183 1 kreverch
    then
184 1 kreverch
       cpt=0
185 1 kreverch
       while read line
186 1 kreverch
       do
187 1 kreverch
         if [ $cpt -eq 0 ]
188 1 kreverch
         then
189 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$snapshot2replicate:g" >$FILE_NAME
190 1 kreverch
            cpt=1
191 1 kreverch
         else
192 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$snapshot2replicate:g" >$FILE_NAME
193 1 kreverch
         fi
194 1 kreverch
       done <<< "$(cat $FILE_NAME)"
195 1 kreverch
       del_old_snapshot
196 1 kreverch
    fi
197 1 kreverch
198 1 kreverch
else
199 1 kreverch
  checkServerConnection
200 1 kreverch
if [ "$snaphot2replicate" == "" ]
201 1 kreverch
then
202 1 kreverch
   exit 1
203 1 kreverch
else
204 1 kreverch
    zfs send -i $lastsnapshotReplicated $namevolfs@$snaphot2replicate | ssh root@cisticole-test zfs recv $namereplica
205 1 kreverch
    if [[ "$?" == "0" ]]
206 1 kreverch
    then
207 1 kreverch
       cpt=0
208 1 kreverch
       while read line
209 1 kreverch
       do
210 1 kreverch
         echo $line
211 1 kreverch
         if [ $cpt -eq 0 ]
212 1 kreverch
         then
213 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$namevolfs@$snaphot2replicate:g" >$FILE_NAME
214 1 kreverch
            cpt=1
215 1 kreverch
         else
216 5 kreverch
            echo $line|sed -e "s:lastsnapshotreplicated=.*$:lastsnapshotreplicated=$namevolfs@$snaphot2replicate:g" >>$FILE_NAME
217 1 kreverch
         fi
218 1 kreverch
       done <<< "$(cat $FILE_NAME)"
219 1 kreverch
       del_old_snapshot
220 1 kreverch
    fi
221 1 kreverch
  fi
222 1 kreverch
fi
223 1 kreverch
224 1 kreverch
}
225 1 kreverch
226 1 kreverch
227 1 kreverch
#****************************************
228 1 kreverch
#* NO INTERACTIVE MODE
229 1 kreverch
#****************************************
230 1 kreverch
function nointeractive {
231 1 kreverch
232 1 kreverch
#--- check and init env ---#
233 1 kreverch
initenv
234 1 kreverch
235 1 kreverch
fileconf=$($getConfigSnapshotTool $namevolfs|grep fileconf|cut -d "=" -f2)
236 1 kreverch
NBsnapshot=$(/sbin/zfs list -H -r -t snapshot $namevolfs|wc -l)
237 1 kreverch
238 1 kreverch
if [[ $NBsnapshot -eq 0 ]]
239 1 kreverch
then
240 1 kreverch
   echo "no snapshot, start snapshoting ..."
241 1 kreverch
   echo "$zfsSnapshot $fileconf"
242 1 kreverch
fi
243 1 kreverch
244 1 kreverch
#--- FULL REPLICATION ---#
245 1 kreverch
if [[ $NBsnaphot -eq 1 ]] || [[ "$lastsnapshotReplicated" == "" ]]
246 1 kreverch
then
247 1 kreverch
   echo "Replication by incremental snapshot is not possible"
248 1 kreverch
   echo "Start FULL Replication ..."
249 1 kreverch
   while read line
250 1 kreverch
   do
251 1 kreverch
     snapshot2replicate=$(echo $line |echo $line |sed -e "s/ \+/ /g"|cut -d " " -f1)
252 1 kreverch
   done <<< "$(/sbin/zfs list -H -r -t snapshot $namevolfs)"
253 1 kreverch
   fullreplication
254 1 kreverch
fi
255 1 kreverch
256 1 kreverch
#-- INCREMENTAL REPLICATION ---#
257 1 kreverch
if [[ $NBsnapshot -gt 1 ]]
258 1 kreverch
then
259 1 kreverch
  cpt=1
260 1 kreverch
  while read line
261 1 kreverch
  do
262 1 kreverch
263 1 kreverch
    if [[ $cpt -eq 1 ]]
264 1 kreverch
    then
265 1 kreverch
       snaphot2replicate=$(echo $line |sed -e "s/ \+/ /g"|cut -d " " -f1|cut -d "@" -f2)
266 1 kreverch
       echo $lastsnaphot
267 1 kreverch
       echo $snaphot2replicate
268 1 kreverch
       break
269 1 kreverch
    fi
270 1 kreverch
    cpt=$cpt+1
271 1 kreverch
  done <<< "$(/sbin/zfs list -H -r -t snapshot $namevolfs|tac)"
272 1 kreverch
  lastsnapshot=$(echo $lastsnapshotReplicated |sed -e "s/ \+/ /g"|cut -d " " -f1|cut -d "@" -f2)
273 1 kreverch
274 1 kreverch
  if [ "$snaphot2replicate" == "$lastsnapshot" ]
275 1 kreverch
  then
276 1 kreverch
     echo "Nothing to replicate"
277 1 kreverch
     exit 1
278 1 kreverch
279 1 kreverch
  fi
280 1 kreverch
  check_lastsnapshotReplica=$(ssh root@cisticole-test /sbin/zfs list -H -r -t snapshot $namereplica |grep $lastsnapshot|wc -l)
281 1 kreverch
  check_currentsnapshotReplica=$(ssh root@cisticole-test /sbin/zfs list -H -r -t snapshot $namereplica |grep $snaphot2replicate=|wc -l)
282 1 kreverch
  if [[ $check_lastsnapshotReplica -eq 0 ]]
283 1 kreverch
  then
284 1 kreverch
     echo "Incoherence, incremental replication failed : $lastsnapshotReplicated is missing"
285 1 kreverch
     exit 1
286 1 kreverch
  fi
287 1 kreverch
288 1 kreverch
  if [[ $check_currentsnapshotReplica -eq 1 ]]
289 1 kreverch
  then
290 1 kreverch
    echo "No replica to do, $lastSnapshot already exists"
291 1 kreverch
    exit 1
292 1 kreverch
  fi
293 1 kreverch
fi
294 1 kreverch
 echo $snaphot2replicate
295 1 kreverch
incremental_replication
296 1 kreverch
}
297 1 kreverch
298 1 kreverch
nointeractive