source: client/shared/scripts/cloneRemoteFromMaster @ 3cedc88

Last change on this file since 3cedc88 was 62ccd9b, checked in by adv <adv@…>, 14 years ago

cloneRemoteFromMaster (engine,asistenteweb) ademas de multicast por unicast ticket:315

git-svn-id: https://opengnsys.es/svn/branches/version1.0@1537 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 7.6 KB
Line 
1#!/bin/bash
2# Script para la clonacion de particiones remotas.
3# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin).
4# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga.
5# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga.
6# Version: 0.1.0  2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga.
7
8TIME1=$SECONDS
9PROG="$(basename $0)"
10#if [ $# -ne 5 ]; then
11 #   ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño"
12#    exit $?
13#fi
14
15
16#/**  @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos
17#@param  $1 str_origen admite dirección IP del equipo Master.
18#@param $2 str_origen  admite int_disk    str_REPO|str_CACHE
19#@param $3 str_origen  admite int partorigen   stre_imagen
20#@param $4 str_sesion multicast
21#@param $5 int_disco_destino
22#@param $6 init_particion_destino
23#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
24#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
25#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
26#@return la propia de la herramienta de clonacion partimage o ntfsclone
27#
28
29
30
31FOUNDSOURCE=false
32HOSTIP=`ogGetIpAddress`
33
34SESSIONMCASTSERVER=$4
35SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'`
36DISKTARGET=$5
37PARTTARGET=$6
38TOOLCLONE=$7
39COMPRESOR=$8
40
41TIME1=$SECONDS
42PROG="$(basename $0)"
43if [ $# -lt 1 ]; then
44        echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
45        exit 1
46fi
47
48if [  $# -lt 6  ]; then
49    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition"
50    exit $?
51fi
52
53#Chequeamos variables-constantes
54
55# check HOSTIP
56if [ -z "$HOSTIP" ]
57then
58        source /tmp/net-eth0.conf
59        HOSTIP=`ogGetIpAddress`
60fi
61MODEMASTER=false
62
63
64#Chequeamos parametros.
65
66# is $1 a valid IP
67MASTERIP=$1
68
69# contendor origen (disco particion o file)
70
71PROTOCOL=$4
72# Controlamos si multicast o unicast.
73case $PROTOCOL in
74        MULTICAST|multicast)
75                SESSIONMCASTSERVER=$5
76                SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'`
77        ;;
78        UNICAST|unicast)
79                SESSIONUCASTSERVER=$5
80        SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP
81        ;;
82esac
83
84
85# contenedor destino (disco particion)
86DISKTARGET=$6
87PARTTARGET=$7
88
89#herramienta de compresión.
90TOOLCLONE=$8
91COMPRESOR=$9
92
93
94###IMG=$(ogGetPath $2 $3.img)
95###echo $IMG
96
97# Check command in Master (sendFile or sendPartition)
98
99case $MASTERIP in
100        $HOSTIP)
101                ogGetPath $2 $3.img
102                RC=`echo $?`
103                echo "$RC comenzando control del valor del origen $2 $3"
104                if [ $RC == "0" ]
105                then
106                        echo "mode senfile"
107                        IMG=$(ogGetPath $2 $3.img)
108                        MODEMASTER=SENDFILE
109                else
110                        if [ $(ogDiskToDev $2 $3) ]
111                        then
112                                echo "mode sendpartitons"
113                                DISKSOURCE=$2
114                                PARTSOURCE=$3
115                                MODEMASTER=SENDPARTITION
116                        fi
117                fi
118
119                echo "modo "  $MODEMASTER
120
121                if [ "$MODEMASTER" == "false" ]
122                then
123                        echo "cloneRemote: origen no encontrado"
124                        exit 1
125                else
126                        echo "cloneRemote: sistema preparando para un $MODEMASTER"
127                fi
128
129                case "$MODEMASTER" in
130                        SENDPARTITION)
131                                echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER"
132                                echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
133                                ogUnmount $2 $3 || exit
134                                #Obtener tamaño de la partición.
135                                SIZE=$(ogGetPartitionSize $2 $3) 
136                                # Reducir el sistema de archvios.
137                                echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
138                                ogReduceFs $2 $3 || exit 1
139
140                                #echo "salida de ogReduceFS" $?
141                                #if [ $? == 1 ]
142                                #then
143                                #       echo "no se ha podido reducir FS"
144#                               exit 1
145#
146                                REDSIZE=$(ogGetFsSize $2 $3)   
147                                echo "[20]: Reducido el  sistema de archivos a $REDSIZE  $DISKSOURCE $PARTSOURCE"
148                                if [ $REDSIZE -lt $SIZE ]; then
149                                        echo "[24] Redimensionar partición a $REDSIZE KB."
150                                        ogSetPartitionSize $2 $3 $REDSIZE
151                                fi
152                                echo "[25] ofreciendo informacion a los clientes-slaves"
153                                faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" &
154                               
155                                echo "[30] Enviando $PROTOCOL "
156                                case $PROTOCOL in
157                                        MULTICAST|multicast)
158                                                echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR
159                                                ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR
160                                        ;;
161                                        UNICAST|unicast)
162                                                sleep 60
163                                                echo "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
164                                                ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR
165                                        ;;
166                                esac   
167                               
168                                if [ $REDSIZE -lt $SIZE ]; then
169                                        echo "[85] Redimensionar partición a $SIZE KB."
170                                        ogSetPartitionSize $2 $3 $SIZE
171                                        echo "[90] Extender sistema de archivos."
172                                        ogExtendFs $2 $3
173                                fi
174                                pkill faucet
175                        ;;
176                        SENDFILE)
177                                echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER"
178                                echo "[10]: Preparando Imagen: $IMG"
179                                TOOLCLONE=$(ogGetImageProgram $2 $3)
180                                COMPRESOR=$(ogGetImageCompressor $2 $3)
181                                REDSIZE=$(ogGetImageSize $2 $3)
182                                echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE"
183                                faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" &
184                               
185                                echo "[30] Enviando $PROTOCOL:"
186                                echo "ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
187                                ogMcastSendFile  $2 $3.img $SESSIONMCASTSERVER
188                               
189                                pkill faucet   
190                ;;
191                esac
192                pkill faucet
193        ;;
194        *)
195                echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER"
196                ogUnmount $DISKTARGET $PARTTARGET
197                echo "[24] Cliente intentando conectar con el master $MASTERIP"
198                echo -n "[25] Buscando informacion extra sobre la clonacion: "
199                # While para esperar al servidor
200                while [ -z "$INFOEXTRA" ]
201                do
202                        INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
203                        sleep 10
204                        echo -n "."
205                done           
206                TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}')
207                COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}')
208                SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}')
209                echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
210                # comprobamos que el tamaño de a imagen es menor que la del cliente.
211                SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET)
212                if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
213                then   
214                        echo "[30] Iniciando Cliente $PROTOCOL "
215                                case $PROTOCOL in
216                                        MULTICAST|multicast)
217                                                echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
218                                                ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR"
219                                                        ;;
220                                        UNICAST|unicast)
221                                                echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
222                                                ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
223                                        ;;
224                                esac
225                       
226                       
227                        echo "[90] Extender sistema de archivos"
228                        ogExtendFs $DISKTARGET $PARTTARGET
229                        # Cambiar nombre en sistemas Windows.
230                        if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then
231                                HOST=$(ogGetHostname)
232                                HOST=${HOST:-"UNKNOWN"}
233                                echo "[90] Cambiar nombre Windows a \"$HOST\"."
234                                ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST"
235                        fi             
236                else
237                        echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
238                        echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET  tamanio de la imagen= $SIZEIMAGE"
239                        exit 1
240                fi
241        ;;
242esac
243TIME=$[SECONDS-TIME1]
244echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
245
246
Note: See TracBrowser for help on using the repository browser.