summaryrefslogtreecommitdiffstats
path: root/client/engine/Cache.lib
diff options
context:
space:
mode:
Diffstat (limited to 'client/engine/Cache.lib')
-rwxr-xr-xclient/engine/Cache.lib85
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
}