diff options
author | ramon <ramongomez@us.es> | 2013-05-27 11:00:45 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2013-05-27 11:00:45 +0000 |
commit | de088a3a30f915674765431cb00965a61aa8b55f (patch) | |
tree | 058f68c9afb9d4ce5cb537578be95f01177bbd49 /client | |
parent | f2138b07d9b7904940dc93e1d6623df371bc3fe2 (diff) |
#552: Integrar código del ticket:522 (caché en cualquier disco) en rama de desarrollo.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@3827 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-x | client/engine/Cache.lib | 58 | ||||
-rwxr-xr-x | client/shared/scripts/initCache | 52 |
2 files changed, 82 insertions, 28 deletions
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib index 6d86e778..0b35d6f4 100755 --- a/client/engine/Cache.lib +++ b/client/engine/Cache.lib @@ -4,14 +4,15 @@ #@brief Librería o clase Cache #@class Cache #@brief Funciones para gestión de la caché local de disco. -#@version 1.0.4 +#@version 1.0.5 #@warning License: GNU GPLv3+ #*/ #/** -# ogCreateCache int_partsize +# ogCreateCache [int_ndisk] int_partsize #@brief Define la caché local en la partición 4 del disco 1 +#@param int_ndisk numero de disco donde crear la cache, si no se indica es el 1 por defecto #@param int_partsize tamaño de la partición (en KB) #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. @@ -27,37 +28,54 @@ #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva #@date 2012/03/13 +#@version 1.0.5 - Posibilidad de crear la cache en cualquier disco duro +#@author Universidad de Huelva +#@date 2012/09/18 #*/ ## function ogCreateCache () { # Variables locales. -local FINDCACHE NDSK PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID +local FINDCACHE NDSK SIZECACHE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_partsize" "$FUNCNAME 10000000" + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partsize" "$FUNCNAME 1 10000000" return fi -# Error si no se recibe 1 parámetro que sea un número entero. -[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? -[[ $1 =~ ([0-9]*) ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $? +# Si se recibe un parametro, sera el tamano de la cache +case $# in + 1) # Error, si no es un entero positivo + [[ $1 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $? + NDSK=1 + SIZECACHE=$1 + ;; + 2) # Error, si no son enteros positivos + [[ $1 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $? + [[ $2 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$2" || return $? + NDSK=$1 + SIZECACHE=$2 + ;; + *) ogRaiseError $OG_ERR_FORMAT + return $? + ;; +esac + +# De momento la cache sigue siendo siempre la cuarta particion +PART=4 -FINDCACHE="1 4" # Partición de caché (ndisco npart). -NDSK=${FINDCACHE% *} -PART=${FINDCACHE#* } DISK=$(ogDiskToDev $NDSK) || return $? END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco. -SIZE=$[$1*2] # Tamaño en sectores de 512 B. +SIZE=$[$SIZECACHE*2] # Tamaño en sectores de 512 B. START=$[END-SIZE+1] ENDPREVPART=$[$(ogGetLastSector $NDSK $[PART-1] 2>/dev/null)] # Error si tamaño no está entre límites permitidos o si se solapa con la partición anterior. -MINSIZE=25000 # Error de formateo si tamaño < 50 MB. -MAXSIZE=$[END/1] # No permitir tamaño > tamaño maximo del disco. +MINSIZE=25000 # Error de formateo si tamaño < 50 MB. +MAXSIZE=$END # Para restringir tamaño > mitad del disco: MAXSIZE=$[END/2] if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPREVPART ]; then ogRaiseError $OG_ERR_FORMAT "$1" || return $? fi # Desmontar todos los sistemas de archivos del disco. -ogUnmountAll 1 2>/dev/null +ogUnmountAll $NDSK 2>/dev/null # Definir particiones y notificar al kernel. # En el caso de ser disco GPT, de momento se borra la particion y se vuelve a crear, # por lo que se pierden los datos. @@ -246,19 +264,25 @@ ogGetPartitionSize $PART #@version 0.91 - Definicion de cache local. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010/03/09 +#@version 1.0.5 - Uso de ogFindCache para detectar disco y particion +#@author Universidad de Huelva +#@date 2012/09/18 #*/ ## function ogGetCacheSpace () { - # Variables locales. -local DISK SECTORS CYLS ENDPART3 +local NDISK DISK NPART SECTORS CYLS ENDPART3 # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 23165386" return fi +# Parche UHU para usar ogFindCache en lugar de 1 +# Error si no se encuentra partición de caché. +read NDISK NPART <<<"$(ogFindCache)" +[ -n "$NDISK" -a -n "$NPART" ] || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $? +DISK=$(ogDiskToDev $NDISK) || return $? -DISK=$(ogDiskToDev 1) || return $? SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions) CYLS=$(sfdisk -g $DISK | cut -f2 -d" ") SECTORS=$[SECTORS/CYLS*CYLS-1] diff --git a/client/shared/scripts/initCache b/client/shared/scripts/initCache index 69cdc535..e16d5330 100755 --- a/client/shared/scripts/initCache +++ b/client/shared/scripts/initCache @@ -3,41 +3,71 @@ # (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). # 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 TIME1=$SECONDS PROG="$(basename $0)" -if [ $# -ne 1 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" +# Si el numero de parametros es 1, es el tamano de la CACHE +if [ $# == 1 ] +then + NDISK=1 + SIZE=$1 +elif [ $# == 2 ] +then + NDISK=$1 + SIZE=$2 +else + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG [int_ndisk] -1 | 0 | size" + exit $? +fi + +# Si disco no es mayor o igual que 1, error. +if [ -n "${NDISK//[-0-9]/}" ] || [ $NDISK -lt 1 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG [int_ndisk] -1 | 0 | size" exit $? fi # Si tamaño no es numérico o tamaño<-1, error. -if [ -n "${1//[-0-9]/}" ] || [ $1 -lt -1 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" +if [ -n "${SIZE//[-0-9]/}" ] || [ $SIZE -lt -1 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG int_ndisk [-1 | 0 | size]" exit $? fi # Si tamaño=0, no hacer nada. -if [ $1 -eq 0 ]; then +if [ $SIZE -eq 0 ]; then echo "No modificar la caché local." exit fi # Si tamaño=-1, borrar caché. -if [ $1 -eq -1 ]; then +if [ $SIZE -eq -1 ]; then echo "[10] Trabajar sin caché local." ogUnmountCache 2>/dev/null ogDeleteCache else + # Comprobar disco y particion donde se aloja la cache actualmente, si la hay + FINDCACHE=`ogFindCache` + echo "[5] ogFindCache: "$FINDCACHE + CACHEDISK=${FINDCACHE% *} + PART=${FINDCACHE#* } + + # Si la CACHE actual esta definida en otro disco, se elimina + if [ "$NDISK" != "$CACHEDISK" ] + then + echo "[10] Detectada cache en otro disco, eliminarla" + ogUnmountCache 2>/dev/null + ogDeleteCache + fi + # Si tamaño>0, ... - if [ ! $1 -gt 0 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($1>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. - SIZE=$(ogGetCacheSize 2>/dev/null) - if [ "$1" != "$SIZE" ]; then + CACHESIZE=$(ogGetCacheSize 2>/dev/null) + if [ "$SIZE" != "$CACHESIZE" ]; then echo "[10] Crar partición de caché local." ogUnmountCache 2>/dev/null - ogCreateCache "$1" + ogCreateCache "$SIZE" fi # Si caché no montada y no formateada, formatear. CACHE=$(ogFindCache) || exit $? |