summaryrefslogtreecommitdiffstats
path: root/client/engine/Image.lib
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2014-10-31 13:52:32 +0000
committeririna <irinagomez@us.es>2014-10-31 13:52:32 +0000
commitd3dc88d80ee70f5457f7d2e33f877711832b1a19 (patch)
tree5261db9abfe7101f8e19e7e85ad3e38ac9cdcfd5 /client/engine/Image.lib
parent642e39f6bb8758b652b9ead42dc0494cb845e2e6 (diff)
ogGetSizeParameter: devuelve el tamaño del sf, el de la imagen y si cabe en el repositorio elegido - se elimina codigo repetido en script
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4420 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-xclient/engine/Image.lib71
1 files changed, 71 insertions, 0 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 81014462..190a36a3 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -363,6 +363,77 @@ IMGFILE="$IMGDIR/$(basename "$3").mbr"
dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $?
}
+#/**
+# ogGetSizeParameters int_num_disk int_num_part str_repo [monolit|sync|diff]
+#@brief Devuelve el tamaño de los datos de un sistema de ficheros, el espacio necesario para la imagen y si cabe en el repositorio elegido.
+#@param int_disk numero de disco
+#@param int_part numero de particion
+#@param str_repo repositorio de imágenes { REPO, CACHE }
+#@param str_imageType Tipo de imagen: monolit (por defecto), sync o diff. (parametro opcional)
+#@return SIZEDATA SIZEREQUIRED ISENOUGHSPACE
+#@note si str_imageType= diff necesario /tmp/ogimg.info, que es creado por ogCreateInfoImage.
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@author Irina Gomez, ETSII Universidad de Sevilla
+#@date 2014/10/24
+#*/ ##
+function ogGetSizeParameters ()
+{
+local MNTDIR SIZEDATA KERNELVERSION SIZEREQUIRED FACTORGZIP FACTORLZOP SIZEFREE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part str_repo [monolic|sync|diff]" \
+ "if $FUNCNAME 1 2 REPO sync ; then ...; fi" \
+ "if $FUNCNAME 1 6 CACHE ; then ...; fi"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+[ $# -lt 3 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE [monolitic|sync]" ; echo $?)
+
+MNTDIR=$(ogMount $1 $2)
+if [ "$MNTDIR" == "" ]; then
+ ogRaiseError $OG_ERR_PARTITION "$1 $2"
+ return $?
+fi
+
+# Datos contenidos en la particion o en la lista de archivos de contiene la diferencial.
+if [ "_${4^^}_" == "_DIFF_" ]; then
+ [ -r /tmp/ogimg.info ] || return $(ogRaiseError session $OG_ERR_NOTFOUND "/tmp/ogimg.info"; echo $?)
+ cd $MNTDIR
+ SIZEDATA=$(grep -v "\/$" /tmp/ogimg.info | tr '\n' '\0'| du -x -c --files0-from=- 2>/dev/null|tail -n1 |cut -f1)
+else
+ SIZEDATA=$(df -k | grep $MNTDIR | awk '{print $3}')
+fi
+
+#Aplicar factor de compresion
+if [ "_${4^^}_" == "_SYNC_" -o "_${4^^}_" == "_DIFF_" ]; then
+
+ # Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision
+ KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+ [ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
+ FACTORSYNC=${FACTORSYNC:-"120"}
+ # Si IMGFS="BTRFS" la compresion es mayor.
+ [ $IMGFS == "BTRFS" ] && let FACTORSYNC=$FACTORSYNC
+
+ let SIZEREQUIRED=$SIZEDATA*$FACTORSYNC/100
+ # El tamaño mínimo del sistema de ficheros btrfs es 250M, ponemos 300
+ [ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+
+else
+ FACTORGZIP=55/100
+ FACTORLZOP=65/100
+ let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP
+fi
+
+#Comprobar espacio libre en el contenedor.
+[ "${3^^}" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
+[ "${3^^}" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
+
+[ "$SIZEREQUIRED" -lt "$SIZEFREE" ] && ISENOUGHSPACE=TRUE || ISENOUGHSPACE=FALSE
+
+echo $SIZEDATA $SIZEREQUIRED $ISENOUGHSPACE
+
+
+}
#/**
# ogIsImageLocked [str_repo] path_image