112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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"
 | |
| 
 |