[e6c0037] | 1 | #!/bin/bash |
---|
| 2 | # Scirpt de iniciación de la caché local de disco. |
---|
[5b825b50] | 3 | # Nota: se usa como base para el programa de configuración de equipos de OpenGnsys Admin). |
---|
[8bd836a] | 4 | # Formato: initCache [int_ndisk [int_npart]] {-1 | 0 | int_size} [NOMOUNT] |
---|
[8abcdfe] | 5 | # Versión: 0.9.1, 2009/03/17, - Ramón Gómez, Univ. Sevilla - Versión inicial. |
---|
| 6 | # Versión: 0.9.2, 2010/07/27, - Ramón Gómez, Univ. Sevilla - redefinir parámetro. |
---|
[de088a3] | 7 | # 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 |
---|
[8bd836a] | 8 | # 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. |
---|
[e6c0037] | 9 | |
---|
| 10 | TIME1=$SECONDS |
---|
| 11 | PROG="$(basename $0)" |
---|
[8bd836a] | 12 | EXECFORMAT="$PROG [int_ndisk [int_npart]] {-1 | 0 | int_size} [NOMOUNT]" |
---|
| 13 | |
---|
| 14 | # Si el último parámetro es la cadena "NOMOUNT", marcar para no montar y descartarlo. |
---|
| 15 | if [[ "${*^^}" =~ \ NOMOUNT$ ]]; then |
---|
| 16 | MOUNT=0 |
---|
| 17 | PARAMS=$[$#-1] |
---|
| 18 | else |
---|
| 19 | MOUNT=1 |
---|
| 20 | PARAMS=$# |
---|
| 21 | fi |
---|
| 22 | # Tomar valores según el número de parámetros restantes. |
---|
| 23 | case $PARAMS in |
---|
| 24 | 1) # Por defecto, disco 1 partición 4. |
---|
[de088a3] | 25 | NDISK=1 |
---|
[8bd836a] | 26 | NPART=4 |
---|
[de088a3] | 27 | SIZE=$1 |
---|
[8bd836a] | 28 | ;; |
---|
| 29 | 2) # Elegir disco y partición 4 por defecto. |
---|
[de088a3] | 30 | NDISK=$1 |
---|
[8bd836a] | 31 | NPART=4 |
---|
[de088a3] | 32 | SIZE=$2 |
---|
[8bd836a] | 33 | ;; |
---|
| 34 | 3) # Elegir disco y partición. |
---|
| 35 | NDISK=$1 |
---|
| 36 | NPART=$2 |
---|
| 37 | SIZE=$3 |
---|
| 38 | ;; |
---|
| 39 | *) # Error de formato. |
---|
| 40 | ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT" |
---|
| 41 | exit $? |
---|
| 42 | ;; |
---|
| 43 | esac |
---|
[de088a3] | 44 | |
---|
[8bd836a] | 45 | # Si disco o partición no son mayores o iguales que 1, error. |
---|
| 46 | if [ -n "${NDISK//[-0-9]/}${NPART//[-0-9]/}" ] || [ $NDISK -lt 1 ] || [ $NPART -lt 1 ] ; then |
---|
| 47 | ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT" |
---|
[e6c0037] | 48 | exit $? |
---|
| 49 | fi |
---|
[8abcdfe] | 50 | # Si tamaño no es numérico o tamaño<-1, error. |
---|
[de088a3] | 51 | if [ -n "${SIZE//[-0-9]/}" ] || [ $SIZE -lt -1 ]; then |
---|
[8bd836a] | 52 | ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $EXECFORMAT" |
---|
[8abcdfe] | 53 | exit $? |
---|
| 54 | fi |
---|
| 55 | # Si tamaño=0, no hacer nada. |
---|
[de088a3] | 56 | if [ $SIZE -eq 0 ]; then |
---|
[8abcdfe] | 57 | echo "No modificar la caché local." |
---|
| 58 | exit |
---|
| 59 | fi |
---|
| 60 | # Si tamaño=-1, borrar caché. |
---|
[de088a3] | 61 | if [ $SIZE -eq -1 ]; then |
---|
[e6c0037] | 62 | echo "[10] Trabajar sin caché local." |
---|
| 63 | ogUnmountCache 2>/dev/null |
---|
| 64 | ogDeleteCache |
---|
| 65 | else |
---|
[8bd836a] | 66 | # Si la caché actual está definida en otro disco y partición, se elimina. |
---|
[16f28b7] | 67 | if [ -n "$(ogFindCache)" -a "$NDISK $NPART" != "$(ogFindCache)" ]; then |
---|
[8bd836a] | 68 | echo "[10] Detectada otra caché, eliminarla" |
---|
[de088a3] | 69 | ogUnmountCache 2>/dev/null |
---|
| 70 | ogDeleteCache |
---|
| 71 | fi |
---|
[f097c21] | 72 | # Tomamos el tamaño actual. Si no existe cache será 0. |
---|
| 73 | OLDSIZE=$(ogGetCacheSize 2>/dev/null) || OLDSIZE=0 |
---|
[de088a3] | 74 | |
---|
[8bd836a] | 75 | # Error si tamaño definido no es >0. |
---|
[de088a3] | 76 | if [ ! $SIZE -gt 0 ]; then |
---|
| 77 | ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($SIZE>0)" |
---|
[8abcdfe] | 78 | exit $? |
---|
| 79 | fi |
---|
[e6c0037] | 80 | # Si no existe caché o si cambia su tamaño, crearla. |
---|
[de088a3] | 81 | CACHESIZE=$(ogGetCacheSize 2>/dev/null) |
---|
| 82 | if [ "$SIZE" != "$CACHESIZE" ]; then |
---|
[e6c0037] | 83 | echo "[10] Crar partición de caché local." |
---|
| 84 | ogUnmountCache 2>/dev/null |
---|
[8bd836a] | 85 | ogCreateCache $NDISK $NPART $SIZE |
---|
| 86 | ogUpdatePartitionTable $NDISK |
---|
[e6c0037] | 87 | fi |
---|
[f097c21] | 88 | # Si caché no montada y no formateada o cambia el tamaño: formatear. |
---|
[e1c4317] | 89 | CACHE=$(ogFindCache) || exit $? |
---|
[f097c21] | 90 | if ! ogIsFormated $CACHE || [ $SIZE -ne $OLDSIZE ]; then |
---|
[e6c0037] | 91 | echo "[50] Formatear caché local." |
---|
| 92 | ogFormatCache |
---|
| 93 | fi |
---|
[8bd836a] | 94 | echo "[70] Comprobar montaje de caché local." |
---|
[e1c4317] | 95 | ogMountCache 2>/dev/null |
---|
[e6c0037] | 96 | # Si error al montar, chequear sistema de archivos y volver a montar. |
---|
| 97 | if [ $? != 0 ]; then |
---|
[8bd836a] | 98 | echo "[80] Comprobar consistencia y volver a montar caché local." |
---|
[e6c0037] | 99 | ogCheckFs $CACHE |
---|
[e1c4317] | 100 | ogMountCache || exit $? |
---|
[e6c0037] | 101 | fi |
---|
[8bd836a] | 102 | # Dejar desmontada la caché si se ha solicitado. |
---|
| 103 | if [ $MOUNT == 0 ]; then |
---|
| 104 | echo "[90] Dejar desmontada la caché local." |
---|
| 105 | ogUnmountCache 2>/dev/null |
---|
| 106 | fi |
---|
[e6c0037] | 107 | fi |
---|
| 108 | # Duración del proceso. |
---|
| 109 | TIME=$[SECONDS-TIME1] |
---|
| 110 | echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" |
---|
| 111 | |
---|