From d3dc88d80ee70f5457f7d2e33f877711832b1a19 Mon Sep 17 00:00:00 2001 From: irina Date: Fri, 31 Oct 2014 13:52:32 +0000 Subject: ogGetSizeParameter: devuelve el tamaño del sf, el de la imagen y si cabe en el repositorio elegido - se elimina codigo repetido en script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@4420 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Image.lib | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'client/engine/Image.lib') 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 -- cgit v1.2.3-18-g5258