diff options
-rwxr-xr-x | admin/Sources/Services/ogAdmRepoAux | 76 | ||||
-rwxr-xr-x | client/engine/Image.lib | 2 | ||||
-rwxr-xr-x | client/engine/Rsync.lib | 14 | ||||
-rw-r--r-- | client/shared/etc/engine.cfg | 2 | ||||
-rwxr-xr-x | client/shared/scripts/createDiffImage | 2 |
5 files changed, 42 insertions, 54 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index 4cb4ff36..76c61271 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -27,12 +27,7 @@ REPODIR="$BASEDIR/images/" [ -z $OGENGINECONFIGURATE ] && source $BASEDIR/client/etc/engine.cfg # FS segun la configuracion y la version del kernel. ext4 para < 3.7, para >= BTRFS KERNEL=$(file -bkr /opt/opengnsys/tftpboot/ogclient/ogvmlinuz |awk '/Linux/ {for(i=1;i<=NF;i++) if($i~/version/) {v=$(i+1);printf("%d",v);sub(/[0-9]*\./,"",v);printf(".%02d",v)}}') -if [ $KERNEL \< 3.07 ]; then - IMGFS="EXT4" -else - [ "$IMGFS" == "" ] && IMGFS="BTRFS" - -fi +[ $KERNEL \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"} # Añade registro de incidencias. function echolog () { @@ -59,7 +54,10 @@ function mountImage () { echolog "mount $OPTMOUNT -o compress=lzo $1 $2" mount $OPTMOUNT -o compress=lzo "$1" "$2" fi - return $? + # Si esta montado da error 32, lo damos como bueno + RETVAL=$? + [ $RETVAL -eq 32 ] && RETVAL=0 + return $RETVAL } mkdir -p $MCASTLOGBASE @@ -174,11 +172,10 @@ case "$PARM1" in fi # Montamos la imagen. mountImage "$IMGFILE" "$DIRMOUNT" - RETVAL=$? - if [ $RETVAL -ne 0 ]; then + if [ $? -ne 0 ]; then rmdir "$DIRMOUNT" echolog -o "Error al crear/redimensionar la imagen" - exit $RETVAL + exit 1 fi #touch "$DIRMOUNT/ogimg.info" @@ -203,7 +200,6 @@ case "$PARM1" in DIRMOUNT="$DIRMOUNT.diff" fi IMGFILE="$REPODIR/$PARM2.$IMGEXT" - LOCKFILE="$IMGFILE.lock" echolog "Montamos la imagen $IMGFILE " mkdir -p "$DIRMOUNT" mountImage "$IMGFILE" "$DIRMOUNT" ro || (echolog "Error al montar la imagen"; exit 1) @@ -250,40 +246,40 @@ case "$PARM1" in [ -d $DIRMOUNT ] || mkdir $DIRMOUNT mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen $IMGFILE"; exit 1) + # Si el espacio libre menor que 200Mb desmontamos la imagen y nos salimos - AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}') + AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}') if [ $AVAILABLE -lt 200000 ]; then echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer" - umount $DIRMOUNT - rmdir $DIRMOUNT - exit 0 - fi + umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1) + else - # Calculamos la diferencia entre el tamaño interno y externo - EXTSIZE=$(ls -l --block-size=1024 $IMGFILE | cut -f5 -d" ") - INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}') - let EDGESIZE=$EXTSIZE-$INTSIZE - - echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE" - umount $DIRMOUNT - LOOPDEVICE=$(losetup -f) - losetup $LOOPDEVICE "$IMGFILE" - - # Redimensiono sistema de ficheros - echolog "resize2fs -fpM $LOOPDEVICE " - resize2fs -fpM $LOOPDEVICE # 2>&1 > $REPOLOG - mountImage "$IMGFILE" "$DIRMOUNT" - # Calculamos el tamaño final del archivo - INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}') - let EXTSIZE=$INTSIZE+$EDGESIZE - umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1) - # Si existe dispositivo loop lo borramos. - [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE - # Corto el archivo al tamaño del sistema de ficheros - echo "truncate --size=\"$EXTSIZE\"k $IMGFILE" - echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE" - truncate --size="$EXTSIZE"k $IMGFILE + # Calculamos la diferencia entre el tamaño interno y externo + EXTSIZE=$(ls -l --block-size=1024 $IMGFILE | cut -f5 -d" ") + INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}') + let EDGESIZE=$EXTSIZE-$INTSIZE + + echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE" + umount $DIRMOUNT + LOOPDEVICE=$(losetup -f) + losetup $LOOPDEVICE "$IMGFILE" + + # Redimensiono sistema de ficheros + echolog "resize2fs -fpM $LOOPDEVICE " + resize2fs -fpM $LOOPDEVICE # 2>&1 > $REPOLOG + mountImage "$IMGFILE" "$DIRMOUNT" + # Calculamos el tamaño final del archivo + INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}') + let EXTSIZE=$INTSIZE+$EDGESIZE + umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1) + # Si existe dispositivo loop lo borramos. + [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE + # Corto el archivo al tamaño del sistema de ficheros + echo "truncate --size=\"$EXTSIZE\"k $IMGFILE" + echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE" + truncate --size="$EXTSIZE"k $IMGFILE + fi else umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1) fi diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 190a36a3..5e799968 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -412,7 +412,7 @@ if [ "_${4^^}_" == "_SYNC_" -o "_${4^^}_" == "_DIFF_" ]; then [ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"} FACTORSYNC=${FACTORSYNC:-"120"} # Si IMGFS="BTRFS" la compresion es mayor. - [ $IMGFS == "BTRFS" ] && let FACTORSYNC=$FACTORSYNC + [ $IMGFS == "BTRFS" ] && let FACTORSYNC=$FACTORSYNC-20 let SIZEREQUIRED=$SIZEDATA*$FACTORSYNC/100 # El tamaño mínimo del sistema de ficheros btrfs es 250M, ponemos 300 diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib index 63edfc5c..e70ea241 100755 --- a/client/engine/Rsync.lib +++ b/client/engine/Rsync.lib @@ -100,11 +100,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then #Formateamos imagen losetup $LOOPDEVICE $IMGFILE # FS de la imagen segun la configuracion y la version del kernel: < 3.7 ext4, si >= btrfs - if [ $KERNELVERSION \< 3.07 ]; then - IMGFS == "EXT4" - else - [ "$IMGFS" == "" ] && IMGFS="BTRFS" - fi + [ $KERNELVERSION \< 3.07 ] && IMGFS == "EXT4" || IMGFS=${IMGFS:-"BTRFS"} if [ "$IMGFS" == "EXT4" ]; then echo " mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE" @@ -117,7 +113,6 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then # Monto la imagen ogMountImage $1 "$2" $3 &>/dev/null [ $? -eq 0 ] || return $( ogRaiseError $OG_ERR_IMAGE "$3 $4"; echo $?) - #touch "$DIRMOUNT/ogimg.info" echo "mounted"> $IMGFILE.lock # Si existe dispositivo de loop lo borro. @@ -200,11 +195,8 @@ SIZEDATA=${SIZEDATA:-"SIZEDATA"} # Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs. KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}') -if [ $KERNELVERSION \< 3.07 ]; then - echo "#EXT4:NO:$FSTYPE:$SIZEDATA" > $IMGINFO -else - echo "#BTRFS:LZO:$FSTYPE:$SIZEDATA" > $IMGINFO -fi +[ $KERNELVERSION \< 3.07 ] && IMGFS == "EXT4" || IMGFS=${IMGFS:-"BTRFS"} +echo "#$IMGFS:NO:$FSTYPE:$SIZEDATA" > $IMGINFO if [ "$IMGTYPE" == "img" ]; then # Imagen Basica diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg index c2ac08fd..82766a2f 100644 --- a/client/shared/etc/engine.cfg +++ b/client/shared/etc/engine.cfg @@ -27,7 +27,7 @@ OGWINREDUCE=TRUE # Factor para calcular el time-out al crear la imagen. 100000k -> 4s CREATESPEED=100000*4 # Factor de compresion para las imagenes (windos en ext4). -ZSYNC=120 +FACTORSYNC=120 # Realizar copia de seguridad antes de crear la imagen. BACKUP=false # Sistema de archivo de la imagenes sincronizadas. EXT4 o BTRFS diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage index a832abeb..69b90166 100755 --- a/client/shared/scripts/createDiffImage +++ b/client/shared/scripts/createDiffImage @@ -126,7 +126,7 @@ ogCreateInfoImage $1 $2 $3 "$4" "${DIFFTYPE}" [ $? -eq $OG_ERR_NOTDIFFERENT ] && exit $(ogRaiseError session $OG_ERR_NOTDIFFERENT; echo $?) #Comprobar espacio que requerira la imagen para ser almacenada -read SIZEDATA SIZEREQUIRED ISENOUGHSPACE <<< $(ogGetSizeParameters $1 $2 "$3" DIFF ; echo $?) +read SIZEDATA SIZEREQUIRED ISENOUGHSPACE <<< $(ogGetSizeParameters $1 $2 "$3" DIFF) ogEcho log session "[50] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED" [ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$3"; echo $?) |