summaryrefslogtreecommitdiffstats
path: root/client/engine/Cache.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2010-03-16 12:13:40 +0000
committerramon <ramongomez@us.es>2010-03-16 12:13:40 +0000
commit311532f10871136683fd5d9fa3f60c078d7238ea (patch)
tree00e8ee84345f655cf2dfdbe9094438da0222281e /client/engine/Cache.lib
parente09311f7cf28fdbe7b5ae76139c15b1566c65a2b (diff)
Creada clase de funciones Cache.
git-svn-id: https://opengnsys.es/svn/trunk@811 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/Cache.lib')
-rwxr-xr-xclient/engine/Cache.lib276
1 files changed, 276 insertions, 0 deletions
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib
new file mode 100755
index 00000000..142c53dd
--- /dev/null
+++ b/client/engine/Cache.lib
@@ -0,0 +1,276 @@
+#!/bin/bash
+#/**
+#@file Cache.lib
+#@brief Librería o clase Cache
+#@class Cache
+#@brief Funciones para gestión de la caché local de disco.
+#@version 0.91
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogCreateCache int_partsize
+#@brief Define la caché local en la partición 4 del disco 1
+#@param int_partsize tamaño de la partición (en KB)
+#@return (nada, por determinar)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@note Requisitos: sfdisk, parted, awk, sed
+#@version 0.91 - Definición de caché local.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/09
+#*/ ##
+function ogCreateCache ()
+{
+# Variables locales.
+local DISK PART SECTORS CYLS START END SIZE ENDPART3
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_partsize" "$FUNCNAME 10000000"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+DISK=$(ogDiskToDev 1) || return $?
+PART="4"
+SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
+CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
+END=$[SECTORS/CYLS*CYLS-1]
+SIZE=$(echo $1|awk '{print $0*2}') # En sectores de 512 B.
+START=$[END-SIZE+1]
+ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
+# Error si tamaño 0 o si mayor que la mitad del disco o si pisa la partición 3.
+if [ $SIZE -eq 0 -o $SIZE -ge $[END/2] -o $START -le $ENDPART3 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$1" || return $?
+fi
+
+# Desmontar todos los sistemas de archivos del disco.
+ogUnmountAll 1 2>/dev/null
+# Si la tabla de particiones no es valida, volver a generarla.
+[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+# Definir particiones y notificar al kernel.
+sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,ca" 2>/dev/null && partprobe
+}
+
+
+#/**
+# ogDeleteCache
+#@brief Elimina la partición de caché local.
+#@return (nada, por determinar)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@note Requisitos: sfdisk, parted, awk, sed
+#@version 0.91 - Definición de caché local.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/11
+#*/ ##
+function ogDeleteCache ()
+{
+# Variables locales.
+local NDISK NPART DISK
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME"
+ return
+fi
+# Error si no se encuentra partición de caché.
+read NDISK NPART <<<"$(ogFindCache)"
+[ -n "$NDISK" -a -n "$NPART" ] || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+DISK=$(ogDiskToDev $NDISK)
+
+# Desmontar todos los sistemas de archivos del disco.
+ogUnmountAll $NDISK 2>/dev/null
+# Si la tabla de particiones no es valida, volver a generarla.
+[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+# Eliminar (poner a 0) la partición de caché.
+sfdisk -f $DISK -N$NPART <<<"0,0,0" 2>/dev/null && partprobe
+# Borrar etiqueta de la caché.
+rm -f /dev/disk/by-label/CACHE
+}
+
+
+#/**
+# ogFindCache
+#@brief Detecta la partición caché local.
+#@param No requiere parametros
+#@return int_ndisk int_npart - devuelve el par nº de disco-nº de partición .
+#@warning Si no hay cache no devuelve nada
+#@version 0.1 - Versión adaptada del Proyecto EAC.
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@Date 27/10/2008
+#@version 0.91 - Adaptación a la caché local de OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/16
+#*/ ##
+function ogFindCache ()
+{
+# Variables locales
+local PART
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 1 4"
+ return
+fi
+# Obtener el sistema de archivos etiquetado con "CACHE".
+PART=$(realpath /dev/disk/by-label/CACHE 2>/dev/null)
+# Si no, obtener la 1ª partición marcada como de tipo caché.
+PART=${PART:-$(sfdisk -l | awk '$6~/ca|a7/ {print $1}')}
+PART=${PART%% *}
+
+ogDevToDisk $PART 2>/dev/null
+}
+
+
+#/**
+# ogFormatCache
+#@brief Formatea el sistema de ficheros para la caché local.
+#@return (por determinar)
+#@warning Prueba con formato Reiser.
+#@attention
+#@note El sistema de archivos de la caché se queda montado.
+#@version 0.1 - Versión adaptada del Proyecto EAC.
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 27/10/2008
+#@version 0.91 - Creación caché local.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010-03-11
+#*/ ##
+function ogFormatCache ()
+{
+# Variables locales.
+local DEV MNTDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME"
+ return
+fi
+
+# Error si no hay definida partición de caché.
+DEV=$(ogFindCache) || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+DEV=$(ogDiskToDev $DEV) || return $?
+
+# Formatear sistema de ficheros.
+ogUnmountCache 2>/dev/null
+ # Orden para formateo Reiser 3
+mkfs.reiserfs -f $DEV -l "CACHE" 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+ # Orden para formateo XFS
+ #mkfs.xfs $DEV -L "CACHE" || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+# Crear estructura básica
+MNTDIR=$(ogMountCache)
+mkdir -p $MNTDIR/$OGIMG
+}
+
+
+#/**
+# ogGetCacheSize
+#@brief Devuelve el tamaño definido para la partición de caché.
+#@return int_partsize tamaño de la partición (en KB)
+#@exception OG_ERR_PARTITION No existe partición de caché.
+#@version 0.91 - Definición de caché local.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/09
+#*/ ##
+function ogGetCacheSize ()
+{
+# Variables locales
+local PART
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 10000000"
+ return
+fi
+# Error si no se encuentra partición de caché.
+PART=$(ogFindCache) || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+
+# Devuelve tamaño de la partición de caché.
+ogGetPartitionSize $PART
+}
+
+
+#/**
+# ogGetCacheSpace
+#@brief Devuelve el espacio de disco disponible para la partición de caché.
+#@return int_size tamaño disponible (en KB)
+#@note El espacio disponible es el que hay entre el límite superior de la partición 3 del disco 1 y el final de dicho disco, y no puede ser superior a la mitad de dicho disco.
+#@version 0.91 - Definición de caché local.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/09
+#*/ ##
+function ogGetCacheSpace ()
+{
+
+# Variables locales.
+local DISK SECTORS CYLS ENDPART3
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 23165386"
+ return
+fi
+
+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]
+ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
+# Mostrar espacio libre en KB (1 KB = 2 sectores)
+if [ $ENDPART3 -gt $[SECTORS/2] ]; then
+ echo $[(SECTORS-ENDPART3)/2]
+else
+ echo $[SECTORS/4]
+fi
+}
+
+
+#/**
+# ogMountCache
+#@brief Monta la partición Cache y exporta la variable $OGCAC
+#@param sin parametros
+#@return path_mountpoint - Punto de montaje del sistema de archivos de cache.
+#@warning Salidas de errores no determinada
+#@version 0.1 - Versión adaptada del Proyecto EAC.
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@Date 27/10/2008
+#@version 0.91 - Adaptación a la caché local de OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/16
+#*/ ##
+function ogMountCache ()
+{
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME ==> /mnt/sda4"
+ return
+fi
+
+OGCAC=$(ogMountFs $(ogFindCache) 2>/dev/null) || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+echo $OGCAC
+export OGCAC
+}
+
+
+#/**
+# ogUnmountCache
+#@brief Desmonta la particion Cache y elimina la variable $OGCAC
+#@param sin parametros
+#@return nada
+#@warning Salidas de errores no determinada
+#@version 0.1 - Versión adaptada del Proyecto EAC.
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@Date 27/10/2008
+#@version 0.91 - Adaptación a la caché local de OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/03/16
+#*/ ##
+function ogUnmountCache ()
+{
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME"
+ return
+fi
+
+unset OGCAC
+ogUnmountFs $(ogFindCache) 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE"
+}
+