112 lines
3.8 KiB
Bash
112 lines
3.8 KiB
Bash
#!/bin/bash
|
|
# Scirpt de iniciación de la caché local de disco.
|
|
# Nota: se usa como base para el programa de configuración de equipos de OpenGnsys Admin).
|
|
# Formato: initCache [int_ndisk [int_npart]] {-1 | 0 | int_size} [NOMOUNT]
|
|
# Versión: 0.9.1, 2009/03/17, - Ramón Gómez, Univ. Sevilla - Versión inicial.
|
|
# Versión: 0.9.2, 2010/07/27, - Ramón Gómez, Univ. Sevilla - redefinir parámetro.
|
|
# Version: 1.0.5, 2012/09/18, - Univ. Huelva - Nuevo parametro para indicar el disco donde se creara la CACHE, si no se indica, se usa 1
|
|
# Version: 1.1.0, 2016/06/16, - Ramón Gómez, Univ. Sevilla - Nuevos parámetros: partición de caché (por defecto, 4) y cadena opcional "NOMOUNT" para dejar la caché sin montar.
|
|
|
|
TIME1=$SECONDS
|
|
PROG="$(basename $0)"
|
|
EXECFORMAT="$PROG [int_ndisk [int_npart]] {-1 | 0 | int_size} [NOMOUNT]"
|
|
|
|
# Si el último parámetro es la cadena "NOMOUNT", marcar para no montar y descartarlo.
|
|
if [[ "${*^^}" =~ \ NOMOUNT$ ]]; then
|
|
MOUNT=0
|
|
PARAMS=$[$#-1]
|
|
else
|
|
MOUNT=1
|
|
PARAMS=$#
|
|
fi
|
|
# Tomar valores según el número de parámetros restantes.
|
|
case $PARAMS in
|
|
1) # Por defecto, disco 1 partición 4.
|
|
NDISK=1
|
|
NPART=4
|
|
SIZE=$1
|
|
;;
|
|
2) # Elegir disco y partición 4 por defecto.
|
|
NDISK=$1
|
|
NPART=4
|
|
SIZE=$2
|
|
;;
|
|
3) # Elegir disco y partición.
|
|
NDISK=$1
|
|
NPART=$2
|
|
SIZE=$3
|
|
;;
|
|
*) # Error de formato.
|
|
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT"
|
|
exit $?
|
|
;;
|
|
esac
|
|
|
|
# Si disco o partición no son mayores o iguales que 1, error.
|
|
if [ -n "${NDISK//[-0-9]/}${NPART//[-0-9]/}" ] || [ $NDISK -lt 1 ] || [ $NPART -lt 1 ] ; then
|
|
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT"
|
|
exit $?
|
|
fi
|
|
# Si tamaño no es numérico o tamaño<-1, error.
|
|
if [ -n "${SIZE//[-0-9]/}" ] || [ $SIZE -lt -1 ]; then
|
|
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT"
|
|
exit $?
|
|
fi
|
|
# Si tamaño=0, no hacer nada.
|
|
if [ $SIZE -eq 0 ]; then
|
|
echo "No modificar la caché local."
|
|
exit
|
|
fi
|
|
# Si tamaño=-1, borrar caché.
|
|
if [ $SIZE -eq -1 ]; then
|
|
echo "[10] Trabajar sin caché local."
|
|
ogUnmountCache 2>/dev/null
|
|
ogDeleteCache
|
|
else
|
|
# Si la caché actual está definida en otro disco y partición, se elimina.
|
|
if [ -n "$(ogFindCache)" -a "$NDISK $NPART" != "$(ogFindCache)" ]; then
|
|
echo "[10] Detectada otra caché, eliminarla"
|
|
ogUnmountCache 2>/dev/null
|
|
ogDeleteCache
|
|
fi
|
|
# Tomamos el tamaño actual. Si no existe cache será 0.
|
|
OLDSIZE=$(ogGetCacheSize 2>/dev/null) || OLDSIZE=0
|
|
|
|
# Error si tamaño definido no es >0.
|
|
if [ ! $SIZE -gt 0 ]; then
|
|
ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($SIZE>0)"
|
|
exit $?
|
|
fi
|
|
# Si no existe caché o si cambia su tamaño, crearla.
|
|
CACHESIZE=$(ogGetCacheSize 2>/dev/null)
|
|
if [ "$SIZE" != "$CACHESIZE" ]; then
|
|
echo "[10] Crar partición de caché local."
|
|
ogUnmountCache 2>/dev/null
|
|
ogCreateCache $NDISK $NPART $SIZE
|
|
ogUpdatePartitionTable $NDISK
|
|
fi
|
|
# Si caché no montada y no formateada o cambia el tamaño: formatear.
|
|
CACHE=$(ogFindCache) || exit $?
|
|
if ! ogIsFormated $CACHE || [ $SIZE -ne $OLDSIZE ]; then
|
|
echo "[50] Formatear caché local."
|
|
ogFormatCache
|
|
fi
|
|
echo "[70] Comprobar montaje de caché local."
|
|
ogMountCache 2>/dev/null
|
|
# Si error al montar, chequear sistema de archivos y volver a montar.
|
|
if [ $? != 0 ]; then
|
|
echo "[80] Comprobar consistencia y volver a montar caché local."
|
|
ogCheckFs $CACHE
|
|
ogMountCache || exit $?
|
|
fi
|
|
# Dejar desmontada la caché si se ha solicitado.
|
|
if [ $MOUNT == 0 ]; then
|
|
echo "[90] Dejar desmontada la caché local."
|
|
ogUnmountCache 2>/dev/null
|
|
fi
|
|
fi
|
|
# Duración del proceso.
|
|
TIME=$[SECONDS-TIME1]
|
|
echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
|
|
|