summaryrefslogtreecommitdiffstats
path: root/client/engine/Rsync.lib
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2013-03-27 12:12:11 +0000
committeririna <irinagomez@us.es>2013-03-27 12:12:11 +0000
commitd2b8d242b5d2bac74026f80606e5091afd5f7d39 (patch)
tree048cf4ea7cc531dd4a50f8b31810e51da17619a3 /client/engine/Rsync.lib
parentcad1e1b1a78a535ac1e6973d0b4e746594e6bf08 (diff)
#565 script creacion y restauración de imagenes sincronizadas v2
git-svn-id: https://opengnsys.es/svn/branches/version1.0@3718 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/Rsync.lib')
-rwxr-xr-xclient/engine/Rsync.lib529
1 files changed, 529 insertions, 0 deletions
diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib
new file mode 100755
index 00000000..1a9cb4c4
--- /dev/null
+++ b/client/engine/Rsync.lib
@@ -0,0 +1,529 @@
+#!/bin/bash
+#/**
+# ogCreateFileImage [ REPO | CACHE ] image_name extension size
+#@brief Crear el archivo
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Extensión [ img |diff ]
+#@param 4 Tamaño de la imagen
+#@return instrucción para ser ejecutada.
+#*/
+
+function ogCreateFileImage () {
+local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension size(K)" \
+ "$FUNCNAME REPO Ubuntu12 img 300000" \
+ "$FUNCNAME CACHE Windows7 diff 20000000"
+ return
+fi
+
+
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension size(k)"
+ return $?
+fi
+
+SIZEREQUIRED=$4
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ IMGDIR=$(ogGetParentPath "$1" "/$2")
+ IMGFILE=${IMGDIR}/$(basename "/$2").$3
+ ## Si no existe, crear subdirectorio de la imagen.
+ if [ $? != 0 ]; then
+ echo " $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")." | tee -a $OGLOGSESSION $OGLOGFILE
+ ogMakeDir "$1" $(dirname "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
+ IMGDIR=$(ogGetParentPath "$1" "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
+ fi
+ DIRMOUNT=/tmp/$(ogGetMountDir "$2" "$3")
+ mkdir -p "$DIRMOUNT"
+ LOOPDEVICE=$(losetup -f)
+ # Si existe el fichero de la imagen se hace copia de seguridad, si no existe se crea.
+ if [ -f "$IMGFILE" ]; then
+ if [ "$BACKUP" == "true" ]; then
+ # Copia seguridad
+ echo " $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE
+ cp -f "$IMGFILE" "$IMGFILE.ant" &> $OGLOGCOMMAND
+ mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ rm -f "$IMGFILE.sum"
+ fi
+
+ IMGSIZE=$(ls -lk $IMGFILE | awk '{print $5}')
+ if [ $IMGSIZE -lt $SIZEREQUIRED ];then
+ echo " Redimensionamos la imagen al tamaño necesario" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo " truncate --size=>$SIZEREQUIRED k $IMGFILE" | tee -a $OGLOGSESSION $OGLOGFILE
+ truncate --size=">$SIZEREQUIRED"k $IMGFILE &> $OGLOGCOMMAND
+ echo " mount -o compress=lzo $IMGFILE $DIRMOUNT"
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
+ echo " btrfs filesystem resize max $DIRMOUNT"
+ btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
+ fi
+ else
+ echo " dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED"
+ dd if=/dev/zero of="$IMGFILE" bs=1024 count=$SIZEREQUIRED &> $OGLOGCOMMAND
+ #Formateamos imagen
+ losetup $LOOPDEVICE $IMGFILE
+ echo " mkfs.btrfs -L ${2##*\/} $LOOPDEVICE "
+ mkfs.btrfs -L "${2##*\/}" $LOOPDEVICE &> $OGLOGCOMMAND
+ fi
+ echo " mount -o compress=lzo $IMGFILE $DIRMOUNT"
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
+ # si ya esta montado $? = 32
+ [ $? -eq 0 -o $? -eq 32 ] || ogRaiseError $OG_ERR_IMAGE "$3 $4"
+ touch "$DIRMOUNT/ogimg.info"
+
+ #fi
+ losetup -d $LOOPDEVICE 2>&1 &>/dev/null
+
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \""
+ hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
+fi
+
+}
+
+function ogCreateInfoImage () {
+#/**
+# ogCreateInfoImg
+#@brief Crear listados con la informacion de la imagen, los situa en /tmp.
+#@param 1 num_disk
+#@param 2 num_part
+#@param 3 Repositorio [ REPO | CACHE ] (opcional en las completas)
+#@param 4 Nombre Imagen Basica (opcional en las completas)
+#@param 5 Extensión [ img | diff ]
+#*/
+local IMGEXT IMGDIRAUX DIRMOUNT DESTRSYNC OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" -o $# -lt 5 -a "$3" != "img" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension " \
+ "base image -> $FUNCNAME 1 2 img" \
+ "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
+ return
+fi
+
+if [ $# -lt 3 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name] extension "
+ return $?
+fi
+
+if [ $3 == "img" ]; then
+ IMGEXT="img"
+else
+ ogCheckStringInGroup $5 "img diff" || ogRaiseError $OG_ERR_FORMAT "Las extensiones de la imagenes deben ser img o diff"
+ IMGEXT=$5
+ if [ "$IMGEXT" == "diff" ]; then
+ # Imagen completa con la que comparo la particion.
+ IMGDIRAUX=$(ogGetMountDir "$4" "img")
+ if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ DIRMOUNT="/tmp/$IMGDIRAUX"
+ DESTRSYNC=$DIRMOUNT
+ OPTRSYNC=""
+ else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ DIRMOUNT="$OGIMG/$IMGDIRAUX"
+ USERRSYNC="opengnsys"
+ OPTRSYNC="$OPTRSYNC --password-file=/scripts/passrsync"
+ DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
+ fi
+ fi
+fi
+
+
+ORIG=$(ogMount $1 $2)
+FSTYPE=$(ogGetFsType $1 $2)
+PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
+
+# Creamos la lista del contenido y lo situamos en la particion a copiar.
+DIREMPTY="/tmp/empty$$"
+IMGLIST="/tmp/ogimg.list"
+IMGINFO="/tmp/ogimg.info"
+IMGACL="/tmp/ogimg.acl"
+
+# Borramos archivos antiguos.
+rm /tmp/ogimg.* 2>/dev/null
+rm $ORIG/ogimg.* 2>/dev/null
+
+echo " Creamos la lista del contenido." | tee -a $OGLOGSESSION $OGLOGFILE
+
+echo "#BRTFS:LZO:$FSTYPE:SIZEDATA" > $IMGINFO
+if [ "$IMGEXT" == "img" ]; then
+ # Imagen Basica
+ echo " rsync -aHAXvn --delete $ORIG/ $DIREMPTY >> $IMGINFO" | tee -a $OGLOGSESSION $OGLOGFILE
+ rsync -aHAXvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
+ sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
+ sed -i '/^\.\//d' $IMGINFO
+
+else
+ # Imagen Diferencial
+ # TODO en el echo quitar la $OPTRSYNC para que no se vea el fichero de claves
+ echo " rsync -aHAXvn$OPTRSYNC --delete $ORIG/ $DESTRSYNC a $IMGLIST" | tee -a $OGLOGSESSION $OGLOGFILE
+ rsync -aHAXvn$OPTRSYNC --delete "$ORIG/" "$DESTRSYNC" >> $IMGLIST
+ sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
+ sed -i '/^\.\//d' $IMGLIST
+
+ # Creamos informacion de la imagen
+ grep -e '\->' -e '\=>' $IMGLIST > /tmp/ogimg.ln
+ grep -e ^deleting $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg > /tmp/ogimg.rm
+ #grep -v -e '\->' -e '\=>' -e ^deleting $IMGLIST >> $IMGINFO
+ grep -v -e '\->' -e '\=>' -e ^deleting -e ^created $IMGLIST >> $IMGINFO
+
+ rm $IMGLIST
+
+fi
+
+# Imagenes basicas y diferenciales
+# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
+ogUnmount $1 $2
+[ $FSTYPE == "NTFS" ] && echo " ntfs-3g.secaudit -b $PART /" |tee -a $OGLOGSESSION $OGLOGFILE && ntfs-3g.secaudit -b $PART / > $IMGACL
+
+}
+
+#/**
+# ogRestoreInfoImage
+#@brief Restaurar las ACL y en las diferenciales crear enlaces y borrar ficheros sobrantes.
+#@param 1 num_disk
+#@param 2 num_part
+#*/
+function ogRestoreInfoImage () {
+local
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part" \
+ "base image -> $FUNCNAME 1 2 " \
+ "diff image -> $FUNCNAME 1 1 "
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part "
+ return $?
+fi
+
+
+
+DEST=$(ogMount $1 $2)
+PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
+
+# Informacion del contenido.
+IMGACL="ogimg.acl"
+
+
+#if [ -r $DEST/ogimg.rm ]; then
+# cd $DEST
+# # TODO comprobar que cuando hay archivos para borrar va bien
+# cat $DEST/ogimg.rm 2>/dev/null | xargs rm -rf
+#fi
+
+if [ -r $DEST/ogimg.ln ]; then
+ while read dest enlace orig
+ do
+ if [ "$enlace" == "->" ]
+ then
+ OPTLN='-s'
+ else
+ OPTLN=''
+ fi
+ cd $DEST/$(dirname $dest)
+ ln $OPTLN $orig $(basename $dest) 2>/dev/null
+ echo -n "."
+ done < $DEST/ogimg.ln 2>/dev/null
+ echo ""
+
+fi
+
+# Imagen basica y diferencial.
+ if [ "$(ogGetFsType $1 $2)" == "NTFS" ] ; then
+ cd /
+ cp $DEST/$IMGACL /tmp
+ ogUnmount "$1" "$2"
+ echo " ntfs-3g.secaudit -se $PART" |tee -a $OGLOGSESSION $OGLOGFILE
+ ntfs-3g.secaudit -se $PART /tmp/$IMGACL
+ fi
+
+}
+
+function ogSyncCreate () {
+#/**
+# ogSyncCreate
+#@brief sincroniza los datos de la partición a la imagen para crearla.
+#@param 1 num_disk
+#@param 2 num_part
+#@param 3 Repositorio [ REPO | CACHE ]
+#@param 4 Nombre Imagen
+#@param 5 Extensión [ img | diff ]
+#*/
+local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC OPTRSYNC
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension " \
+ "$FUNCNAME 1 2 REPO Ubuntu12 img" \
+ "$FUNCNAME 1 1 CACHE Windows7 diff "
+ return
+fi
+
+
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension "
+ return $?
+fi
+
+ORIG=$(ogMount $1 $2)
+DIRMOUNT=$(ogGetMountDir "$4" $5)
+[ "$5" == "diff" ] && FILESFROM=" --files-from=/tmp/ogimg.info" || FILESFROM=""
+
+if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ DESTRSYNC="/tmp/$DIRMOUNT"
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ OPTRSYNC=" --password-file=/scripts/passrsync"
+ [ "$ogcompress" == "true" ] && OPTRSYNC="z $OPTRSYNC"
+ USERRSYNC="opengnsys"
+ DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
+fi
+echo " Sincronizamos los datos de la partición a la imagen" | tee -a $OGLOGSESSION $OGLOGFILE
+echo " rsync -aHAX$OPTRSYNC --inplace --delete $FILESFROM $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
+rsync -aHAXq$OPTRSYNC --inplace --delete $FILESFROM "$ORIG/" "$DESTRSYNC"
+echo " rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
+rsync -aHAXq$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC
+
+}
+
+
+#/**
+# ogSyncRestore
+#@brief sincroniza los datos de la imagen a la partición para restaurarla.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Extensión [ img | diff ]
+#@param 4 num_disk
+#@param 5 num_part
+#*/
+function ogSyncRestore () {
+local DIRMOUNT ORIG DESTRSYNC OPTRSYNC USERRSYNC IMGINFO FILESFROM
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part " \
+ "$FUNCNAME REPO Ubuntu12 img 1 2" \
+ "$FUNCNAME CACHE Windows7 diff 1 1"
+ return
+fi
+
+
+if [ $# -lt 5 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part "
+ return $?
+fi
+
+
+DIRMOUNT=$(ogGetMountDir "$2" "$3")
+#DESTRSYNC=$(ogMount $4 $5)
+DESTRSYNC=$(ogGetMountPoint $4 $5)
+
+# Borramos ficheros de informacion de restauraciones antiguas
+rm -rf $DESTRSYNC/ogimg.*
+
+# Origen y destino de la sincronizacion y en REPO opciones rsync
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ ORIG="/tmp/$DIRMOUNT"
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ OPTRSYNC=" --password-file=/scripts/passrsync"
+ [ "$ogcompress" == "true" ] && OPTRSYNC="z $OPTRSYNC"
+ USERRSYNC="opengnsys"
+ ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
+fi
+
+# Opciones rsync en cache y repo
+[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
+
+echo " Nos traemos listado ficheros y bajamos la imagen." |tee -a $OGLOGFILE
+
+# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
+if [ "$3" == "diff" ]; then
+ # Lista de archivos a copiar:
+ IMGINFO="ogimg.info"
+ FILESFROM=" --files-from=$DESTRSYNC/$IMGINFO"
+
+ echo " rsync -aHAXq$OPTRSYNC $ORIG/ogimg* $DESTRSYNC" |tee -a $OGLOGFILE
+ rsync -aHAXq$OPTRSYNC $ORIG/ogimg* $DESTRSYNC
+ # Borramos linea de información de la imagen, sino busca un fichero con ese nombre
+ sed -i '/^\#/d' $DESTRSYNC/$IMGINFO
+
+ cd $DESTRSYNC
+ # TODO comprobar que cuando hay archivos para borrar va bien
+ echo " Borramos archivos sobrantes" |tee -a $OGLOGFILE
+ cat $DESTRSYNC/ogimg.rm 2>/dev/null | xargs rm -rf
+
+fi
+
+echo " Sincronizamos los datos de la partición a la imagen" | tee -a $OGLOGSESSION $OGLOGFILE
+echo " rsync -aHAX$OPTRSYNC $FILESFROM $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
+rsync -aHAXq$OPTRSYNC $FILESFROM "$ORIG/" "$DESTRSYNC"
+
+
+}
+
+function ogMountImage () {
+#/**
+# ogMountImage
+#@brief Monta la imagen para sincronizar.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Extensión [ img |diff ]
+#*/
+local IMGEXT IMGFILE DIRMOUNT
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3"
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ IMGFILE=$(ogGetPath "$1" /"$2.$IMGEXT")
+ DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT)
+ mkdir -p "$DIRMOUNT"
+ echo " mount -o compress=lzo \"$IMGFILE\" \"$DIRMOUNT\"" | tee -a $OGLOGFILE
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" 1>/dev/null
+
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c echo -ne MOUNT_IMAGE $2 $IMGEXT" |tee -a $OGLOGFILE
+ hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" $IMGEXT"
+
+fi
+
+}
+
+
+function ogUnmountImage () {
+#/**
+# ogUnmountImage [ REPO | CACHE ] Image_name [ extension ]
+#@brief Desmonta la imagen para sincronizar.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Extensión [ img |diff ]
+#*/
+local IMGEXT DIRMOUNT
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3"
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT)
+ umount "$DIRMOUNT"
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT" |tee -a $OGLOGFILE
+ hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT"
+fi
+
+}
+
+function ogGetMountDir () {
+#/**
+# ogGetMountDir
+#@brief Devuelve el directorio de montaje de la imagen.
+#@param 1 Nombre Imagen
+#@param 2 Extensión [ img |diff ]
+#*/
+local DIRMOUNT
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME image_name [ extension ]" \
+ "$FUNCNAME Ubuntu12" \
+ "$FUNCNAME Windows7 diff"
+ return
+fi
+
+
+if [ $# -lt 1 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
+ return $?
+fi
+
+
+DIRMOUNT="mount/$1"
+[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
+echo $DIRMOUNT
+
+
+}
+
+
+#/**
+# ogWaitMountImage image_name extension imagen_size
+#@brief Se espera un tiempo a que se monte la imagen en el servidor.
+#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación.
+#@param 1 Respositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Extensión [ img | diff ]
+#@param 4 Tamaño imagen (opcional)
+#*/
+function ogWaitMountImage () {
+local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX
+
+TIME=$SECONDS
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] " \
+ "$FUNCNAME REPO Ubuntu12 img 30000000" \
+ "$FUNCNAME CACHE Windows7 diff "
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] "
+ return $?
+fi
+
+
+SIZE=${4:-"300000"}
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ DIRMOUNT="/tmp/$(ogGetMountDir "$2" $3)"
+else
+ DIRMOUNT="$OGIMG/$(ogGetMountDir "$2" $3)"
+fi
+
+echo -n -e " Esperamos que se monte la imagen en $DIRMOUNT\n #"
+
+# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
+let TIMEOUT=$SIZE/$CREATESPEED
+[ $TIMEOUT -lt 60 ] && TIMEOUT=60
+until [ -f "$DIRMOUNT/ogimg.info" ] ; do
+ TIMEAUX=$[SECONDS-TIME]
+ #[ "$TIMEAUX" -gt "$TIMEOUT" ] && return $(ogRaiseError "Error al montar la imagen $1 $2 $3: time_out $TIMEAUX seg."; echo $?)
+ # TODO definir el error
+ [ "$TIMEAUX" -gt "$TIMEOUT" ] && return 2
+ echo -n "#"
+ sleep 5
+done
+echo -e "\n"
+
+}