diff options
Diffstat (limited to 'client/engine/Cache.lib')
-rwxr-xr-x | client/engine/Cache.lib | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib index e68dedbe..8f6c9663 100755 --- a/client/engine/Cache.lib +++ b/client/engine/Cache.lib @@ -4,15 +4,16 @@ #@brief Librería o clase Cache #@class Cache #@brief Funciones para gestión de la caché local de disco. -#@version 1.0.5 +#@version 1.1.0 #@warning License: GNU GPLv3+ #*/ #/** # ogCreateCache [int_ndisk] int_partsize -#@brief Define la caché local en la partición 4 del disco 1 +#@brief Define la caché local, por defecto en 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_npart número de partición (opcional, 4 por defecto) #@param int_partsize tamaño de la partición (en KB) #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. @@ -31,17 +32,23 @@ #@version 1.0.5 - Posibilidad de crear la cache en cualquier disco duro #@author Universidad de Huelva #@date 2012/09/18 +#@version 1.1.0 - Posibilidad de crear la caché en cualquier partición. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2016/05/25 +#@version 1.1.0 - Soporte discos con sectores de 4k +#@date 2017/01/09 #@version 1.0.6b - Al crear las particiones ordenamos los dispositivos en el fichero auxiliar. #@author Irina Gomez, ETSII Universidad de Sevilla -#@date 2016/12/19 +#@date 2017/01/09 #*/ ## function ogCreateCache () { # Variables locales. -local FINDCACHE NDSK SIZECACHE IOSIZE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID +local FINDCACHE IOSIZE NDSK SIZECACHE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID TMPFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partsize" "$FUNCNAME 1 10000000" + ogHelp "$FUNCNAME" "$FUNCNAME [int_ndisk [int_npart]] int_partsize" \ + "$FUNCNAME 10000000" "$FUNCNAME 1 10000000" "$FUNCNAME 1 4 10000000" return fi # Si se recibe un parametro, sera el tamano de la cache @@ -49,34 +56,41 @@ case $# in 1) # Error, si no es un entero positivo [[ $1 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $? NDSK=1 + PART=4 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 + PART=4 SIZECACHE=$2 ;; + 3) # 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 $? + [[ $3 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$3" || return $? + NDSK=$1 + PART=$2 + SIZECACHE=$3 + ;; *) ogRaiseError $OG_ERR_FORMAT return $? ;; esac -# De momento la cache sigue siendo siempre la cuarta particion -PART=4 - +TMPFILE=/tmp/sfdisk$$ DISK=$(ogDiskToDev $NDSK) || return $? END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco. SIZE=$[$SIZECACHE*2] # Tamaño en sectores de 512 B. -###### agp ############ -IOSIZE=$(fdisk -l $DISK | grep I/O | cut -d ":" -f2 | cut -d "/" -f1 | cut -d " " -f2) -if [[ $IOSIZE = 4096 ]]; then - END=$[$END-8192] - START=$[END-SIZE-8192] +# Inicio partición cache según el disco tenga sectores de 4k o menores +IOSIZE=$(fdisk -l $DISK | awk '/I\/O/ {print $4}') +if [ $IOSIZE -eq 4096 ]; then + END=$[$END-8192] + START=$[END-SIZE-8192] else - START=$[END-SIZE+1] + START=$[END-SIZE+1] fi -###### agp ############ 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. @@ -98,7 +112,7 @@ fi case "$(ogGetPartitionTableType $NDSK)" in GPT) # Si la tabla de particiones no es valida, volver a generarla. - [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK + [ ! $(sgdisk -p $DISK &>/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK # Si existe la cache se borra previamente [ -n "$(ogFindCache)" ] && ogDeleteCache # Capturamos el codigo de particion GPT para cache @@ -107,23 +121,24 @@ case "$(ogGetPartitionTableType $NDSK)" in ;; MSDOS) # Si la tabla de particiones no es valida, volver a generarla. - [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w" + parted -s $DISK print &>/dev/null || fdisk $DISK <<< "w" # Definir particiones y notificar al kernel. ID=$(ogTypeToId CACHE MSDOS) - local TMPFILE=/tmp/sfdisk$$ + # Salvamos la configuración de las particiones e incluimos la cache. trap "rm -f $TMPFILE" 1 2 3 9 15 sfdisk --dump $DISK | grep -v $DISK$PART > $TMPFILE echo "$DISK$PART : start= $START, size= $SIZE, Id=$ID" >> $TMPFILE - # Ordenamos las lineas de los dispositivos - UNIT=$(grep unit $TMPFILE) - grep ^/dev $TMPFILE|sort -o $TMPFILE - sed -i "1i $UNIT\n" $TMPFILE + # Ordenamos las líneas de los dispositivos + UNIT=$(grep unit $TMPFILE) + grep ^/dev $TMPFILE|sort -o $TMPFILE + sed -i "1i $UNIT\n" $TMPFILE + # Guardamos nueva configuración en el disco. sfdisk --no-reread $DISK < $TMPFILE rm -f $TMPFILE ;; esac -#Actualiza la tabla de particiones en el kernel. -ogUpdatePartitionTable $NDISK +# Actualiza la tabla de particiones en el kernel. +ogUpdatePartitionTable } @@ -132,16 +147,19 @@ ogUpdatePartitionTable $NDISK #@brief Elimina la partición de caché local. #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. -#@note Requisitos: sfdisk, parted, awk, sed +#@note Requisitos: fdisk, sgdisk, partprobe #@version 0.91 - Definición de caché local. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010/03/11 #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva #@date 2012/03/13 -#@version 1.0.6b - llamada correcta a ogGetPartitionTableType y ogUpdatePartitionTable +#@version 1.0.6b - llamada correcta a ogUpdatePartitionTable #@author Antonio Doblas Universidad de Málaga #@date 2016/11/16 +#@version 1.1.0 - Sustituir "sfdisk" por "fdisk" para discos MSDOS. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2016/05/25 #*/ ## function ogDeleteCache () { @@ -163,13 +181,13 @@ case "$(ogGetPartitionTableType $NDISK)" in GPT) # Si la tabla de particiones no es valida, volver a generarla. [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK - sgdisk $DISK -d$NPART 2>/dev/null + sgdisk $DISK -d$NPART 2>/dev/null ;; MSDOS) # 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 + parted -s $DISK print &>/dev/null || fdisk $DISK <<< "w" + # Eliminar la partición de caché. + echo -e "d\n$NPART\nw" | fdisk $DISK 2>/dev/null ;; esac # Borrar etiqueta de la caché. @@ -238,6 +256,10 @@ ogDevToDisk ${PART%% *} 2>/dev/null #@version 0.91 - Creacion cache local. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010-03-11 +#@version 1.1.0 - llamada a updateBootCache. +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date 2018-01-21 + #*/ ## function ogFormatCache () { @@ -260,6 +282,9 @@ mkfs.ext4 -q -F $DEV -L "CACHE" -O extent,large_file 2>/dev/null || ogRaiseError # Crear estructura básica. MNTDIR=$(ogMountCache) mkdir -p $MNTDIR/$OGIMG + +# Incluir kernel e Initrd del ogLive +updateBootCache 2>&1>/dev/null } |