diff options
author | ramon <ramongomez@us.es> | 2010-03-16 12:13:40 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2010-03-16 12:13:40 +0000 |
commit | 311532f10871136683fd5d9fa3f60c078d7238ea (patch) | |
tree | 00e8ee84345f655cf2dfdbe9094438da0222281e /client/engine/Cache.lib | |
parent | e09311f7cf28fdbe7b5ae76139c15b1566c65a2b (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-x | client/engine/Cache.lib | 276 |
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" +} + |