diff options
-rwxr-xr-x | client/engine/Image.lib | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib index baeb38dc..a1ab0b44 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -62,7 +62,7 @@ if ogIsImageLocked "$IMGFILE"; then return $? fi # Generar la instruccion a ejecutar antes de aplicar los bloqueos. -PROGRAM="dd if=$DISK conv=sync,noerror bs=1M | pv | gzip -c > \"$IMGFILE\"" +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 @@ -109,7 +109,7 @@ return $ERRCODE #*/ ## 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 @@ -122,10 +122,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" ;; @@ -137,14 +137,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" ;; @@ -161,9 +160,13 @@ case "$TOOL" in 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" ;; -esac # Comprobar que existe mbuffer. + dd) + PARAM1="pv $DEV | dd conv=sync,noerror bs=1M" + ;; +esac +# Comprobar que existe mbuffer. which mbuffer &>/dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " # Nivel de compresion. @@ -267,6 +270,9 @@ if [ "$#" -eq 4 ]; then # -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 $? ;; @@ -630,9 +636,9 @@ IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") if ogIsImageLocked "$IMGFILE"; then ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" return $? - +fi # Solicitamos la generación de la instruccion a ejecutar -PROGRAM="gunzip -c \"$IMGFILE\" | dd of=$DISK conv=sync,noerror bs=64K" +PROGRAM=$(ogRestoreImageSyntax $IMGFILE $DISK) # Bloquear el disco #ogLock $3 || return $? @@ -935,7 +941,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="dd" + FS= + SIZE= + IMGDETECT="TRUE" + fi fi #comprobamos valores #Chequeamos los valores devueltos. if [ -z "$TOOLS" -o -z "$COMPRESSOR" -o "$IMGDETECT" == "FALSE" ] |