summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2013-09-10 12:24:29 +0000
committeririna <irinagomez@us.es>2013-09-10 12:24:29 +0000
commite24b042b02a201a4d241d4355ba463f1902e7d0e (patch)
tree59f33faf6e2d9beeea57b84924725c73f3b03130
parent6adea3847917c014717a24034f41ff7d3921928d (diff)
#565 #564 cambio de extension las imagenes diferenciales a img.diff
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4039 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-xadmin/Sources/Services/ogAdmRepoAux47
-rwxr-xr-xclient/engine/Rsync.lib75
-rwxr-xr-xclient/shared/scripts/createBaseImage8
-rwxr-xr-xclient/shared/scripts/createDiffImage22
-rwxr-xr-xclient/shared/scripts/restoreDiffImage15
-rwxr-xr-xclient/shared/scripts/updateCache19
-rwxr-xr-xserver/bin/createfileimage8
-rwxr-xr-xserver/bin/mountimage5
-rwxr-xr-xserver/bin/reduceimage13
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