summaryrefslogtreecommitdiffstats
path: root/client/engine
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2013-05-27 11:00:45 +0000
committerramon <ramongomez@us.es>2013-05-27 11:00:45 +0000
commitde088a3a30f915674765431cb00965a61aa8b55f (patch)
tree058f68c9afb9d4ce5cb537578be95f01177bbd49 /client/engine
parentf2138b07d9b7904940dc93e1d6623df371bc3fe2 (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/engine')
-rwxr-xr-xclient/engine/Cache.lib58
1 files changed, 41 insertions, 17 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]