diff options
-rwxr-xr-x | admin/Sources/Services/ogAdmRepoAux | 67 | ||||
-rwxr-xr-x | client/engine/Rsync.lib | 13 |
2 files changed, 43 insertions, 37 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index 4d245daf..637fb38a 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -239,45 +239,48 @@ case "$PARM1" in LOCKFILE="$IMGFILE.lock" [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1 - # Solo funciona si la imagen es ext4, si no nos salimos sin error - file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null || exit 0 + # Para imagenes EXT4 reduzco, para BTRFS solo desmonto. + if file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then - [ -d $DIRMOUNT ] || mkdir $DIRMOUNT - mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen $IMGFILE"; exit 1) + [ -d $DIRMOUNT ] || mkdir $DIRMOUNT + mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen $IMGFILE"; exit 1) - # Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos - AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}') - if [ $AVAILABLE -lt 200000 ]; then + # Si el espacio libre menor que 200Mb desmontamos la imagen y nos salimos + 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 - - # 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" + fi - # 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 + else + umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1) + fi rmdir $DIRMOUNT echo "reduced" >$LOCKFILE diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib index 5b735c5e..bcf1a810 100755 --- a/client/engine/Rsync.lib +++ b/client/engine/Rsync.lib @@ -710,10 +710,10 @@ fi IMGDIR="$(ogGetParentPath "$1" "/$2")" IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT" -# Solo es posible para imagenes EXT4. Si no es EXT4 salimos sin error -file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null || return 0 if [ "$1" == "CACHE" -o "$1" == "cache" ]; then + # Para imagenes EXT4 reduzco, para BTRFS solo desmonto. + if file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null; then # Al montar se comprueba la existencia de la imagen DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.})" AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}') @@ -748,10 +748,13 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then # Corto el archivo al tamaño del sistema de ficheros. echo " truncate --size=\"$EXTSIZE\"k $IMGFILE " truncate --size="$EXTSIZE"k "$IMGFILE" - + else # Desmonto la imagen - echo "reduced" > "$IMGFILE.lock" - rmdir "$DIRMOUNT" + umount "$DIRMOUNT" + fi + + echo "reduced" > "$IMGFILE.lock" + rmdir "$DIRMOUNT" else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) |