summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2014-04-21 11:58:04 +0000
committeririna <irinagomez@us.es>2014-04-21 11:58:04 +0000
commitc8bbcdc04f2c3960623c414552dbd1450451b162 (patch)
treed4301ac25aee8d1fe01b275f7fb11e19d4d72e70
parent5b893bee9f58790a7d1aaca28ae60324421d45ee (diff)
#565 se resuelve problema de corromper la imagen sincronizada al reducirla
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4240 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-xadmin/Sources/Services/ogAdmRepoAux22
-rwxr-xr-xclient/engine/Rsync.lib48
-rw-r--r--client/shared/etc/lang.ca_ES.conf4
-rw-r--r--client/shared/etc/lang.en_GB.conf4
-rw-r--r--client/shared/etc/lang.es_ES.conf4
-rwxr-xr-xclient/shared/scripts/createBaseImage6
-rwxr-xr-xclient/shared/scripts/createDiffImage6
-rwxr-xr-xclient/shared/scripts/restoreBaseImage22
-rwxr-xr-xclient/shared/scripts/restoreDiffImage4
9 files changed, 72 insertions, 48 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux
index 05bac0ce..7d21b241 100755
--- a/admin/Sources/Services/ogAdmRepoAux
+++ b/admin/Sources/Services/ogAdmRepoAux
@@ -101,9 +101,10 @@ case "$PARM1" in
IMGFILE="$REPODIR/$PARM2.$IMGEXT"
IMGDIR="$(dirname $IMGFILE)"
[ -d $IMGDIR ] || mkdir -p $IMGDIR
-
mkdir -p "$DIRMOUNT"
+ LOCKFILE="$IMGFILE.lock"
+
SIZEREQUIRED="$PARM4"
# Si existe la imagen hacemos copia de seguridad y la redimesionamos
@@ -173,7 +174,8 @@ case "$PARM1" in
exit $RETVAL
fi
- touch "$DIRMOUNT/ogimg.info"
+ #touch "$DIRMOUNT/ogimg.info"
+ echo "mounted"> "$LOCKFILE"
TIME2=$[SECONDS-TIME]
echolog "Fin creación/redimension de la imagen: $[TIME2/60]m $[TIME2%60]s"
# Si existe dispositivo loop lo borramos.
@@ -194,22 +196,30 @@ case "$PARM1" in
DIRMOUNT="$DIRMOUNT.diff"
fi
IMGFILE="$REPODIR/$PARM2.$IMGEXT"
+ LOCKFILE="$IMGFILE.lock"
echolog "Montamos la imagen $IMGFILE "
mkdir -p "$DIRMOUNT"
mountImage "$IMGFILE" "$DIRMOUNT" ro || (echolog "Error al montar la imagen"; exit 1)
;;
UMOUNT_IMAGE)
# Desmontamos el fichero imagen.
- # Si el directorio esta ocupado no se desmontará
+ # Si el directorio esta ocupado no se desmontará
#1 UMOUNT_IMAGE
#2 nombre imagen
#3 tipo de imagen [ img | diff ]
IMGTYPE="$PARM3"
DIRMOUNT="$REPODIR/mount/$PARM2"
- [ "$IMGTYPE" == "diff" ] && DIRMOUNT="$DIRMOUNT.$IMGTYPE"
+ if [ "$IMGTYPE" == "img" ]; then
+ IMGEXT="img"
+ else
+ DIRMOUNT="$DIRMOUNT.$IMGTYPE"
+ IMGEXT="img.diff"
+ fi
+ LOCKFILE="$REPODIR/$PARM2.$IMGEXT.lock"
echolog "Desmontamos la imagen $PARM2 $PARM3 "
umount $DIRMOUNT
rmdir $DIRMOUNT
+ [ -f $LOCKFILE ] && sed -i s/mounted//g $LOCKFILE
;;
REDUCE_IMAGE)
@@ -217,7 +227,7 @@ case "$PARM1" in
#1 REDUCE_IMAGE
#2 Nombre Imagen
#3 Tipo de imagen [ img |diff ]
- DIRMOUNT="$REPODIR""mount/${PARM2}"
+ DIRMOUNT="${REPODIR}mount/${PARM2}"
if [ "$PARM3" == "img" ] ; then
IMGEXT="img"
else
@@ -225,6 +235,7 @@ case "$PARM1" in
DIRMOUNT="$DIRMOUNT.diff"
fi
IMGFILE="$REPODIR$PARM2.$IMGEXT"
+ LOCKFILE="$IMGFILE.lock"
[ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
# Solo funciona si la imagen es ext4, si no nos salimos sin error
@@ -267,6 +278,7 @@ case "$PARM1" in
echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE"
truncate --size="$EXTSIZE"k $IMGFILE
rmdir $DIRMOUNT
+ echo "reduced" >$LOCKFILE
;;
default)
diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib
index 2c05b26f..0d750800 100755
--- a/client/engine/Rsync.lib
+++ b/client/engine/Rsync.lib
@@ -95,7 +95,8 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
# Monto la imagen
ogMountImage $1 "$2" $3 &>/dev/null
[ $? -eq 0 ] || return $( ogRaiseError $OG_ERR_IMAGE "$3 $4"; echo $?)
- touch "$DIRMOUNT/ogimg.info"
+ #touch "$DIRMOUNT/ogimg.info"
+ echo "mounted"> $IMGFILE.lock
# Si existe dispositivo de loop lo borro.
[ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
@@ -576,6 +577,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $IMGTYPE)"
umount "$DIRMOUNT"
rmdir "$DIRMOUNT"
+ [ -f $IMGFILE.lock ] && sed -i s/"mounted"//g $IMGFILE.lock
else
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
@@ -616,34 +618,42 @@ echo "$DIRMOUNT"
#/**
-# ogWaitMountImage image_name extension imagen_size
+# ogWaitSyncImage image_name extension stado imagen_size
#@brief Se espera un tiempo a que se monte la imagen en el servidor.
#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación.
#@param 1 Respositorio [ REPO | CACHE ]
#@param 2 Nombre Imagen
#@param 3 Tipo imagen [ img | diff ]
-#@param 4 Tamaño imagen (opcional)
+#@param 4 Estado [ mounted | reduced ]
+#@param 5 Tamaño imagen (opcional)
#*/
-function ogWaitMountImage () {
-local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX
+function ogWaitSyncImage () {
+local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX LOCKFILE IMGDIR IMGEXT STATE
TIME=$SECONDS
# Ayuda o menos de 5 parametros y la imagen no es basica
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME": "$MSG_HELP_ogWaitMountImage" \
- "$FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] " \
+ "$FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " \
"$FUNCNAME REPO Ubuntu12 img 30000000" \
"$FUNCNAME CACHE Windows7 diff "
return
fi
-if [ $# -lt 2 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] "
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] "
return $?
fi
-SIZE=${4:-"300000"}
+SIZE=${5:-"300000"}
+STATE="$4"
+ogCheckStringInGroup "$STATE" "mounted reduced" || \
+ return $(ogRaiseError command $OG_ERR_FORMAT "STATE = [ mounted | reduced ]" )
+
+IMGDIR="$(ogGetParentPath "$1" "/$2")"
+[ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+LOCKFILE="${IMGDIR}/$(basename "/$2").$IMGEXT.lock"
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $3)"
@@ -653,10 +663,14 @@ fi
echo -n -e " $MSG_SYNC_SLEEP: $DIRMOUNT\n #" | tee -a $OGLOGSESSION $OGLOGFILE
+# Comprobamos: mounted -> que exista $DIRMOUNT/ogimg.info o que el fichero de lock contenga mounted
+# reduced -> que el fichero de lock contenga reduced.
+
# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
let TIMEOUT=$SIZE/$CREATESPEED
[ $TIMEOUT -lt 60 ] && TIMEOUT=60
-until [ -f "$DIRMOUNT/ogimg.info" ] ; do
+until $(grep -i $STATE $LOCKFILE &>/dev/null) ; do
+ [ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho session "" && return 0
TIMEAUX=$[SECONDS-TIME]
[ "$TIMEAUX" -lt "$TIMEOUT" ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT"; echo $?)
echo -n "#" | tee -a $OGLOGSESSION $OGLOGFILE
@@ -702,21 +716,19 @@ file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null || return 0
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
# Al montar se comprueba la existencia de la imagen
- DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.}) "
-
+ DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.})"
AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}')
# Si el espacio libre menor que 500Mb nos salimos
if [ $AVAILABLE -lt 200000 ]; then
ogUnmountImage $1 "$2" ${IMGEXT#*\.}
+ echo "reduced" > "$IMGFILE.lock"
return 0
fi
-
# Calculamos la diferencia entre el tamaño interno y externo
EXTSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
let EDGESIZE=$EXTSIZE-$INTSIZE
-
ogUnmountImage $1 "$2" ${IMGEXT#*\.}
LOOPDEVICE=$(losetup -f)
losetup $LOOPDEVICE "$IMGFILE"
@@ -724,7 +736,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
# Redimensiono sistema de ficheros
echo " resize2fs -fpM $LOOPDEVICE"
resize2fs -fpM $LOOPDEVICE |tee -a $OGLOGCOMMAND
- ogMountImage $1 "$2" ${IMGEXT#*\.}
+ ogMountImage $1 "$2" ${IMGEXT#*\.} >/dev/null
# Calculamos el tamaño final del archivo
INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
@@ -738,8 +750,8 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
echo " truncate --size=\"$EXTSIZE\"k $IMGFILE "
truncate --size="$EXTSIZE"k "$IMGFILE"
- # Desmonto y desbloqueo la imagen
- rm -f "$IMGFILE.lock"
+ # Desmonto la imagen
+ echo "reduced" > "$IMGFILE.lock"
rmdir "$DIRMOUNT"
else
@@ -799,7 +811,7 @@ file "$IMGFILE" | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/n
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
#*/
-ogCheckSyncImage (){
+function ogCheckSyncImage () {
local IMGEXT IMGDIR IMGFILE DIRMOUNT RETVAL
if [ "$*" == "help" ]; then
diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf
index 789eae76..47c1ea51 100644
--- a/client/shared/etc/lang.ca_ES.conf
+++ b/client/shared/etc/lang.ca_ES.conf
@@ -31,7 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER"
-MSG_ERR_DONTMOUNT_IMAGE="Error al montar la imagen"
+MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
MSG_ERR_NOTDIFFERENT="No se detectan diferencias entre la imagen basica y la particion."
@@ -255,7 +255,7 @@ MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
-MSG_SYNC_SLEEP="Espera que se monte la imagen"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
# mensajes syncronizadas complementarios a errores
MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf
index d26b90cd..c8ea82d1 100644
--- a/client/shared/etc/lang.en_GB.conf
+++ b/client/shared/etc/lang.en_GB.conf
@@ -31,7 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error in connecting a Unicast|Multicast session to the master"
-MSG_ERR_DONTMOUNT_IMAGE="Failed to mount image"
+MSG_ERR_DONTMOUNT_IMAGE="Failed to mount/reduce image"
MSG_ERR_DONTUNMOUNT_IMAGE="Failed to unmount image"
MSG_ERR_DONTSYNC_IMAGE="Not synchronized image"
MSG_ERR_NOTDIFFERENT="No differences were detected between the basic image and partition"
@@ -255,7 +255,7 @@ MSG_HTTPLOG_NOUSE="NOT POWEROFF THIS COMPUTER"
MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
-MSG_SYNC_SLEEP="Espera que se monte la imagen"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
# mensajes syncronizadas complementarios a errores
MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index b8a95c2d..3d26227d 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -31,7 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepción Multicast de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envío Multicast de una partición"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepción Multicast de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error en la conexión de una sesión Unicast|Multicast con el Master"
-MSG_ERR_DONTMOUNT_IMAGE="Error al montar la imagen"
+MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
MSG_ERR_NOTDIFFERENT="No se detectan diferencias entre la imagen básica y la partición"
@@ -255,7 +255,7 @@ MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
-MSG_SYNC_SLEEP="Espera que se monte la imagen"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
# mensajes syncronizadas complementarios a errores
MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
diff --git a/client/shared/scripts/createBaseImage b/client/shared/scripts/createBaseImage
index 4aa5acd3..538aa74b 100755
--- a/client/shared/scripts/createBaseImage
+++ b/client/shared/scripts/createBaseImage
@@ -139,7 +139,7 @@ TIMEAUX3=$[SECONDS-TIME2]
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
# Esperamos que el servidor termine de crear y montar la imagen
-ogWaitMountImage "$3" "$4" $IMGEXT $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+ogWaitSyncImage "$3" "$4" $IMGEXT "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
# Sincronizamos los datos de la particion con la imagen.
ogEcho log session "[70] $MSG_HELP_ogSyncCreate."
@@ -153,12 +153,12 @@ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TI
# Reducimos la imagen: solo para kernel <= 3.7, imagenes con FS ext4. (Desmonta y desbloquea la imagen)
ogEcho log session "[80] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT"
ogReduceImage $3 "$4" $IMGEXT
-# TODO: necesaria funcion que espere a que se reduzca la imagen para continuar el script
+# Esperamos que el servidor termine de reducir la imagen
+ogWaitSyncImage "$3" "$4" $IMGEXT "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
echo " " > $OGLOGCOMMAND
# Comprobamos que la imagen esta bien detectacdo que es un sistema de ficheros.
ogEcho log session "[95] $MSG_HELP_ogCheckSyncImage"
-sleep 10
ogCheckSyncImage $3 "$4" "img" || exit $(ogRaiseError session $OG_ERR_IMAGE "$3 $4 img" ; echo $?)
#resumen de la operacion
diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage
index ef4b280f..e9806939 100755
--- a/client/shared/scripts/createDiffImage
+++ b/client/shared/scripts/createDiffImage
@@ -138,7 +138,7 @@ ogEcho log session "[40] $MSG_HELP_createDiffImage: $1 $2 $3 $4"
ogMountImage $3 "$4" $IMGEXT >/dev/null
# Comprobar que la imagen completa se ha montado
-ogWaitMountImage $3 "$4" $IMGEXT || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+ogWaitSyncImage $3 "$4" $IMGEXT "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
# Creamos la informacion de la imagen.
ogEcho log session "[50] $MSG_HELP_ogCreateInfoImage "
@@ -181,7 +181,7 @@ ogEcho log session "[60] $MSG_HELP_ogCreateFileImage."
ogCreateFileImage $3 "$5" $DIFFTYPE $SIZEREQUIRED
# Esperamos que se monte la imagen despues de crarla en el servidor
-ogWaitMountImage "$3" "$5" "$DIFFTYPE" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $5 $DIFFTYPE: time_out."; echo $?)
+ogWaitSyncImage "$3" "$5" "$DIFFTYPE" "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $5 $DIFFTYPE: time_out."; echo $?)
ogEcho log session "[70] $MSG_HELP_ogSyncCreate"
# Copio los datos a la imagen diferecial :
@@ -194,6 +194,8 @@ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[
# Reducimos la imagen diferencial -> solo para kernel <= 3.7, imagenes con FS ext4
ogEcho log session "[80] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT"
ogReduceImage $3 "$5" $DIFFTYPE
+# Esperamos que el servidor termine de reducir la imagen
+ogWaitSyncImage "$3" "$5" $DIFFTYPE "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
# TODO: necesaria funcion que espere a que se reduzca la imagen para continuar el script
echo " " > $OGLOGCOMMAND
diff --git a/client/shared/scripts/restoreBaseImage b/client/shared/scripts/restoreBaseImage
index 9d8fd1be..318e7c6f 100755
--- a/client/shared/scripts/restoreBaseImage
+++ b/client/shared/scripts/restoreBaseImage
@@ -63,17 +63,21 @@ REPOFILE="$(ogGetPath "REPO" "$2.$IMGEXT")" || exit $(ogRaiseError session $OG_E
# Comprobar que es sincronizable (con REPO)
ogIsSyncImage REPO "$2" $IMGEXT || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$1 $2"; echo $?)
+IMGEXT="img"
+# Comprobamos si la imagen o la particion estan bloqueada:
+ogIsImageLocked "$1" "$2.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2.$IMGEXT"; echo $?)
+ogIsLocked "$3" "$4" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4"; echo $?)
+
# Detectamos el sistema de ficheros de la imagen
# TODO ogGetImageInfo
DIRMOUNT=$(ogMountImage "$1" "$2")
-ogWaitMountImage "$1" "$2" "$IMGEXT" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
+ogWaitSyncImage "$1" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
IMGFSTYPE=$(head -1 $DIRMOUNT/ogimg.info |cut -d: -f3)
# Comprobamos si el sistema de ficheros se puede montar
ogMount "$3" "$4" &>/dev/null || RETVAL=$?
# Si da error formateamos el sistema de ficheros.
if [ "$RETVAL" ] ; then
- ogUnmountImage $1 "$2"
ogEcho log session " $MSG_HELP_ogFormat: $3 $4 $IMGFSTYPE"
ogFormat "$3" "$4" "$IMGFSTYPE" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
ogMount "$3" "$4" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
@@ -82,11 +86,6 @@ fi
# Warning si el sistema de ficheros de la imagen es distinto del de la particion destino
[ "$IMGFSTYPE" == "$(ogGetFsType $3 $4)" ] || ogEcho session warning "$MSG_SYNC_DIFFERENTFS"
-IMGEXT="img"
-
-# Comprobamos si la imagen o la particion estan bloqueada:
-ogIsImageLocked "$1" "$2.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2.$IMGEXT"; echo $?)
-ogIsLocked "$3" "$4" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4"; echo $?)
PROTO=${5:-"UNICAST"}
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
@@ -106,6 +105,9 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
TIMEAUX1=$[SECONDS-TIME]
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX1/60]m $[TIMEAUX1%60]s"
+ # Montamos la imagen de cache
+ ogMountImage "$1" "$2" >/dev/null
+ ogWaitSyncImage "$1" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
fi
TIME2=$SECONDS
@@ -115,10 +117,6 @@ ogEcho log session "[40] $MSG_HELP_ogRestoreImage: $1 $2 $3 $4"
ogLock $3 $4
-# Montamos la imagen basica.
-ogMountImage "$1" "$2" "$IMGEXT" >/dev/null
-# Comprobar que la imagen completa se ha montado.
-ogWaitMountImage "$1" "$2" "$IMGEXT" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
# Sincronizamos la partición con la imagen.
ogEcho log session "[60] $MSG_HELP_ogSyncRestore: $1 $2 $IMGEXT $3 $4"
ogSyncRestore "$1" "$2" "$IMGEXT" $3 $4
@@ -134,7 +132,7 @@ ogUnmountImage "$1" "$2" "$IMGEXT"
# Restableciendo acl
ogUnlock $3 $4
ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
-ogRestoreInfoImage $3 $4
+ogRestoreInfoImage $3 $4 2>&1 | tee -a $OGLOGCOMMAND
# Llamar al script de post-configuración del sistema operativo.
# Si a este script lo ha llamado el script restoreDiffImage no post-configuramos
diff --git a/client/shared/scripts/restoreDiffImage b/client/shared/scripts/restoreDiffImage
index 64ed388d..9af1064f 100755
--- a/client/shared/scripts/restoreDiffImage
+++ b/client/shared/scripts/restoreDiffImage
@@ -102,7 +102,7 @@ ogEcho log session "[40] $MSG_RESTORE $PART"
# Montamos la diferencial
ogMountImage "$1" "$3" "$DIFFTYPE" &>/dev/null
# Comprobar que la imagen diferencial se ha montado
-ogWaitMountImage "$1" "$3" "$DIFFTYPE" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $3 $DIFFTYPE: time_out $TIMEAUX seg.";echo $?)
+ogWaitSyncImage "$1" "$3" "$DIFFTYPE" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $3 $DIFFTYPE: time_out $TIMEAUX seg.";echo $?)
ogMount $4 $5 >/dev/null
ogLock $4 $5
@@ -121,7 +121,7 @@ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[T
# creando enlaces y restableciendo ACL (en windows)
ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
-ogRestoreInfoImage "$4" "$5" &>$OGLOGCOMMAND
+ogRestoreInfoImage "$4" "$5" 2>&1 | tee -a $OGLOGCOMMAND
# Llamar al script de post-configuración del sistema operativo.
ogEcho log session "[90] $MSG_HELP_configureOs."