diff options
-rwxr-xr-x | admin/Sources/Services/ogAdmRepoAux | 47 | ||||
-rwxr-xr-x | client/engine/Rsync.lib | 75 | ||||
-rwxr-xr-x | client/shared/scripts/createBaseImage | 8 | ||||
-rwxr-xr-x | client/shared/scripts/createDiffImage | 22 | ||||
-rwxr-xr-x | client/shared/scripts/restoreDiffImage | 15 | ||||
-rwxr-xr-x | client/shared/scripts/updateCache | 19 | ||||
-rwxr-xr-x | server/bin/createfileimage | 8 | ||||
-rwxr-xr-x | server/bin/mountimage | 5 | ||||
-rwxr-xr-x | server/bin/reduceimage | 13 |
9 files changed, 130 insertions, 82 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index d7ce37b1..7e9c2b45 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -58,15 +58,19 @@ case "$PARM1" in # Creamos/Redimensionamos el fichero de imagen y lo montamos para que se pueda escribir sobre el #1 CREATE_IMAGE #2 nombre imagen - #3 extension imagen + #3 tipo de imagen [ img | diff ] #4 tamaño imagen - IMGEXT="$PARM3" + MOUNTDIR="$REPODIR/mount/$PARM2" + if [ "$PARM3" == "img" ] ; then + IMGEXT="img" + else + IMGEXT="img.diff" + MOUNTDIR="$MOUNTDIR.diff" + fi IMGFILE="$REPODIR/$PARM2.$IMGEXT" IMGDIR="$(dirname $IMGFILE)" [ -d $IMGDIR ] || mkdir -p $IMGDIR - MOUNTDIR="$REPODIR/mount/${PARM2}" - [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" mkdir -p "$MOUNTDIR" SIZEREQUIRED="$PARM4" @@ -131,10 +135,15 @@ case "$PARM1" in # Montamos el fichero imagen para que se pueda #1 MOUNT_IMAGE #2 nombre imagen - #3 extension imagen - IMGFILE="$REPODIR/$PARM2.$PARM3" + #3 tipo de imagen [ img | diff ] MOUNTDIR="$REPODIR/mount/$PARM2" - [ "$PARM3" == "diff" ] && MOUNTDIR="$MOUNTDIR.$PARM3" + if [ "$PARM3" == "img" ] ; then + IMGEXT="img" + else + IMGEXT="img.diff" + MOUNTDIR="$MOUNTDIR.diff" + fi + IMGFILE="$REPODIR/$PARM2.$IMGEXT" echolog "Montamos la imagen $IMGFILE " mkdir -p "$MOUNTDIR" mount -o ro,compress=lzo "$IMGFILE" "$MOUNTDIR" @@ -145,10 +154,10 @@ case "$PARM1" in # Si el directorio esta ocupado no se desmontará #1 UMOUNT_IMAGE #2 nombre imagen - #3 extension imagen - IMGEXT="$PARM3" + #3 tipo de imagen [ img | diff ] + IMGTYPE="$PARM3" MOUNTDIR="$REPODIR/mount/$PARM2" - [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" + [ "$IMGTYPE" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGTYPE" echolog "Desmontamos la imagen $PARM2 $PARM3 " umount $MOUNTDIR rmdir $MOUNTDIR @@ -158,19 +167,26 @@ case "$PARM1" in # Reduce el archivo de la imagen a tamaño datos + 500M #1 REDUCE_IMAGE #2 Nombre Imagen - #3 Extensión [ img |diff ] - IMGEXT="$PARM3" + #3 Tipo de imagen [ img |diff ] + MOUNTDIR="$REPODIR""mount/${PARM2}" + if [ "$PARM3" == "img" ] ; then + IMGEXT="img" + else + IMGEXT="img.diff" + MOUNTDIR="$MOUNTDIR.diff" + fi IMGFILE="$REPODIR$PARM2.$IMGEXT" [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1 - MOUNTDIR="$REPODIR""mount/${PARM2}" - [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" + [ -d $MOUNTDIR ] || mkdir $MOUNTDIR mount -o compress=lzo "$IMGFILE" "$MOUNTDIR" AVAILABLE=$(df -k|grep $MOUNTDIR|awk '{print $4}') # Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos if [ $AVAILABLE -lt 500000 ]; then + echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer" umount $MOUNTDIR + rmdir $MOUNTDIR exit 0 fi @@ -182,9 +198,10 @@ case "$PARM1" in umount $MOUNTDIR echolog "truncate --size=\"$ENDSIZE\"k $IMGFILE" truncate --size="$ENDSIZE"k $IMGFILE + + rmdir $MOUNTDIR ;; default) echolog "Solicitud con parametros \"$PARM\" no realizada, no registrada o con errores" ;; esac - diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib index 6a1f3ad5..8eb00fdb 100755 --- a/client/engine/Rsync.lib +++ b/client/engine/Rsync.lib @@ -4,13 +4,13 @@ #@brief Crear el archivo #@param 1 Repositorio [ REPO | CACHE ] #@param 2 Nombre Imagen -#@param 3 Extensión [ img |diff ] +#@param 3 Tipo imagen [ img |diff ] #@param 4 Tamaño de la imagen #@return instrucción para ser ejecutada. #*/ function ogCreateFileImage () { -local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE +local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE IMGEXT if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension size(K)" \ @@ -30,7 +30,8 @@ SIZEREQUIRED=$4 if [ "$1" == "CACHE" -o "$1" == "cache" ]; then IMGDIR=$(ogGetParentPath "$1" "/$2") - IMGFILE=${IMGDIR}/$(basename "/$2").$3 + [ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff" + IMGFILE=${IMGDIR}/$(basename "/$2").$IMGEXT ## Si no existe, crear subdirectorio de la imagen. if [ $? != 0 ]; then echo " $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")." | tee -a $OGLOGSESSION $OGLOGFILE @@ -46,7 +47,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then if [ -r "$DIRMOUNT/ogimg.info" ]; then echo "umount $DIRMOUNT" | tee -a $OGLOGSESSION $OGLOGFILE umount "$DIRMOUNT" - [ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$3"; echo $?) + [ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$IMGEXT"; echo $?) fi if [ "$BACKUP" == "true" ]; then @@ -101,9 +102,9 @@ function ogCreateInfoImage () { #@param 2 num_part #@param 3 Repositorio [ REPO | CACHE ] (opcional en las completas) #@param 4 Nombre Imagen Basica (opcional en las completas) -#@param 5 Extensión [ img | diff ] +#@param 5 Tipo imagen [ img | diff ] #*/ -local IMGEXT IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL +local IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL # Ayuda o menos de 5 parametros y la imagen no es basica if [ "$*" == "help" -o $# -lt 5 -a "$3" != "img" ]; then @@ -119,12 +120,12 @@ if [ $# -lt 3 ]; then fi if [ $3 == "img" ]; then - IMGEXT="img" + IMGTYPE="img" else # Comprobamos que las extension sea valida ogCheckStringInGroup $5 "img diff" || ogRaiseError $OG_ERR_FORMAT $MSG_SYNC_EXTENSION - IMGEXT=$5 - if [ "$IMGEXT" == "diff" ]; then + IMGTYPE=$5 + if [ "$IMGTYPE" == "diff" ]; then # Imagen completa con la que comparo la particion. IMGDIRAUX=$(ogGetMountDir "$4" "img") if [ "$3" == "CACHE" -o "$3" == "cache" ]; then @@ -159,7 +160,7 @@ rm $ORIG/ogimg.* 2>/dev/null SIZEDATA=${SIZEDATA:-"SIZEDATA"} echo "#BRTFS:LZO:$FSTYPE:$SIZEDATA" > $IMGINFO -if [ "$IMGEXT" == "img" ]; then +if [ "$IMGTYPE" == "img" ]; then # Imagen Basica echo " rsync -aHAXvn --delete $ORIG/ $DIREMPTY >> $IMGINFO" | tee -a $OGLOGSESSION $OGLOGFILE rsync -aHAXvn --delete $ORIG/ $DIREMPTY>> $IMGINFO @@ -195,7 +196,7 @@ fi #/** # ogRestoreInfoImage -#@brief Crear o modificar enlaces y restaurar las ACL. +#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion. #@param 1 num_disk #@param 2 num_part #*/ @@ -264,12 +265,12 @@ fi function ogSyncCreate () { #/** # ogSyncCreate -#@brief sincroniza los datos de la partición a la imagen para crearla. +#@brief sincroniza los datos de la partición a la imagen para crearla. La imagen esta montada en un directorio. #@param 1 num_disk #@param 2 num_part #@param 3 Repositorio [ REPO | CACHE ] #@param 4 Nombre Imagen -#@param 5 Extensión [ img | diff ] +#@param 5 Tipo imagen [ img | diff ] #*/ local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC @@ -288,6 +289,7 @@ fi ORIG=$(ogMount $1 $2) DIRMOUNT=$(ogGetMountDir "$4" $5) +# Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen. [ "$5" == "diff" ] && FILESFROM=" --files-from=/tmp/ogimg.info" || FILESFROM="" if [ "$3" == "CACHE" -o "$3" == "cache" ]; then @@ -314,7 +316,7 @@ rsync -aHAXq$OPTRSYNC $PASSWORD --inplace /tmp/ogimg* $DESTRSYNC #@brief sincroniza los datos de la imagen a la partición para restaurarla. #@param 1 Repositorio [ REPO | CACHE ] #@param 2 Nombre Imagen -#@param 3 Extensión [ img | diff ] +#@param 3 Tipo imagen [ img | diff ] #@param 4 num_disk #@param 5 num_part #*/ @@ -354,6 +356,7 @@ else fi # Opciones rsync en cache y repo +# Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen [ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete" # Nos traemos listado ficheros y bajamos la imagen @@ -390,7 +393,7 @@ function ogMountImage () { #@brief Monta la imagen para sincronizar. #@param 1 Repositorio [ REPO | CACHE ] #@param 2 Nombre Imagen -#@param 3 Extensión [ img |diff ] +#@param 3 Tipo imagen [ img |diff ] #@return punto de montaje #*/ local IMGEXT IMGFILE DIRMOUNT @@ -408,9 +411,9 @@ if [ $# -lt 2 ]; then return $? fi -[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3" +[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff" -DIRMOUNT=$(ogGetMountDir "$2" $IMGEXT) +DIRMOUNT=$(ogGetMountDir "$2" ${IMGEXT#*\.}) if [ "$1" == "CACHE" -o "$1" == "cache" ]; then IMGFILE=$(ogGetPath "$1" /"$2.$IMGEXT") @@ -420,7 +423,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) - hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" $IMGEXT" + hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}" echo "$OGIMG/$DIRMOUNT" fi @@ -437,9 +440,9 @@ function ogUnmountImage () { #@brief Desmonta la imagen para sincronizar. #@param 1 Repositorio [ REPO | CACHE ] #@param 2 Nombre Imagen -#@param 3 Extensión [ img |diff ] +#@param 3 Tipo imagen [ img |diff ] #*/ -local IMGEXT DIRMOUNT +local IMGTYPE DIRMOUNT if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \ @@ -453,16 +456,16 @@ if [ $# -lt 2 ]; then return $? fi -[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3" +[ "$3" == "" ] && IMGTYPE="img" || IMGTYPE="$3" if [ "$1" == "CACHE" -o "$1" == "cache" ]; then - DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT) + DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGTYPE) umount "$DIRMOUNT" rmdir "$DIRMOUNT" else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) - echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT" |tee -a $OGLOGFILE - hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT" + echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE" |tee -a $OGLOGFILE + hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE" fi } @@ -472,7 +475,7 @@ function ogGetMountDir () { # ogGetMountDir #@brief Devuelve el directorio de montaje de la imagen. #@param 1 Nombre Imagen -#@param 2 Extensión [ img |diff ] +#@param 2 Tipo imagen [ img |diff ] #*/ local DIRMOUNT if [ "$*" == "help" ]; then @@ -503,7 +506,7 @@ echo $DIRMOUNT #@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 Extensión [ img | diff ] +#@param 3 Tipo imagen [ img | diff ] #@param 4 Tamaño imagen (opcional) #*/ function ogWaitMountImage () { @@ -550,13 +553,16 @@ echo "" } + +# DA ERROR +# ERROR: unable to resize 'imagen' - File too large function ogReduceImage () { #/** # ogReduceImage #@brief Reduce el archivo de la imagen a tamaño datos + 500M #@param 1 Repositorio [ REPO | CACHE ] #@param 2 Nombre Imagen -#@param 3 Extensión [ img |diff ] +#@param 3 Tipo Imagen [ img |diff ] #@return #@exception OG_ERR_FORMAT # 1 formato incorrecto. #@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado. @@ -574,15 +580,18 @@ if [ $# -lt 2 ]; then return $? fi -[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3" +[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff" 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 - [ $AVAILABLE -lt 500000 ] && return 0 + if [ $AVAILABLE -lt 500000 ]; then + ogUnmountImage $1 $2 ${IMGEXT#*\.} + return 0 + fi # Reducimos el archivo de imagen: IMGDIR=$(ogGetParentPath "$1" "/$2") @@ -591,13 +600,13 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then let ENDSIZE=$USED+500000 echo -e -n " btrfs filesystem resize "$ENDSIZE"k $DIRMOUNT \n " btrfs filesystem resize "$ENDSIZE"k $DIRMOUNT - ogUnmountImage $1 $2 $IMGEXT + ogUnmountImage $1 $2 ${IMGEXT#*\.} echo " truncate --size=\"$ENDSIZE\"k $IMGFILE " truncate --size="$ENDSIZE"k $IMGFILE else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) - echo " hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" $IMGEXT" - hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" $IMGEXT" + echo " hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}" + hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}" fi diff --git a/client/shared/scripts/createBaseImage b/client/shared/scripts/createBaseImage index eef3207d..3a38631b 100755 --- a/client/shared/scripts/createBaseImage +++ b/client/shared/scripts/createBaseImage @@ -151,11 +151,13 @@ ogWaitMountImage "$3" "$4" $IMGEXT $SIZEREQUIRED || ogRaiseError $OG_ERR_DONTMO echo " $MSG_HELP_ogSyncCreate." | tee -a $OGLOGSESSION $OGLOGFILE ogSyncCreate $1 $2 $3 "$4" $IMGEXT +# Lo comantamos hasta probar -> da error de ERROR: unable to resize '/tmp/mount/IMG' - No space left on device # Reducimos la imagen -echo "[90] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT" | tee -a $OGLOGSESSION $OGLOGFILE -ogReduceImage $3 "$4" $IMGEXT +#echo "[90] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT" | tee -a $OGLOGSESSION $OGLOGFILE +#ogReduceImage $3 "$4" $IMGEXT -#ogUnmountImage $3 "$4" $IMGEXT +# Desmontamos la Imagen +ogUnmountImage $3 "$4" $IMGEXT ogUnlockImage "$3" "/$4.$IMGEXT" ogUnlock $1 $2 TIMEAUX5=$[SECONDS-TIMEAUX3] diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage index e716851d..7292d13c 100755 --- a/client/shared/scripts/createDiffImage +++ b/client/shared/scripts/createDiffImage @@ -30,7 +30,7 @@ trap "onexit $1 $2 $3 \"$4\" \"$5\"" 1 2 3 6 9 14 15 ERR function onexit() { local exit_status=$? echo "$MSG_ERR_GENERIC $exit_status" |tee -a $OGLOGFILE $OGLOGSESSION - ogUnmountImage $3 "$5" $DIFFEXT &>/dev/null + ogUnmountImage $3 "$5" $DIFFTYPE &>/dev/null ogUnmountImage $3 "$4" $IMGEXT &>/dev/null ogUnlockImage "$3" "/$4.$IMGEXT" &>/dev/null ogUnlockImage "$3" "/$5.$DIFFEXT" &>/dev/null @@ -63,8 +63,8 @@ fi # Valores por defecto en etc/engine.cfg IMGEXT="img" -DIFFEXT="diff" - +DIFFEXT="img.diff" +DIFFTYPE="diff" echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE # Comprobamos si la imagen diferencial o la particion estan bloqueada: @@ -142,7 +142,7 @@ ogWaitMountImage $3 "$4" $IMGEXT || ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 # Creamos la informacion de la imagen. echo "[50] $MSG_HELP_ogCreateInfoImage " | tee -a $OGLOGSESSION $OGLOGFILE -ogCreateInfoImage $1 $2 $3 "$4" "$DIFFEXT" +ogCreateInfoImage $1 $2 $3 "$4" "${DIFFTYPE}" TIMEAUX3=$[SECONDS-TIME2] echo " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE #Calculamos el tamaño de la imagen: @@ -170,20 +170,24 @@ sed -i s/SIZEDATA/"$SIZEDATA"/g /tmp/ogimg.info # Creamos o redimensionamos la imagen echo "[60] $MSG_HELP_ogCreateFileImage." | tee -a $OGLOGSESSION $OGLOGFILE -ogCreateFileImage $3 "$5" $DIFFEXT $SIZEREQUIRED +ogCreateFileImage $3 "$5" $DIFFTYPE $SIZEREQUIRED # Esperamos que se monte la imagen despues de crarla en el servidor -ogWaitMountImage "$3" "$5" "$DIFFEXT" $SIZEREQUIRED || ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $5 $DIFFEXT: time_out." +ogWaitMountImage "$3" "$5" "$DIFFTYPE" $SIZEREQUIRED || ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $5 $DIFFTYPE: time_out." TIMEAUX6=$[SECONDS-TIMEAUX5] echo -e " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX6/60]m $[TIMEAUX6%60]s" | tee -a $OGLOGSESSION $OGLOGFILE echo "[80] $MSG_HELP_ogSyncCreate" | tee -a $OGLOGSESSION $OGLOGFILE # Copio los datos a la imagen diferecial : -ogSyncCreate $1 $2 $3 "$5" $DIFFEXT +ogSyncCreate $1 $2 $3 "$5" $DIFFTYPE +# DA ERROR -> ERROR: unable to resize 'imagen' - File too large # Reducimos la imagen diferencial -echo "[90] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT" | tee -a $OGLOGSESSION $OGLOGFILE -ogReduceImage $3 "$5" $DIFFEXT +#echo "[90] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT" | tee -a $OGLOGSESSION $OGLOGFILE +#ogReduceImage $3 "$5" $DIFFTYPE + +# Desmontamos las imagenes +ogUnmountImage $3 "$5" $DIFFTYPE ogUnmountImage $3 "$4" $IMGEXT diff --git a/client/shared/scripts/restoreDiffImage b/client/shared/scripts/restoreDiffImage index f393d1d6..dc7a3762 100755 --- a/client/shared/scripts/restoreDiffImage +++ b/client/shared/scripts/restoreDiffImage @@ -30,7 +30,7 @@ trap "onexit $1 \"$2\" $3 $4" 1 2 3 6 9 14 15 ERR function onexit() { local exit_status=$? echo "$MSG_ERR_GENERIC $exit_status" |tee -a $OGLOGFILE $OGLOGSESSION - ogUnmountImage "$1" "$2" "$DIFFEXT" &>/dev/null + ogUnmountImage "$1" "$2" "$DIFFTYPE" &>/dev/null ogUnlock $3 $4 &>/dev/null exit $exit_status } @@ -55,7 +55,8 @@ fi echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGFILE # Procesar parámetros de entrada -DIFFEXT="diff" +DIFFTYPE="diff" +DIFFEXT="img.diff" REPODIFFFILE=$(ogGetPath "REPO" "$2.$DIFFEXT") || ogRaiseError $OG_ERR_NOTFOUND "REPO $2.$DIFFEXT" # Comprobamos si la imagen o la particion estan bloqueada: @@ -96,18 +97,18 @@ TIME2=$SECONDS echo "[40] $MSG_RESTORE $PART" # Montamos la diferencial -ogMountImage "$1" "$2" "$DIFFEXT" &>/dev/null +ogMountImage "$1" "$2" "$DIFFTYPE" &>/dev/null # Comprobar que la imagen diferencial se ha montado -ogWaitMountImage "$1" "$2" "$DIFFEXT" || ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $DIFFEXT: time_out $TIMEAUX seg." +ogWaitMountImage "$1" "$2" "$DIFFTYPE" || ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $DIFFTYPE: time_out $TIMEAUX seg." ogMount $3 $4 >/dev/null ogLock $3 $4 # Sincronizamos la partición con la imagen. -echo "[60] $MSG_HELP_ogSyncRestore: $1 $2 $DIFFEXT $3 $4" |tee -a $OGLOGFILE -ogSyncRestore "$1" "$2" "$DIFFEXT" $3 $4 +echo "[60] $MSG_HELP_ogSyncRestore: $1 $2 $DIFFTYPE $3 $4" |tee -a $OGLOGFILE +ogSyncRestore "$1" "$2" "$DIFFTYPE" $3 $4 # Desmontamos la imagen -ogUnmountImage "$1" "$2" "$DIFFEXT" +ogUnmountImage "$1" "$2" "$DIFFTYPE" ogUnlock $3 $4 TIMEAUX2=$[SECONDS-TIME2] diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache index f8de97c8..3c59d19e 100755 --- a/client/shared/scripts/updateCache +++ b/client/shared/scripts/updateCache @@ -200,13 +200,16 @@ case "$PROTOCOLO" in USERRSYNC="opengnsys" OPTRSYNC=" --delete --password-file=/scripts/passrsync " [ "$ogcompress" == "true" ] && OPTRSYNC="z $OPTRSYNC" - IMGEXT=${2##*.} - DIRMOUNT="$(ogGetMountDir "${2%%.*}" $IMGEXT)" + + [ "${2##*.}" == "img" ] && IMGTYPE="img" || IMGTYPE="diff" + IMGNAME="${2%.img*}" + + DIRMOUNT="$(ogGetMountDir "$IMGNAME" $IMGTYPE)" DIRLOCAL="/tmp/$DIRMOUNT" mkdir $DIRLOCAL 2>/dev/null echo "$MSG_SCRIPTS_UPDATECACHE_CHECKSIZEIMG" - + # Si la imagen del repositorio es mayor, redimensiono la imagen de cache if [ $CACHEFILESIZE -lt $REALFILESIZE ]; then # Si la imagen esta montada la desmonto mount |grep $CACHEFILE >/dev/null && umount $CACHEFILE @@ -223,17 +226,17 @@ case "$PROTOCOLO" in fi # Montamos las imagenes para sincronizarlas - ogMountImage CACHE "${2%%.*}" $IMGEXT >/dev/null - ogMountImage REPO "${2%%.*}" $IMGEXT >/dev/null + ogMountImage CACHE "$IMGNAME" $IMGTYPE >/dev/null + ogMountImage REPO "$IMGNAME" $IMGTYPE >/dev/null # Esperamos que se monte la imagen en el servidor - ogWaitMountImage REPO "${2%%.*}" $IMGEXT + ogWaitMountImage REPO "$IMGNAME" $IMGTYPE echo -e "\n rsync -aHAX OPTRSYNC --quiet $USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/ $DIRLOCAL |tee -a $OGLOGSESSION $OGLOGFILE" rsync -aHAX$OPTRSYNC --quiet $USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/ $DIRLOCAL |tee -a $OGLOGSESSION $OGLOGFILE # RETVAL="1" -> OK RETVAL="2" -> error # valores igual que ogUpdateCacheIsNecesary [ $? == 0 ] && RETVAL="1"|| RETVAL="2" # Desmonto las imagenes - ogUnmountImage CACHE "${2%%.*}" $IMGEXT - ogUnmountImage REPO "${2%%.*}" $IMGEXT + ogUnmountImage CACHE "$IMGNAME" $IMGTYPE + ogUnmountImage REPO "$IMGNAME" $IMGTYPE ;; esac diff --git a/server/bin/createfileimage b/server/bin/createfileimage index 65adb4f0..5701cf29 100755 --- a/server/bin/createfileimage +++ b/server/bin/createfileimage @@ -36,15 +36,19 @@ fi IMGEXT="$2" -# Si existe imagen, Comprobamos que es sincronizable +# Si existe imagen, Comprobamos que no esta bloqueada y que es sincronizable IMGFILE="$REPODIR/$1.$IMGEXT" if [ -f $IMGFILE ]; then + [ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4 + if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2" exit 71 fi fi +touch $IMGFILE.lock + # El tamaño minimo de la imagen es 300000 para poder formatear en fs btrfs. SIZEREQUIRED=$3 [ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000 @@ -52,3 +56,5 @@ SIZEREQUIRED=$3 echo CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED echo -ne CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED| /opt/opengnsys/sbin/ogAdmRepoAux echo "Los resultado se registran en $REPOLOG. " + +rm $IMGFILE.lock diff --git a/server/bin/mountimage b/server/bin/mountimage index 77635bb7..b8ba1a2c 100755 --- a/server/bin/mountimage +++ b/server/bin/mountimage @@ -34,7 +34,8 @@ if [ "$USER" != "root" ]; then exit 1 fi -[ "$2" == "" ] && IMGEXT="img" || IMGEXT="$2" +[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff" + # Comprobamos que existe imagen IMGFILE="$REPODIR/$1.$IMGEXT" [ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2 @@ -47,7 +48,7 @@ if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then fi MOUNTDIR="$REPODIR/mount/$1" -[ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" +[ "$IMGEXT" == "img.diff" ] && MOUNTDIR="$MOUNTDIR.${IMGEXT#*\.}" mkdir -p "$MOUNTDIR" mount -o compress=lzo "$IMGFILE" "$MOUNTDIR" [ "$?" == "0" ] || ( echo "$MSG_ERR_DONTMOUNT_IMAGE $1 $2" ; exit 70) diff --git a/server/bin/reduceimage b/server/bin/reduceimage index 7083675a..b43f891f 100755 --- a/server/bin/reduceimage +++ b/server/bin/reduceimage @@ -7,6 +7,7 @@ #@return #@exception OG_ERR_FORMAT # 1 formato incorrecto. #@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado +#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado #@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica) #@version 1.0 - Reducir tamaño imagen sincronizable #@author Irina Gomez @@ -34,16 +35,20 @@ if [ "$USER" != "root" ]; then exit 1 fi -[ "$2" == "" ] && IMGEXT="img" || IMGEXT="$2" -# Comprobamos que existe imagen +[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff" +# Comprobamos que existe imagen y que no este bloqueada IMGFILE="$REPODIR/$1.$IMGEXT" [ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2 - +[ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4 # Comprobar que la imagen es sincronizable if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2" exit 71 fi -echo -ne REDUCE_IMAGE "$1" $IMGEXT | /opt/opengnsys/sbin/ogAdmRepoAux + +touch $IMGFILE.lock +echo -ne REDUCE_IMAGE "$1" ${IMGEXT#*\.} | /opt/opengnsys/sbin/ogAdmRepoAux echo "Los resultado se registran en $REPOLOG. " + +rm $IMGFILE.lock |