summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2013-10-29 09:21:00 +0000
committeririna <irinagomez@us.es>2013-10-29 09:21:00 +0000
commit6c2dee2180e6d2871c2eb53fde09168dfe28b7fc (patch)
tree87a7ef8e5ec03b64710c6c4254532bdbd52b3113
parent904be966bf499c72421cda2c29f7fddd66bb874c (diff)
#565 mejora: al crear las imagenes diferenciales, backup de acl solo de los ficheros modificados
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4068 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-xclient/engine/Rsync.lib35
-rw-r--r--client/shared/etc/lang.ca_ES.conf1
-rw-r--r--client/shared/etc/lang.en_GB.conf1
-rw-r--r--client/shared/etc/lang.es_ES.conf1
-rwxr-xr-xclient/shared/scripts/createDiffImage22
5 files changed, 51 insertions, 9 deletions
diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib
index 25a96d36..939361d7 100755
--- a/client/engine/Rsync.lib
+++ b/client/engine/Rsync.lib
@@ -213,6 +213,41 @@ fi
}
+
+#/**
+# ogAclFilter
+#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
+#@param No.
+#@return (nada)
+#*/
+function ogAclFilter () {
+local IMGACL IMGINFO FILES ACLTMP
+
+IMGACL="/tmp/ogimg.acl"
+IMGINFO="/tmp/ogimg.info"
+FILES="/tmp/files$$"
+ACLTMP="/tmp/acl$$.tmp"
+
+# comprobamos que existan los archivos de origen. Si no salimos sin error.
+[ -f $IMGACL -a -f $IMGINFO ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGACL, $IMGINFO" || return 0
+
+echo "" > $ACLTMP
+
+# Al fichero le quitamos las líneas sobrantes: comentarios y lineas vacias.
+sed -e s/"^#.*$"//g $IMGINFO > $FILES
+sed -i '/^$/d' $FILES
+
+# Recorremos el listado y extraemos la acl correspondiente al fichero o directorio.
+while read LINE; do
+ read END INI <<< "$(grep -n -e "File" -e "Directory" $IMGACL| grep -A 1 "$LINE"| awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
+ let NUM=$END-$INI-1
+ sed -n -e $INI,+"$NUM"p $IMGACL &>> $ACLTMP
+done < $FILES
+
+cp $ACLTMP $IMGACL
+
+}
+
#/**
# ogRestoreInfoImage
#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion.
diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf
index 25785768..1bcca2f2 100644
--- a/client/shared/etc/lang.ca_ES.conf
+++ b/client/shared/etc/lang.ca_ES.conf
@@ -78,6 +78,7 @@ MSG_POWEROFF="Apagar el equipo"
MSG_SPEED="Velocidad"
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAclFilter="Extrae las acl de los ficheros de la diferencial"
MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
MSG_HELP_ogAddRegistryKey="Añade una nueva clave al registro de Windows."
MSG_HELP_ogAddRegistryValue="Añade un nuevo valor al registro de Windows."
diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf
index fd22c018..bec0e453 100644
--- a/client/shared/etc/lang.en_GB.conf
+++ b/client/shared/etc/lang.en_GB.conf
@@ -78,6 +78,7 @@ MSG_POWEROFF="Shutdown computer"
MSG_SPEED="Speed"
# API functions menssages.
+MSG_HELP_ogAclFilter="Extrae las acl de los ficheros de la diferencial"
MSG_HELP_ogAddCmd="Add commands to file created by ogInstalMiniSetup function."
MSG_HELP_ogAddRegistryKey="Add a new Windows registry key."
MSG_HELP_ogAddRegistryValue="Add a new Windows registry value."
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index fe100b22..78cde2c8 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -78,6 +78,7 @@ MSG_POWEROFF="Apagar el equipo"
MSG_SPEED="Velocidad"
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAclFilter="Extrae las acl de los ficheros de la diferencial"
MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
MSG_HELP_ogAddRegistryKey="Añade una nueva clave al registro de Windows."
MSG_HELP_ogAddRegistryValue="Añade un nuevo valor al registro de Windows."
diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage
index 0e5aff07..c2905ab3 100755
--- a/client/shared/scripts/createDiffImage
+++ b/client/shared/scripts/createDiffImage
@@ -153,6 +153,14 @@ echo "[50] $MSG_HELP_ogCreateInfoImage " | tee -a $OGLOGSESSION $OGLOGFILE
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
+
+# Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
+echo "[60] $MSG_HELP_ogAclFilter " | tee -a $OGLOGSESSION $OGLOGFILE
+ogAclFilter
+TIMEAUX5=$[SECONDS-TIMEAUX3]
+echo " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX5/60]m $[TIMEAUX5%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+
+
#Calculamos el tamaño de la imagen:
ogMount $1 $2 >/dev/null
ogLock $1 $2
@@ -163,21 +171,18 @@ SIZEDATA=$(cat /tmp/ogimg.info | tr '\n' '\0'| du -c --files0-from=- 2>/dev/null
let SIZEREQUIRED=$SIZEDATA*$COMPRESS
# Tamaño minimo fichero imagen 300000
[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
-TIMEAUX4=$[SECONDS-TIMEAUX3]
# Comprueba que quepa en el repositorio
[ "$3" == "CACHE" -o "$3" == "cache" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) && ogMountCache >/dev/null
[ "$3" == "REPO" -o "$3" == "repo" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
echo " $SIZEREQUIRED $SIZEFREE" | tee -a $OGLOGSESSION $OGLOGFILE
-
[ $SIZEREQUIRED -gt $SIZEFREE ] && ogRaiseError $OG_ERR_CACHESIZE "$3"
-echo " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX4/60]m $[TIMEAUX4%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
# Configuro la informacion del tamaño de los datos en /tmp/ogimg.info
sed -i s/SIZEDATA/"$SIZEDATA"/g /tmp/ogimg.info
# Creamos o redimensionamos la imagen
-echo "[60] $MSG_HELP_ogCreateFileImage." | tee -a $OGLOGSESSION $OGLOGFILE
+echo "[70] $MSG_HELP_ogCreateFileImage." | tee -a $OGLOGSESSION $OGLOGFILE
ogCreateFileImage $3 "$5" $DIFFTYPE $SIZEREQUIRED
# Esperamos que se monte la imagen despues de crarla en el servidor
@@ -189,10 +194,9 @@ echo "[80] $MSG_HELP_ogSyncCreate" | tee -a $OGLOGSESSION $OGLOGFILE
# Copio los datos a la imagen diferecial :
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" $DIFFTYPE
+# Reducimos la imagen diferencial -> solo para kernel <= 3.7, imagenes con FS ext4
+echo "[90] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT" | tee -a $OGLOGSESSION $OGLOGFILE
+ogReduceImage $3 "$5" $DIFFTYPE
# Desmontamos las imagenes
ogUnmountImage $3 "$5" $DIFFTYPE
@@ -217,4 +221,4 @@ ogIsSyncImage $3 "$5" diff || ogRaiseError $OG_ERR_IMAGE "$3 $5"
IMGSIZE=$(ls -l --block-size=1024 ${DIFFFILE}| cut -f5 -d" ")
TIME=$[SECONDS-TIME1]
echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-echo " FileSystem $PART with $SIZEDATA KB data created onto file-image as $4 and used $IMGSIZE KB acros DFS rsync " | tee -a $OGLOGSESSION $OGLOGFILE
+echo " FileSystem $PART with $SIZEDATA KB data created onto file-image as $5 and used $IMGSIZE KB acros DFS rsync " | tee -a $OGLOGSESSION $OGLOGFILE