summaryrefslogtreecommitdiffstats
path: root/client/engine/FileSystem.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-10-28 13:39:52 +0000
committerramon <ramongomez@us.es>2014-10-28 13:39:52 +0000
commit3be02194708ad175e89c37395fa2bce7a0f7f734 (patch)
treeaaa8c0eebcd3d5f4489f6ad99c1b08ecb6397b80 /client/engine/FileSystem.lib
parentbe09f76004d1d2bea601f53565d318279c0d24ff (diff)
#675: Función {{{ogReduceFs}}} para NTFS recalcula en bucle el espacio de relocalización de ficheros usando un 10% más y realiza la reducción solo si el espacio requerido es menor que el del dispositivo (se elimina la función {{{ogReduceFsCheck}}}).
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4413 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/FileSystem.lib')
-rwxr-xr-xclient/engine/FileSystem.lib125
1 files changed, 45 insertions, 80 deletions
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index c1ce64be..8b1e3a53 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -102,15 +102,16 @@ return $ERRCODE
#@brief Elemina los archivos que no son necesarios en el sistema de archivos.
#@param int_ndisk nº de orden del disco
#@param int_nfilesys nº de orden del sistema de archivos
+#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
-#@note Antes incluido en la funcion ogReduceFs
-#@return (nada)
+#@note Antes incluido en la funcion ogReduceFs
+#@author Irina Gomez. Universidad de Sevilla.
#@date 2014-10-27
#*/ ##
-function ogCleanFs {
-
+function ogCleanFs ()
+{
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
@@ -123,22 +124,21 @@ fi
case "$(ogGetFsType $1 $2)" in
EXT[234])
- # Borramos los ficheros de dispositivos y los temporales.
+ # Borramos los ficheros de dispositivos y los temporales.
ogCleanLinuxDevices $1 $2
- rm -rf $(ogMount $1 $2)/tmp/*
+ rm -rf $(ogMount $1 $2)/tmp/*
;;
NTFS)
- # Borrar ficheros de hibernación y paginación de Windows.
- ogGetPath $1 $2 pagefile.sys &>/dev/null && ogDeleteFile $1 $2 pagefile.sys
- ogGetPath $1 $2 hiberfil.sys &>/dev/null && ogDeleteFile $1 $2 hiberfil.sys
- ogGetPath $1 $2 swapfile.sys &>/dev/null && ogDeleteFile $1 $2 swapfile.sys
+ # Borrar ficheros de hibernación y paginación de Windows.
+ ogGetPath $1 $2 pagefile.sys &>/dev/null && ogDeleteFile $1 $2 pagefile.sys
+ ogGetPath $1 $2 hiberfil.sys &>/dev/null && ogDeleteFile $1 $2 hiberfil.sys
+ ogGetPath $1 $2 swapfile.sys &>/dev/null && ogDeleteFile $1 $2 swapfile.sys
;;
esac
}
-
#/**
# ogExtendFs int_ndisk int_nfilesys
#@brief Extiende un sistema de archivos al tamaño de su partición.
@@ -785,11 +785,14 @@ echo $MNTDIR
#@version 1.0 - Deteccion automatica del tamaño minimo adecuado
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2011-02-24
+#@version 1.0.6 - Integrar código de antigua función "ogReduceFsCheck".
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-10-28
#*/ ##
function ogReduceFs ()
{
# Variables locales
-local PART BLKS SIZE
+local PART BLKS SIZE MAXSIZE EXTRASIZE=0 RETVAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -815,6 +818,7 @@ case "$(ogGetFsType $1 $2)" in
#resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
resize2fs -fpM $PART &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
;;
+
BTRFS)
MNTDIR=$(ogMount $1 $2)
# Calcular tamaño ocupado + 10%.
@@ -822,94 +826,55 @@ case "$(ogGetFsType $1 $2)" in
btrfs filesystem resize ${SIZE}k $MNTDIR
;;
REISERFS|REISER4)
- MNTDIR=$(ogMount $1 $2)
# Calcular tamaño ocupado + 10%.
+ MNTDIR=$(ogMount $1 $2)
SIZE=$[ $(df -k $MNTDIR | awk '{getline;print $3}') * 110 / 100 ]
ogUnmount $1 $2 2>/dev/null
resize_reiserfs -s${SIZE}K $PART
;;
+
JFS) ;; # No se reduce (por el momento).
XFS) ;; # No se reduce (por el momento).
+
NTFS)
- ogUnmount $1 $2 2>/dev/null
- ## NTFS: Obtiene tamaño mínimo en MB.
- #SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print int($8*1.1)}')
- #ntfsresize -fns "${SIZE}M" $PART >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
- #ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
- SIZE=$(ogReduceFsCheck $1 $2)
- [ "$SIZE" == 0 ] && return 1
- ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $?
+ # Calcular tamaño ocupado + 10%.
+ ogUnmount $1 $2 &>/dev/null
+ read -e MAXSIZE SIZE <<<$(ntfsresize -fi $PART | \
+ awk '/device size/ {d=$4}
+ /resize at/ {r=int($5*1.1/1024+1)*1024}
+ END { print d,r}')
+ # Error si no puede obtenerse el tamaño máximo del volumen.
+ [ -n "$MAXSIZE" ] || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
+ # Simular la redimensión y comprobar si es necesario ampliarala.
+ RETVAL=1
+ while [ $RETVAL != 0 -a $[ SIZE+=EXTRASIZE ] -lt $MAXSIZE ]; do
+ # Obtener espacio de relocalización y devolver código de salida
+ # (ntfsresize devuelve 0 si no necesita relocalizar).
+ EXTRASIZE=$(ntfsresize -fns $SIZE $PART 2>/dev/null | \
+ awk '/Needed relocations/ {print int($4*1.1/1024+1)*1024}'
+ exit ${PIPESTATUS[0]})
+ RETVAL=$?
+ done
+ # Redimensionar solo si hace falta.
+ if [ $SIZE -lt $MAXSIZE ]; then
+ ntfsresize -fs $SIZE $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
+ fi
;;
+
EXFAT) ;; # No se reduce (por el momento).
FAT32|FAT16) ;; # No se reduce (probar "fatresize").
HFS|HFSPLUS) ;; # No se reduce (por el momento).
UFS) ;; # No se reduce (por el momento).
+
*) ogRaiseError $OG_ERR_PARTITION "$1,$2"
return $? ;;
esac
-ogGetFsSize $1 $2
-}
-
-
-function ogReduceFsCheck ()
-{
-#IMPORTANTE: retorna el valor en MB que podrá reducir el FS de una particion ntfs
-#valor devuelto 0, y codigo error 1. No se puede reducir, probar a reiniciar windows y chkdsk
-
-local PART RC MODE SIZE SIZEDATA
-[ $# == 2 ] && MODE=STAGE1
-[ $# == 3 ] && MODE=STAGE2
-[ -z $MODE ] && return
-
-PART="$(ogDiskToDev $1 $2)" || return $?
-ogUnmount $1 $2 &>/dev/null
-
-
-case $MODE in
- STAGE1)
- # echo "primera etapa $*"
- # Mostramos el error
- #ntfsresize -fi $PART &>/dev/null
- ntfsresize -fi $PART | grep -A 10 -e ERROR >&2
- RC=`echo $?`
- # echo "RC es" $RC
- # if [ "$RC" -eq "1" ] # con error la salida del grep es 0
- if [ "$RC" -eq "0" ]
- then
- echo "0"
- return 1
- fi
- SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+1000}')
- # echo "salida" $?
- # echo $SIZEDATA
- ogReduceFsCheck $1 $2 $SIZEDATA
- return 0
- ;;
- STAGE2)
- # echo "segunda etapa $*"
- SIZEDATA=$3
- ntfsresize -fns "${SIZEDATA}M" $PART &>/tmp/ntfsresize.txt
- RC=$?
- if [ "$RC" == "0" ]
- then
- SIZE=$SIZEDATA
- echo $SIZE
- else
- SIZEEXTRA=$(cat /tmp/ntfsresize.txt | awk '/Needed relocations :/ {print $0}' | awk -F"(" '{print $2}' | awk '{print $1+500}')
- SIZE=$(expr $SIZEDATA + $SIZEEXTRA)
- ogReduceFsCheck $1 $2 $SIZE
- return 0
- fi
- ;;
- *)
- return
- ;;
-esac
+# Devuelve tamaño del sistema de ficheros.
+ogGetFsSize $1 $2
}
-
#/**
# ogUnlock int_ndisk int_npartition
#@see ogUnlockPartition