diff options
author | ramon <ramongomez@us.es> | 2016-04-08 11:28:22 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2016-04-08 11:28:22 +0000 |
commit | 1c9ef24ead6a0b44e3b6f001f73902938dc51e3f (patch) | |
tree | 6cc408a8b381ad0ed9aeec4bae205a02d71f7557 /client/engine | |
parent | 858b1b0a89d4f48483608263e3d7e7cf9fad6ab6 (diff) |
#740 #744: Incluir funciones de bloqueo de disco en funciones {{{ogCreateDiskImage}}} y {{{ogRestoreDiskImage}}}.
git-svn-id: https://opengnsys.es/svn/branches/version1.1@4871 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine')
-rwxr-xr-x | client/engine/Image.lib | 168 |
1 files changed, 82 insertions, 86 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib index a1ab0b44..5eeab2f6 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -10,87 +10,6 @@ #/** -# ogCreateDiskImage int_ndisk str_repo path_image [str_tools] [str_compressionlevel] -#@brief Crea una imagen (copia de seguridad) de un disco completo. -#@param int_ndisk nº de orden del disco -#@param str_repo repositorio de imágenes (remoto o caché local) -#@param path_image camino de la imagen (sin extensión) -#@return (nada, por determinar) -#@note repo = { REPO, CACHE } -#@note Esta primera versión crea imágenes con dd comprimidas con gzip. -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. -#@exception OG_ERR_LOCKED particion bloqueada por otra operación. -#@exception OG_ERR_IMAGE error al crear la imagen del sistema. -#@warning En pruebas iniciales -#@todo Gestión de bloqueos de disco -#@todo Comprobar si debe desmontarse la caché local -#@todo Comprobar que no se crea la imagen en el propio disco -#@version 1.1.0 - Primera versión para OpenGnsys con herramientas prefijadas. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@Date 2016/04/06 -#*/ ## -function ogCreateDiskImage () -{ -# Variables locales -local DISK PROGRAM IMGDIR IMGFILE IMGTYPE ERRCODE - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ - "$FUNCNAME 1 REPO /disk1" - return -fi -# Error si no se reciben entre 3 y 5 parámetros. -[ $# -ge 3 -a $# -le 5 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $? - -# Comprobar que no está bloqueada ni la partición, ni la imagen. -DISK="$(ogDiskToDev $1)" || return $? -### Pendiente: comprobar bloqueo de disco -#if ogIsLocked $1; then -# ogRaiseError $OG_ERR_LOCKED "$MSG_LOCKED $1" -# return $? -#fi - -IMGTYPE="dsk" # Extensión genérica de imágenes de disco. -IMGDIR=$(ogGetParentPath "$2" "$3") -[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$2 $(dirname $3)" || return $? - -IMGFILE="$IMGDIR/$(basename "$3").$IMGTYPE" -if ogIsImageLocked "$IMGFILE"; then - ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4" - return $? -fi -# Generar la instruccion a ejecutar antes de aplicar los bloqueos. -PROGRAM=$(ogCreateImageSyntax $DISK $IMGFILE dd gzip) -# Desmontar todos los sistemas de archivos del disco, bloquear partición e imagen. -ogUnmountAll $1 2>/dev/null -### Pendiente: bloquear disco -#ogLock $1 || return $? -ogLockImage "$2" "$3.$IMGTYPE" || return $? - -# Crear Imagen. -### Pendiente: desbloquear disco -#trap "ogUnlock $1; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 -trap "ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 -eval $PROGRAM - -# Controlar salida de error y desbloquear partición. -ERRCODE=$? -if [ $ERRCODE != 0 ]; then - ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" - rm -f "$IMGFILE" -fi -# Desbloquear partición e imagen. -### Pendiente: desbloquear disco -#ogUnlock $1 -ogUnlockImage "$2" "$3.$IMGTYPE" -return $ERRCODE -} - - - -#/** # ogCreateImageSyntax path_device path_filename [str_tool] [str_compressionlevel] #@brief Genera una cadena de texto con la instrucción para crear un fichero imagen #@param path_device dispositivo Linux del sistema de archivos @@ -287,6 +206,83 @@ fi #/** +# ogCreateDiskImage int_ndisk str_repo path_image [str_tools] [str_compressionlevel] +#@brief Crea una imagen (copia de seguridad) de un disco completo. +#@param int_ndisk nº de orden del disco +#@param str_repo repositorio de imágenes (remoto o caché local) +#@param path_image camino de la imagen (sin extensión) +#@return (nada, por determinar) +#@note repo = { REPO, CACHE } +#@note Esta primera versión crea imágenes con dd comprimidas con gzip. +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_LOCKED particion bloqueada por otra operación. +#@exception OG_ERR_IMAGE error al crear la imagen del sistema. +#@warning En pruebas iniciales +#@todo Gestión de bloqueos de disco +#@todo Comprobar si debe desmontarse la caché local +#@todo Comprobar que no se crea la imagen en el propio disco +#@version 1.1.0 - Primera versión para OpenGnsys con herramientas prefijadas. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@Date 2016/04/08 +#*/ ## +function ogCreateDiskImage () +{ +# Variables locales +local DISK PROGRAM IMGDIR IMGFILE IMGTYPE ERRCODE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + "$FUNCNAME 1 REPO /disk1" + return +fi +# Error si no se reciben entre 3 y 5 parámetros. +[ $# -ge 3 -a $# -le 5 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $? + +# Comprobar que no está bloqueada ni la partición, ni la imagen. +DISK="$(ogDiskToDev $1)" || return $? +if ogDiskIsLocked $1; then + ogRaiseError $OG_ERR_LOCKED "$MSG_LOCKED $1" + return $? +fi + +IMGTYPE="dsk" # Extensión genérica de imágenes de disco. +IMGDIR=$(ogGetParentPath "$2" "$3") +[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$2 $(dirname $3)" || return $? + +IMGFILE="$IMGDIR/$(basename "$3").$IMGTYPE" +if ogIsImageLocked "$IMGFILE"; then + ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4" + return $? +fi +# Generar la instruccion a ejecutar antes de aplicar los bloqueos. +PROGRAM=$(ogCreateImageSyntax $DISK $IMGFILE dd gzip) +# Desmontar todos los sistemas de archivos del disco, bloquear partición e imagen. +ogUnmountAll $1 2>/dev/null +### Pendiente: bloquear disco +ogLockDisk $1 || return $? +ogLockImage "$2" "$3.$IMGTYPE" || return $? + +# Crear Imagen. +trap "ogUnlockDisk $1; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 +eval $PROGRAM + +# Controlar salida de error y desbloquear partición. +ERRCODE=$? +if [ $ERRCODE != 0 ]; then + ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" + rm -f "$IMGFILE" +fi +# Desbloquear partición e imagen. +ogUnlockDisk $1 +ogUnlockImage "$2" "$3.$IMGTYPE" +return $ERRCODE +} + + + +#/** # ogCreateImage int_ndisk int_npartition str_repo path_image [str_tools] [str_compressionlevel] #@brief Crea una imagen a partir de una partición. #@param int_ndisk nº de orden del disco @@ -602,7 +598,7 @@ touch $IMGDIR/$(basename "${!#}").lock 2>/dev/null || ogRaiseError $OG_ERR_NOTWR #@exception OG_ERR_IMGSIZEPARTITION Tamaño de la particion es menor al tamaño de la imagen. #@version 1.1.0 - Primera versión para OpenGnsys. #@author Ramon Gomez, ETSII Universidad de Sevilla -#@Date 2016/04/06 +#@Date 2016/04/08 #*/ ## function ogRestoreDiskImage () { @@ -624,7 +620,7 @@ IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") [ -r "$IMGFILE" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) # comprobamos consistencia de la imagen -#ogGetImageInfo $IMGFILE >/dev/null || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) +ogGetImageInfo $IMGFILE >/dev/null || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) # Error si la imagen no cabe en la particion. #IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) #DISKSIZE=$(ogGetDiskSize $3) @@ -641,8 +637,8 @@ fi PROGRAM=$(ogRestoreImageSyntax $IMGFILE $DISK) # Bloquear el disco -#ogLock $3 || return $? -#trap "ogUnlock $3" 1 2 3 6 9 +ogLockDisk $3 || return $? +trap "ogUnlockDisk $3" 1 2 3 6 9 # Ejecutar restauración según el tipo de imagen. eval $PROGRAM @@ -651,7 +647,7 @@ ERRCODE=$? if [ $ERRCODE != 0 ]; then ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" fi -#ogUnlock $3 $4 +ogUnlockDisk $3 $4 return $ERRCODE } |