source: client/shared/scripts/cloneRemoteFromMaster @ 9e63173

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since 9e63173 was 2e6acd9, checked in by adv <adv@…>, 14 years ago

version 1.0.1 #392 cloneRemoteFromMaster => si el sistema de archivos de la particion destino está corrupto; formatear y volver a calcular tamaño

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

  • Property mode set to 100755
File size: 10.2 KB
Line 
1#!/bin/bash
2
3#/**
4#         cloneremoteFromMaster
5#@brief   Restaura una particion o imagen sobre las particiones de equipos cliente remotos
6#@param 1 str_origen admite dirección IP del equipo Master.
7#@param 2 str_origen  admite int_disk    str_REPO|str_CACHE
8#@param 3 str_origen  admite int partorigen   stre_imagen
9#@param 4 str_sesion multicast|unicast
10#@param $5 int_disco_destino
11#@param $6 init_particion_destino
12#@param $7 str_tool_clone
13#@param $8 str_tool_compresor
14#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
15#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
16#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
17#@return 
18#@exception OG_ERR_FORMAT     formato incorrecto.
19#@exception $OG_ERR_IMGSIZEPARTITION=30   #Imagen demasiado pequeña para ser clonada
20#@exception OG_ERR_REDUCEFS=17     #error al reducir sistema de archivos.
21#@exception OG_ERR_EXTENDFS=18     #errror al expandir el sistema de archivos.
22#@exception OG_ERR_UCASTSYNTAXT=50  # Error en la generación de sintaxis de transferenica unicast
23#@exception OG_ERR_UCASTSENDPARTITION=51  # Error en envio UNICAST de una particion
24#@exception OG_ERR_UCASTSENDFILE=52  # Error en envio UNICAST de un fichero
25#@exception OG_ERR_UCASTRECEIVERPARTITION=53  #Error en la recepcion UNICAST de una particion
26#@exception OG_ERR_UCASTRECEIVERFILE=54  #Error en la recepcion UNICAST de un fichero
27#@exception OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast.
28#@exception OG_ERR_MCASTSENDFILE=56  # Error en envio MULTICAST de un fichero
29#@exception OG_ERR_MCASTRECEIVERFILE=57  #Error en la recepcion MULTICAST de un fichero
30#@exception OG_ERR_MCASTSENDPARTITION=58  # Error en envio MULTICAST de una particion
31#@exception OG_ERR_MCASTRECEIVERPARTITION=59  # Error en la recepcion MULTICAST de una particion
32#@exception OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER
33#@note   
34#@todo:
35#@version 0.9.1 - integración con OpenGnsys
36#@author  Antonio J. Doblas Viso. Universidad de Malaga.
37#@date   2009/03/17
38#@version 0.9.2 - adaptacion a OpenGnsys
39#@author  Antonio J. Doblas Viso. Universidad de Malaga.
40#@date    2010/07/27
41#@version 0.1.0 - gestion unicast
42#@author  Antonio J. Doblas Viso. Universidad de Malaga.
43#@date    2011/01/26
44#@version 1.0 - control de errores para el ogAdmServer
45#@author  Antonio J. Doblas Viso. Universidad de Malaga.
46#@date    2011/04/24
47#@version 1.0 - Uso de parted para controlar tamaño particion destino. Requiere Formateo FS previo -parted usa FS para el tamanyo".
48#@author  Antonio J. Doblas Viso. Universidad de Malaga.
49#@date    2011/04/24
50
51#*/ ##
52
53
54TIME1=$SECONDS
55PROG="$(basename $0)"
56if [ $# -lt 1 ]; then
57        echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
58        exit 1
59fi
60
61if [  $# -lt 6  ]; then
62    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition"
63    exit $?
64fi
65
66# Obtener información de los parámetros de entrada.
67HOSTIP=`ogGetIpAddress`
68if [ -z "$HOSTIP" ]
69then
70        source /tmp/net-eth*
71        HOSTIP=`ogGetIpAddress`
72fi
73MASTERIP=$1
74PROTOCOL=$4
75case $PROTOCOL in
76        MULTICAST|multicast)
77                SESSIONMCASTSERVER=$5
78                SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'`
79        ;;
80        UNICAST|unicast)
81                SESSIONUCASTSERVER=$5
82        SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP
83        ;;
84esac
85# contenedor destino (disco particion)
86DISKTARGET=$6
87PARTTARGET=$7
88#herramienta de compresión.
89TOOLCLONE=$8
90COMPRESOR=$9
91
92pkill faucet
93
94# Preparando Instrucción según sea Master o Client
95case $MASTERIP in
96        $HOSTIP)
97                echo "[1] Equipo Master preparando el origen de los datos a enviar"
98                ogGetPath $2 $3.img &>/dev/null; RC=$?;
99                ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?;
100
101                if [ "$RC" == "0" ]; then
102                        IMG=$(ogGetPath $2 $3.img); MODEMASTER=SENDFILE
103                elif [ "$RETVAL" == "0" ]; then
104                        DISKSOURCE=$2; PARTSOURCE=$3; MODEMASTER=SENDPARTITION
105                else
106                        ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $?
107                fi
108                echo $MODEMASTER
109                # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
110                                       
111                case "$MODEMASTER" in
112                        SENDPARTITION)
113                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
114                                faucet 4000 --out echo "WORKING" &                     
115                                echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
116                                ogUnmount $2 $3 || exit $?
117                                echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
118                                #Obtener tamaño de la partición.
119                                SIZE=$(ogGetPartitionSize $2 $3) 
120                                # Reducir el sistema de archvios.
121                                ogReduceFs $2 $3 || exit $?
122                                REDSIZE=$(ogGetFsSize $2 $3)   
123                                echo "[20]: Reducido el  sistema de archivos a $REDSIZE  $DISKSOURCE $PARTSOURCE"
124                                if [ $REDSIZE -lt $SIZE ]; then
125                                        echo "[24] Redimensionar partición a $REDSIZE KB."
126                                        ogSetPartitionSize $2 $3 $REDSIZE
127                                fi
128                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
129                                pkill faucet
130                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
131                                               
132                                case $PROTOCOL in
133                                        MULTICAST|multicast)
134                                                echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
135                                                ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
136                                        ;;
137                                        UNICAST|unicast)
138                                                sleep 60
139                                                echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
140                                                ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
141                                        ;;
142                                esac   
143                               
144                                if [ $REDSIZE -lt $SIZE ]; then
145                                        echo "[85] Redimensionar partición a $SIZE KB."
146                                        ogSetPartitionSize $2 $3 $SIZE
147                                        echo "[90] Extender sistema de archivos."
148                                        ogExtendFs $2 $3
149                                fi
150                                pkill faucet
151                        ;;
152                        SENDFILE)                               
153                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
154                                echo "[10]: Preparando Imagen: $IMG"
155                                TOOLCLONE=$(ogGetImageProgram $2 $3)
156                                COMPRESOR=$(ogGetImageCompressor $2 $3)
157                                REDSIZE=$(ogGetImageSize $2 $3)
158                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
159                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
160                                case $PROTOCOL in
161                                        MULTICAST|multicast)
162                                                echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
163                                                ogMcastSendFile  $2 $3.img $SESSIONMCASTSERVER  || RETVAL=$?
164                                                ;;
165                                        UNICAST|unicast)
166                                                sleep 60
167                                                echo "[29] ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER"
168                                                ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER || RETVAL=$?
169                                        ;;
170                                esac                                                   
171                                pkill faucet   
172                        ;;
173                esac
174                #exit $RETVAL
175        exit 0
176                # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
177        ;;
178        *)
179                echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL"
180                # TODO: si el cliente no está en la lista de clientes UNICAST salir.
181                case $PROTOCOL in
182                        UNICAST|unicast)
183                                echo "$SESSIONUCASTSERVER" | grep $HOSTIP || exit 1                     
184                        ;;
185                esac   
186                echo "[2] Desmontando particion destino"         
187                ogUnmount $DISKTARGET $PARTTARGET
188                echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
189                sleep 10
190                TIMEWAITMASTER=120
191                TIMEWAITING=0
192                GETINFO="NONE"
193                while [ "${GETINFO}" != "OK" ]
194                do
195                        INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
196                        sleep 10; echo -n "."
197                        #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar
198                        [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10
199                        [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $?
200                        #Si primer parametro desde el server es READY, salimos del bucle
201                        GETINFO=$(echo $INFOEXTRA | awk '{print $1}')
202                        [ "$GETINFO" == "READY" ] && GETINFO=OK
203                done           
204                echo $INFOEXTRA
205                TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
206                COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
207                SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
208                echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
209                SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
210                if [ -z $SIZEPARTTARGET ]; then
211                        echo "[5] TODO Formateando particion destino si no es accesible por parted"     
212                        ogFormat $DISKTARGET $PARTTARGET
213                        SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
214                fi
215                echo "[29] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET"   
216                # comprobamos que el tamaño de a imagen es menor que la del cliente.
217                if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
218                then   
219                        echo "[30] Iniciando Cliente $PROTOCOL "
220                                case $PROTOCOL in
221                                        MULTICAST|multicast)
222                                                echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
223                                                ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR"  || exit $?
224                                                        ;;
225                                        UNICAST|unicast)
226                                                echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
227                                                ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $?
228                                        ;;
229                                esac
230                       
231                       
232                        echo "[90] Extender sistema de archivos"
233                        ogExtendFs $DISKTARGET $PARTTARGET
234                        # Cambiar nombre en sistemas Windows.
235                        if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then
236                                HOST=$(ogGetHostname)
237                                HOST=${HOST:-"UNKNOWN"}
238                                echo "[90] Cambiar nombre Windows a \"$HOST\"."
239                                ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST"
240                        fi             
241                else
242                    # Si el tamaño de los datos recibidos es más grande que la particion destino
243                        ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET  menor que la imagen= $SIZEIMAGE"; exit $?
244                fi
245        ;;
246esac
247TIME=$[SECONDS-TIME1]
248echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
249
250
Note: See TracBrowser for help on using the repository browser.