diff options
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-x | client/engine/Image.lib | 348 |
1 files changed, 287 insertions, 61 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 7940b4f5..dfbcb487 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -4,12 +4,11 @@ #@brief Librería o clase Image #@class Image #@brief Funciones para creación, restauración y clonación de imágenes de sistemas. -#@version 1.0.5 +#@version 1.1.0 #@warning License: GNU GPLv3+ #*/ - #/** # ogCreateImageSyntax path_device path_filename [str_tool] [str_compressionlevel] #@brief Genera una cadena de texto con la instrucción para crear un fichero imagen @@ -29,7 +28,7 @@ #*/ ## function ogCreateImageSyntax() { -local FS TOOL LEVEL PART IMGFILE BUFFER PARAM1 PARAM2 PARAM3 +local FS TOOL LEVEL DEV IMGFILE BUFFER PARAM1 PARAM2 PARAM3 # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -42,10 +41,10 @@ fi [ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $? # Asignación de parámetros. -PART="$1" +DEV="$1" IMGFILE="$2" case "$#" in - 2) # Sintaxis por defecto OG PART IMGFILE + 2) # Sintaxis por defecto OG DEV IMGFILE TOOL="partclone" LEVEL="gzip" ;; @@ -57,14 +56,13 @@ esac case "$TOOL" in ntfsclone) - PARAM1="ntfsclone --force --save-image -O - $PART" + PARAM1="ntfsclone --force --save-image -O - $DEV" ;; partimage|default) - PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" + PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $DEV stdout" ;; partclone) - FS="$(ogGetFsType $(ogDevToDisk $PART 2>/dev/null) 2>/dev/null)" - umount $PART 2>/dev/null + FS="$(ogGetFsType $(ogDevToDisk $DEV 2>/dev/null) 2>/dev/null)" case "$FS" in EXT[234]) PARAM1="partclone.extfs" ;; BTRFS) PARAM1="partclone.btrfs" ;; @@ -72,16 +70,21 @@ case "$TOOL" in REISER4) PARAM1="partclone.reiser4" ;; JFS) PARAM1="partclone.jfs" ;; XFS) PARAM1="partclone.xfs" ;; + F2FS) PARAM1="partclone.f2fs" ;; + NILFS2) PARAM1="partclone.nilfs2" ;; NTFS) PARAM1="partclone.ntfs" ;; EXFAT) PARAM1="partclone.exfat" ;; FAT16|FAT32) PARAM1="partclone.fat" ;; HFS|HFSPLUS) PARAM1="partclone.hfsp" ;; UFS) PARAM1="partclone.ufs" ;; - *) PARAM1="partclone.dd" ;; + VMFS) PARAM1="partclone.vmfs" ;; + *) PARAM1="partclone.imager" ;; esac # Por compatibilidad, si no existe el ejecutable usar por defecto "parclone.dd". which $PARAM1 &>/dev/null || PARAM1="partclone.dd" - PARAM1="$PARAM1 -d0 -F -c -s $PART" + PARAM1="$PARAM1 -d0 -F -c -s $DEV" + # Algunas versiones de partclone.dd no tienen opción "-c". + [ -z "$(eval ${PARAM1%% *} --help 2>&1 | grep -- -c)" ] && PARAM1="${PARAM1/ -c / }" ;; esac # Comprobar que existe mbuffer. @@ -116,8 +119,7 @@ esac #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2010/02/08 #*/ ## - -ogRestoreImageSyntax () +function ogRestoreImageSyntax () { local TOOL COMPRESSOR LEVEL PART IMGFILE FILEHEAD INFOIMG @@ -177,17 +179,20 @@ if [ "$#" -eq 4 ]; then #comprobar mbuffer which mbuffer > /dev/null && MBUFFER="| mbuffer -q -m 40M " || MBUFFER=" " - case "$TOOL" in - "ntfsclone" | "NTFSCLONE") + case "${TOOL,,}" in + ntfsclone) TOOL="| ntfsclone --restore-image --overwrite $PART -" ;; - "partimage"| "PARTIMAGE") + partimage) TOOL="| partimage -f3 -B gui=no restore $PART stdin" ;; - "partclone" | "PARTCLONE") + partclone*) # -C para que no compruebe tamaños TOOL="| partclone.restore -d0 -C -I -o $PART" ;; + dd) + TOOL="| pv | dd conv=sync,noerror bs=1M of=$PART" + ;; *) ogRaiseError $OG_ERR_NOTFOUND "Tools imaging no valid $TOOL" || return $? ;; @@ -202,6 +207,88 @@ 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 str_repo path_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 ogIsDiskLocked $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 + +# No guardar imagen en el propio disco (disco no incluido en el camino del repositorio). +if [[ $(ogGetPath "$2" /) =~ ^$DISK ]]; then + ogRaiseError $OG_ERR_IMAGE "$2 = $DISK" + return $? +fi + +# Generar la instruccion a ejecutar antes de aplicar los bloqueos. +PROGRAM=$(ogCreateImageSyntax $DISK $IMGFILE) +# Desmontar todos los sistemas de archivos del disco, bloquear disco e imagen. +ogUnmountAll $1 2>/dev/null +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, crear fichero de información y desbloquear partición. +ERRCODE=$? +if [ $ERRCODE == 0 ]; then + echo "$(ogGetImageInfo $IMGFILE):$(ogGetHostname)" > $IMGFILE.info +else + ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" + rm -f "$IMGFILE" +fi +# Desbloquear disco 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 @@ -217,7 +304,6 @@ fi #@exception OG_ERR_PARTITION partición no accesible o no soportada. #@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 Comprobaciones, control de errores, definir parámetros, etc. #@version 0.1 - Integracion para Opengnsys - HIDRA:CrearImagen{EXT3, NTFS}.sh; EAC: CreateImageFromPartition () en Deploy.lib #@author Ramon Gomez, ETSII Universidad de Sevilla @@ -238,8 +324,8 @@ local PART PROGRAM IMGDIR IMGFILE IMGTYPE ERRCODE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart path_dir str_image" \ - "$FUNCNAME 1 1 REPO /aula1/winxp" + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart str_repo path_image" \ + "$FUNCNAME 1 1 REPO /aula1/win7" return fi # Error si no se reciben entre 4 y 6 parámetros. @@ -248,7 +334,7 @@ fi # Comprobar que no está bloqueada ni la partición, ni la imagen. PART="$(ogDiskToDev $1 $2)" || return $? if ogIsLocked $1 $2; then - ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2" + ogRaiseError $OG_ERR_LOCKED "$MSG_LOCKED $1, $2" return $? fi @@ -272,9 +358,11 @@ ogLockImage "$3" "$4.$IMGTYPE" || return $? trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 eval $PROGRAM -# Controlar salida de error y desbloquear partición. +# Controlar salida de error, crear fichero de información y desbloquear partición. ERRCODE=$? -if [ $ERRCODE != 0 ]; then +if [ $ERRCODE == 0 ]; then + echo "$(ogGetImageInfo $IMGFILE):$(ogGetHostname)" > $IMGFILE.info +else ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" rm -f "$IMGFILE" fi @@ -309,7 +397,7 @@ function ogCreateMbrImage () local DISK IMGDIR IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_repo path_image" \ "$FUNCNAME 1 REPO /aula1/mbr" return fi @@ -347,7 +435,7 @@ function ogCreateBootLoaderImage () local DISK IMGDIR IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_repo path_image" \ "$FUNCNAME 1 REPO /aula1/mbr" return fi @@ -369,25 +457,39 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM #@param int_disk numero de disco #@param int_part numero de particion #@param str_repo repositorio de imágenes { REPO, CACHE } +#@param str_imageName Nombre de la imagen #@param str_imageType Tipo de imagen: monolit (por defecto), sync o diff. (parametro opcional) -#@return SIZEDATA SIZEREQUIRED ISENOUGHSPACE +#@return SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE #@note si str_imageType= diff necesario /tmp/ogimg.info, que es creado por ogCreateInfoImage. +#@note para el tamaño de la imagen no sigue enlaces simbólicos. #@exception OG_ERR_FORMAT formato incorrecto. #@author Irina Gomez, ETSII Universidad de Sevilla #@date 2014/10/24 +#@version 1.1.0 - En la salida se incluye el espacio disponible en el repositorio (ticket #771) +#@author Irina Gomez - ETSII Universidad de Sevilla +#@date 2017-03-28 +#@version 1.1.0 - Si la imagen ya existe en el REPO se suma su tamaño al espacio libre +#@author Irina Gomez - ETSII Universidad de Sevilla +#@date 2017-11-08 #*/ ## function ogGetSizeParameters () { -local MNTDIR SIZEDATA KERNELVERSION SIZEREQUIRED FACTORGZIP FACTORLZOP SIZEFREE +local REPO MNTDIR SIZEDATA KERNELVERSION SIZEREQUIRED FACTORGZIP FACTORLZOP FACTORSYNC SIZEFREE +local IMGTYPE IMGDIR IMGFILE IMGEXT IMGSIZE + # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part str_repo [monolic|sync|diff]" \ - "if $FUNCNAME 1 2 REPO sync ; then ...; fi" \ - "if $FUNCNAME 1 6 CACHE ; then ...; fi" + ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part str_repo path_imgname [monolit|sync|diff]" \ + "if $FUNCNAME 1 2 REPO Windows10 sync ; then ...; fi" \ + "if $FUNCNAME 1 6 Ubuntu16 CACHE ; then ...; fi" return fi # Error si no se reciben 1 o 2 parámetros. -[ $# -lt 3 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE [monolitic|sync]" ; echo $?) +[ $# -lt 4 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imgname [monolit|sync|diff]" ; echo $?) + +# Recogemos parametros +REPO=${3^^} +IMGTYPE="_${5^^}_" MNTDIR=$(ogMount $1 $2) if [ "$MNTDIR" == "" ]; then @@ -396,21 +498,22 @@ if [ "$MNTDIR" == "" ]; then fi # Datos contenidos en la particion o en la lista de archivos de contiene la diferencial. -if [ "_${4^^}_" == "_DIFF_" ]; then +if [ "$IMGTYPE" == "_DIFF_" ]; then [ -r /tmp/ogimg.info ] || return $(ogRaiseError session $OG_ERR_NOTFOUND "/tmp/ogimg.info"; echo $?) cd $MNTDIR SIZEDATA=$(grep -v "\/$" /tmp/ogimg.info | tr '\n' '\0'| du -x -c --files0-from=- 2>/dev/null|tail -n1 |cut -f1) + cd / else - SIZEDATA=$(df -k | grep $MNTDIR | awk '{print $3}') + SIZEDATA=$(df -k | grep $MNTDIR\$ | awk '{print $3}') fi #Aplicar factor de compresion -if [ "_${4^^}_" == "_SYNC_" -o "_${4^^}_" == "_DIFF_" ]; then +if [ "$IMGTYPE" == "_SYNC_" -o "$IMGTYPE" == "_DIFF_" ]; then # Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}') [ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"} - FACTORSYNC=${FACTORSYNC:-"120"} + FACTORSYNC=${FACTORSYNC:-"130"} # Si IMGFS="BTRFS" la compresion es mayor. [ $IMGFS == "BTRFS" ] && let FACTORSYNC=$FACTORSYNC-20 @@ -425,13 +528,33 @@ else fi #Comprobar espacio libre en el contenedor. -[ "${3^^}" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) -[ "${3^^}" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}') +[ "$REPO" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) +[ "$REPO" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}') + +# Comprobamos si existe una imagen con el mismo nombre en $REPO +# En sincronizadas restamos tamaño de la imagen y en monoloticas de la .ant +case "${IMGTYPE}" in + _DIFF_) IMGEXT="img.diff" + ;; + _SYNC_) IMGEXT="img" + ;; + *) IMGEXT="img.ant" + ;; +esac -[ "$SIZEREQUIRED" -lt "$SIZEFREE" ] && ISENOUGHSPACE=TRUE || ISENOUGHSPACE=FALSE +IMGDIR=$(ogGetParentPath "$REPO" "/$4") +IMGFILE=$(ogGetPath "$IMGDIR/$(basename "/$4").$IMGEXT") +if [ -z "$IMGFILE" ]; then + IMGSIZE=0 +else + IMGSIZE=$(ls -s "$IMGFILE" | cut -f1 -d" ") +fi + +let SIZEFREE=$SIZEFREE+$IMGSIZE -echo $SIZEDATA $SIZEREQUIRED $ISENOUGHSPACE +[ "$SIZEREQUIRED" -lt "$SIZEFREE" ] && ISENOUGHSPACE=TRUE || ISENOUGHSPACE=FALSE +echo $SIZEDATA $SIZEREQUIRED $SIZEFREE $ISENOUGHSPACE } @@ -455,8 +578,8 @@ function ogIsImageLocked () # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "if $FUNCNAME /opt/opengnsys/images/aula1/winxp.img; then ...; fi" \ - "if $FUNCNAME REPO /aula1/winxp.img; then ...; fi" + "if $FUNCNAME /opt/opengnsys/images/aula1/win7.img; then ...; fi" \ + "if $FUNCNAME REPO /aula1/win7.img; then ...; fi" return fi # Error si no se reciben 1 o 2 parámetros. @@ -488,8 +611,8 @@ local IMGDIR # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" + "$FUNCNAME /opt/opengnsys/images/aula1/win7.img" \ + "$FUNCNAME REPO /aula1/win7.img" return fi # Error si no se reciben 1 o 2 parámetros. @@ -502,6 +625,81 @@ touch $IMGDIR/$(basename "${!#}").lock 2>/dev/null || ogRaiseError $OG_ERR_NOTWR #/** +# ogRestoreDiskImage str_repo path_image int_npartition +#@brief Restaura (recupera) una imagen de un disco completo. +#@param str_repo repositorio de imágenes o caché local +#@param path_image camino de la imagen +#@param int_ndisk nº de orden del disco +#@return (por determinar) +#@warning Primera versión en pruebas +#@todo Gestionar bloqueos de disco +#@todo Comprobar que no se intenta restaurar de la caché sobre el mismo disco +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. +#@exception OG_ERR_LOCKED partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@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/08 +#*/ ## +function ogRestoreDiskImage () +{ +# Variables locales +local DISK DISKSIZE IMGFILE IMGTYPE IMGSIZE PROGRAM ERRCODE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image int_ndisk" \ + "$FUNCNAME REPO /aula1/win7 1" + return +fi +# Error si no se reciben 4 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Procesar parámetros. +DISK="$(ogDiskToDev $3)" || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) +IMGTYPE="dsk" +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 $?) +# Error si la imagen no cabe en la particion. +#IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) +#DISKSIZE=$(ogGetDiskSize $3) +#if [ $IMGSIZE -gt $DISKSIZE ]; then +# ogRaiseError $OG_ERR_IMGSIZEPARTITION "$DISKSIZE < $IMGSIZE" +# return $? +#fi +# Comprobar el bloqueo de la imagen y de la partición. +if ogIsImageLocked "$IMGFILE"; then + ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" + return $? +fi +if ogIsDiskLocked $3; then + ogRaiseError $OG_ERR_LOCKED "$MSG_DISK $3" + return $? +fi +# Solicitamos la generación de la instruccion a ejecutar +PROGRAM=$(ogRestoreImageSyntax $IMGFILE $DISK) + +# Bloquear el disco +ogLockDisk $3 || return $? +trap "ogUnlockDisk $3" 1 2 3 6 9 + +# Ejecutar restauración según el tipo de imagen. +eval $PROGRAM + +ERRCODE=$? +if [ $ERRCODE != 0 ]; then + ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" +fi +ogUnlockDisk $3 $4 +return $ERRCODE +} + + +#/** # ogRestoreImage str_repo path_image int_ndisk int_npartition #@brief Restaura una imagen de sistema de archivos en una partición. #@param str_repo repositorio de imágenes o caché local @@ -538,8 +736,8 @@ local PART PARTSIZE IMGFILE IMGTYPE IMGSIZE FSTYPE PROGRAM ERRCODE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME REPO /aula1/winxp 1 1" + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image int_ndisk int_npart" \ + "$FUNCNAME REPO /aula1/win7 1 1" return fi # Error si no se reciben 4 parámetros. @@ -618,7 +816,7 @@ function ogRestoreMbrImage () local DISK IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk" \ + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image int_ndisk" \ "$FUNCNAME REPO /aula1/mbr 1" return fi @@ -654,7 +852,7 @@ function ogRestoreBootLoaderImage () local DISK IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk" \ + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image int_ndisk" \ "$FUNCNAME REPO /aula1/mbr 1" return fi @@ -687,8 +885,8 @@ function ogUnlockImage () # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" + "$FUNCNAME /opt/opengnsys/images/aula1/win7.img" \ + "$FUNCNAME REPO /aula1/win7.img" return fi # Error si no se reciben 1 o 2 parámetros. @@ -720,12 +918,12 @@ function ogGetImageInfo () { # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME filename " \ - "$FUNCNAME /opt/opengnsys/images/prueba.img " + ogHelp "$FUNCNAME" "$FUNCNAME path_filename" \ + "$FUNCNAME /opt/opengnsys/images/prueba.img ==> PARTCLONE:LZOP:NTFS:5642158" return fi -# Error si no se reciben 1 parámetros. +# Error si no se recibe 1 parámetro. [ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? #comprobando que el parametro uno es un file. @@ -786,7 +984,13 @@ then FS=$(echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $17;}' | awk '{sub(/\.\.+/," "); print toupper($2)}') SIZE=$( echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $36;}' | awk '{sub(/\.\.+/," "); printf "%d\n",$2*1024*1024;}') IMGDETECT="TRUE" - fi + fi + if file $FILEHEAD 2> /dev/null | grep -q "boot sector"; then + TOOLS="partclone.dd" + FS= + SIZE= + IMGDETECT="TRUE" + fi fi #comprobamos valores #Chequeamos los valores devueltos. if [ -z "$TOOLS" -o -z "$COMPRESSOR" -o "$IMGDETECT" == "FALSE" ] @@ -798,34 +1002,58 @@ else fi } + function ogGetImageProgram () { local IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image" \ + "$FUNCNAME REPO prueba ==> PARTCLONE" + return +fi +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? IMGFILE=$(ogGetPath "$1" "$2.img") || return $? [ -r "$IMGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGFILE" || return $? ogGetImageInfo $IMGFILE | awk -F: '{print $1}' - } + function ogGetImageCompressor () { local IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image" \ + "$FUNCNAME REPO prueba ==> LZOP" + return +fi +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? IMGFILE=$(ogGetPath "$1" "$2.img") || return $? [ -r "$IMGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGFILE" || return $? ogGetImageInfo $IMGFILE | awk -F: '{print $2}' } + function ogGetImageType () { local IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_repo path_image" \ + "$FUNCNAME REPO prueba ==> NTFS" + return +fi +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? IMGFILE=$(ogGetPath "$1" "$2.img") || return $? [ -r "$IMGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGFILE" || return $? -#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ -# awk '/^Filesystem/ {sub(/\.\.+/," "); sub(/fs$/,""); print toupper($2);}' ogGetImageInfo $IMGFILE | awk -F: '{print $3}' - } + function ogGetImageSize () { # Variables locales @@ -833,8 +1061,8 @@ local IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE /str_image" \ - "$FUNCNAME REPO /aula1/winxp ==> 5642158" + ogHelp "$FUNCNAME" "$FUNCNAME str repo path_image" \ + "$FUNCNAME REPO prueba ==> 5642158" return fi # Error si no se reciben 2 parámetros. @@ -844,8 +1072,6 @@ IMGFILE=$(ogGetPath "$1" "$2.img") || return $? [ -r "$IMGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$IMGFILE" || return $? # Devuelve el tamaño de la imagen en KB. -#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ -# awk '/Partition size/ {sub(/\.\.+/," "); printf "%d\n",$3*1024*1024;}' ogGetImageInfo $IMGFILE | awk -F: '{print $4}' } |