13 [
"$(arch)" ==
"i686" -a -x $OPENGNSYS/bin/
rsync ] && RSYNC=$OPENGNSYS/bin/
rsync 14 RSYNC=${RSYNC:-$(which
rsync)}
31 local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE IMGEXT KERNELVERSION
33 if [
"$*" ==
"help" ]; then
35 "$FUNCNAME [ REPO|CACHE ] image_name extension size(K)" \
36 "$FUNCNAME REPO Ubuntu12 img 300000" \
37 "$FUNCNAME CACHE Windows7 diff 20000000" 43 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension size(k)" 48 [ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
49 KERNELVERSION=$(uname -r|
awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
51 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
52 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" 53 [
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 54 IMGFILE=
"${IMGDIR}/$(basename "/$2
").$IMGEXT" 55 ## Si no existe, crear subdirectorio de la imagen. 57 ogEcho log session
" $MSG_HELP_ogMakeDir \"$1 $(dirname "$2
")." 58 ogMakeDir
"$1" "$(dirname "/$2
")" ||
return $(
ogRaiseError $OG_ERR_NOTWRITE
"$3 /$4"; echo $?)
59 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" ||
return $(
ogRaiseError $OG_ERR_NOTWRITE
"$3 /$4"; echo $?)
61 DIRMOUNT=
"/tmp/$(ogGetMountImageDir "$2
" "$3
")" 63 LOOPDEVICE=$(losetup -f)
64 # Si existe el fichero de la imagen se hace copia de seguridad, si no existe se crea. 65 if [ -f
"$IMGFILE" ]; then
66 # Si la imagen esta montada la desmonto 67 if [ -r
"$DIRMOUNT/ogimg.info" ]; then
69 [ $? -ne 0 ] &&
return $(
ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE
"$1 $2.$IMGEXT"; echo $?)
72 if [
"$BACKUP" ==
"true" -o
"$BACKUP" ==
"TRUE" ]; then
74 ogEcho log session
" $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." 75 cp -f
"$IMGFILE" "$IMGFILE.ant" 76 mv -f
"$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
80 IMGSIZE=$(ls -l --block-size=1024
"$IMGFILE" |
awk '{print $5}')
81 if [ $IMGSIZE -lt $SIZEREQUIRED ];then
82 ogEcho log session
" $MSG_SYNC_RESIZE" 83 echo
" truncate --size=>$SIZEREQUIRED k $IMGFILE" 84 truncate --size=
">$SIZEREQUIRED"k
"$IMGFILE" &> $OGLOGCOMMAND
85 # FS de la imagen segun el contenido del archivo .img 86 if file
"$IMGFILE" |grep -i -e
" ext4 filesystem " 2>&1 > /dev/null ; then
87 losetup $LOOPDEVICE
"$IMGFILE" 88 echo
" resize2fs -f $LOOPDEVICE" 89 resize2fs -f $LOOPDEVICE &> $OGLOGCOMMAND
92 echo
" ogMountImage $1 "$2
" $3" 94 echo
" btrfs filesystem resize max $DIRMOUNT" 95 btrfs filesystem resize max
"$DIRMOUNT" &> $OGLOGCOMMAND
100 echo
" truncate --size=>$SIZEREQUIRED k $IMGFILE" 101 truncate --size=
">$SIZEREQUIRED"k
"$IMGFILE" &> $OGLOGCOMMAND
103 losetup $LOOPDEVICE $IMGFILE
104 # FS de la imagen segun la configuracion y la version del kernel: < 3.7 ext4, si >= btrfs 105 [ $KERNELVERSION \< 3.07 ] && IMGFS=
"EXT4" || IMGFS=${IMGFS:-
"BTRFS"}
107 if [
"$IMGFS" ==
"EXT4" ]; then
108 echo
" mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}
" $LOOPDEVICE" 109 mkfs.ext4 -i 4096 -b 4096 -L
"${2##*\/}" $LOOPDEVICE 2>&1 |tee -a $OGLOGCOMMAND
111 echo
" mkfs.btrfs -L ${2##*\/} $LOOPDEVICE " 112 mkfs.btrfs -L
"${2##*\/}" $LOOPDEVICE 2>&1 | tee -a $OGLOGCOMMAND
117 [ $? -eq 0 ] ||
return $(
ogRaiseError $OG_ERR_IMAGE
"$3 $4"; echo $?)
118 echo
"mounted"> $IMGFILE.lock
120 # Si existe dispositivo de loop lo borro.
121 [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
125 echo
" hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \"" 126 hose $REPOIP 2009 --out sh -c
"echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED" 142 function ogCreateInfoImage () { 143 local IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL KERNELVERSION
144 # Ayuda o menos de 5 parametros y la imagen no es basica 145 if [
"$*" ==
"help" -o $# -lt 5 -a
"$3" !=
"img" ]; then
147 "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension " \
148 "base image -> $FUNCNAME 1 2 img" \
149 "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff " 153 if [ $# -lt 3 ]; then
154 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name] extension " 160 ORIG=$(
ogMount $1 $2) ||
return $?
162 if [ $3 ==
"img" ]; then
165 # Comprobamos que las extension sea valida 168 if [
"$IMGTYPE" ==
"diff" ]; then
169 # Imagen completa con la que comparo la particion. 170 IMGDIRAUX=
"$(ogGetMountImageDir "$4
" "img
")" 171 if [
"$3" ==
"CACHE" -o
"$3" ==
"cache" ]; then
172 DIRMOUNT=
"/tmp/$IMGDIRAUX" 173 DESTRSYNC=
"$DIRMOUNT" 176 DIRMOUNT=
"$OGIMG/$IMGDIRAUX" 177 USERRSYNC=
"opengnsys" 178 PASSWORD=
"--password-file=/scripts/passrsync" 179 DESTRSYNC=
"$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX" 187 # Creamos la lista del contenido y lo situamos en la particion a copiar. 188 DIREMPTY=
"/tmp/empty$$" 189 IMGLIST=
"/tmp/ogimg.list" 190 IMGINFO=
"/tmp/ogimg.info" 191 IMGACL=
"/tmp/ogimg.acl" 193 # Borramos archivos antiguos. 194 rm -f /tmp/ogimg.* 2>/dev/null
195 rm -f $ORIG/ogimg.* 2>/dev/null
197 # En las diferenciales no sabemos el tamaño -> ponemos una constante. 198 SIZEDATA=${SIZEDATA:-
"SIZEDATA"}
200 # Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs. 201 KERNELVERSION=$(uname -r|
awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
202 [ $KERNELVERSION \< 3.07 ] && IMGFS=
"EXT4" || IMGFS=${IMGFS:-
"BTRFS"}
203 echo
"#$IMGFS:NO:$FSTYPE:$SIZEDATA" > $IMGINFO
205 if [
"$IMGTYPE" ==
"img" ]; then
207 echo
" rsync -aHAXWvn --delete $ORIG/ $DIREMPTY >> $IMGINFO" 208 rsync -aHAXWvn --
delete $ORIG/ $DIREMPTY>> $IMGINFO
209 sed -i -e s/
"^sent.*.bytes\/sec" 210 sed -i
'/^\.\//d' $IMGINFO
214 echo
" rsync -aHAXWvn --delete $ORIG/ $DESTRSYNC a $IMGLIST" 215 rsync -aHAXWvn $PASSWORD --
delete "$ORIG/" "$DESTRSYNC" >> $IMGLIST
216 sed -i -e s/
"^sent.*.bytes\/sec" 217 sed -i
'/^\.\//d' $IMGLIST
219 # Creamos informacion de la imagen 220 grep -e
'\->' -e
'\=>' $IMGLIST > /tmp/ogimg.ln
221 grep -e ^deleting $IMGLIST | sed s/^deleting\
222 #grep -v -e '\->' -e '\=>' -e ^deleting $IMGLIST >> $IMGINFO 223 grep -v -e
'\->' -e
'\=>' -e ^deleting -e ^created $IMGLIST >> $IMGINFO
227 # Comprobamos que los ficheros de diferencias no esten vacios o salimos con error. 228 if [ $(grep -v -e
"^$" -e
"^#" $IMGINFO /tmp/ogimg.ln /tmp/ogimg.rm |wc -l) -eq 0 ]; then
235 # Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi) 237 if [ $FSTYPE ==
"NTFS" ]; then
238 echo
" ntfs-3g.secaudit -b $PART /" 239 ntfs-3g.secaudit -b $PART / > $IMGACL
251 function ogAclFilter () { 252 local IMGACL IMGINFO FILES ACLTMP
255 if [
"$*" ==
"help" ]; then
256 ogHelp "$FUNCNAME" "$FUNCNAME" 260 IMGACL=
"/tmp/ogimg.acl" 261 IMGINFO=
"/tmp/ogimg.info" 263 ACLTMP=
"/tmp/acl$$.tmp" 264 ACLFILES=
"/tmp/aclfiles$$" 266 # comprobamos que existan los archivos de origen. Si no salimos sin error. 267 [ -f $IMGACL -a -f $IMGINFO ] ||
return 0
270 grep -n -e
"File" -e
"Directory" $IMGACL > $ACLFILES
272 # Al listado de ficheros le quitamos las líneas sobrantes: comentarios y lineas vacias. 276 # Recorremos el listado y extraemos la acl correspondiente al fichero o directorio. 278 read END INI <<<
"$(grep -A 1 "$LINE
" $ACLFILES | awk -F : '!(NR%2){print $1" "p}{p=$1}' )" 280 # Si algún archivo no se encuentra, el error lo mandamos a /dev/null 281 sed -n -e $INI,+
"$NUM"p $IMGACL 2>/dev/null >> $ACLTMP
282 echo
"aclfilter: $LINE" >> $OGLOGCOMMAND
286 rm -f $FILES $ACLTMP $ACLFILES
296 function ogRestoreInfoImage () { 297 local DEST PART IMGACL IMGLN OPTLN LINEA DESTLN ORIGLN TYPELN
299 # Ayuda o menos de 5 parametros y la imagen no es basica 300 if [
"$*" ==
"help" ]; then
302 "$FUNCNAME num_disk num_part" \
303 "base image -> $FUNCNAME 1 2 " \
304 "diff image -> $FUNCNAME 1 1 " 308 if [ $# -lt 2 ]; then
309 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME num_disk num_part " 313 # Control de errores. 315 DEST=$(
ogMount $1 $2) ||
return $?
321 # Copiamos informacion de la imagen a /tmp (para basicas) 322 [ -r $DEST/$IMGINFO ] && cp $DEST/ogimg.* /tmp
324 #Creamos o modificamos los enlaces. 325 # La imagen diferencial tiene ogimg.ln 326 # para la completa lo generamos con los enlaces que contengan /mnt/ 327 [ -r
"/tmp/$IMGLN" ] || grep -e
"->" -e
"=>" "/tmp/$IMGINFO"|grep
"/mnt/" >
"/tmp/$IMGLN" 328 if [ $(wc -l
"/tmp/$IMGLN"|cut -f1 -d
" ") -ne 0 ]; then
331 ORIGLN=
"${LINEA#*> }" 332 # Si origen hace referencia a la particion lo modificamos 333 echo $ORIGLN|grep
"/mnt/"> /dev/null && ORIGLN=
"$DEST/${ORIGLN#/mnt/*/}" 334 # rsync marca - los enlaces simbolicos y = enlaces "duros" 336 TYPELN=
"${LINEA##* }" 339 if [
"$TYPELN" ==
"-" ]
345 cd
"$DEST/$(dirname "$DESTLN
")" 346 rm -f
"$(basename "$DESTLN
")" 347 ln $OPTLN
"$ORIGLN" "$(basename "$DESTLN
")" 349 done <
"/tmp/$IMGLN" 2>/dev/null
363 function ogRestoreAclImage () { 366 if [
"$*" ==
"help" ]; then
368 "$FUNCNAME num_disk num_part" \
377 if [
"$(ogGetFsType $1 $2)" ==
"NTFS" -a -f
"/tmp/$IMGACL" ] ; then
380 echo
"ntfs-3g.secaudit -se $PART /tmp/$IMGACL" 381 ntfs-3g.secaudit -se $PART /tmp/$IMGACL
382 # Para evitar que de falso error 397 function ogSyncCreate () { 398 local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC RETVAL
400 # Limpiamos los archivo de log 401 echo
"" >$OGLOGCOMMAND;
403 if [
"$*" ==
"help" ]; then
405 "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension " \
406 "$FUNCNAME 1 2 REPO Ubuntu12 img" \
407 "$FUNCNAME 1 1 CACHE Windows7 diff " 412 if [ $# -lt 4 ]; then
413 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension " 417 ORIG=$(
ogMount $1 $2) ||
return $?
419 DIRMOUNT=
"$(ogGetMountImageDir "$4
" $5)" 420 # Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen.
421 if [
"$5" ==
"diff" ]; then
422 FILESFROM=
" --files-from=/tmp/ogimg.info" 423 # Borramos los directorios
424 sed -i
'/\/$/d' /tmp/ogimg.info
429 if [
"$3" ==
"CACHE" -o
"$3" ==
"cache" ]; then
430 DESTRSYNC=
"/tmp/$DIRMOUNT" 433 PASSWORD=
"--password-file=/scripts/passrsync" 434 [
"$ogrsyncz" ==
"true" ] && OPTRSYNC=
"z " 435 [
"$ogrsyncw" ==
"true" ] && OPTRSYNC=
"W$OPTRSYNC" 436 USERRSYNC=
"opengnsys" 437 DESTRSYNC=
"$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT" 439 # Sincronizamos los datos de la partición a la imagen 440 echo
" rsync -aHAX$OPTRSYNC --progress --inplace --delete $FILESFROM $ORIG/ $DESTRSYNC" 441 rsync -aHAX$OPTRSYNC $PASSWORD --progress --inplace --
delete $FILESFROM
"$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep
"^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
442 RETVAL=${PIPESTATUS[0]}
443 echo
" rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC" 444 rsync -aHAX$OPTRSYNC $PASSWORD --inplace /tmp/ogimg*
"$DESTRSYNC" 459 function ogSyncRestore () { 460 local DIRMOUNT ORIG DESTRSYNC PASSWORD OPTRSYNC USERRSYNC IMGINFO FILESFROM
462 # Limpiamos los archivo de log 463 echo
"" >$OGLOGCOMMAND;
465 if [
"$*" ==
"help" ]; then
467 "$FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part " \
468 "$FUNCNAME REPO Ubuntu12 img 1 2" \
469 "$FUNCNAME CACHE Windows7 diff 1 1" 474 if [ $# -lt 5 ]; then
475 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part " 480 DIRMOUNT=
"$(ogGetMountImageDir "$2
" "$3
")" 483 # Borramos ficheros de informacion de restauraciones antiguas
484 rm -rf $DESTRSYNC/ogimg.*
487 # Origen y destino de la sincronizacion y en REPO opciones
rsync 488 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
489 ORIG=
"/tmp/$DIRMOUNT" 492 PASSWORD=
"--password-file=/scripts/passrsync" 493 [
"$ogrsyncz" ==
"true" ] && OPTRSYNC=
"z " 494 [
"$ogrsyncw" ==
"true" ] && OPTRSYNC=
"W$OPTRSYNC" 495 USERRSYNC=
"opengnsys" 496 ORIG=
"$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT" 499 # Opciones rsync en cache y repo 500 # Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen 501 [
"$3" ==
"img" ] && [
"$ogrsyncdel" !=
"false" ] && OPTRSYNC=
"$OPTRSYNC --delete" 503 # Nos traemos listado ficheros y bajamos la imagen 505 ogEcho log session
" $MSG_SYNC_RESTORE" 507 # Si la imagen es diferencial nos traemos los archivos de informacion de la imagen. 508 if [
"$3" ==
"diff" ]; then
509 # Lista de archivos a copiar: 511 FILESFROM=
" --files-from=/tmp/$IMGINFO" 513 echo
" rsync -aHAX$OPTRSYNC --progress $ORIG/ogimg* /tmp" 514 rsync -aHAX$OPTRSYNC $PASSWORD --progress
"$ORIG"/ogimg* /tmp
515 # Borramos linea de información de la imagen, sino busca un fichero con ese nombre 516 sed -i
'/^\#/d' /tmp/$IMGINFO
519 # Diferencial: Borramos archivos sobrantes. 520 ogEcho log session
" $MSG_SYNC_DELETE" 521 sed -e s/^/\
"/g -e s/$/\"/g "/tmp/ogimg.rm
" 2>/dev/null | xargs rm -rf 525 echo " rsync -aHAX$OPTRSYNC --progress $FILESFROM $ORIG/ $DESTRSYNC
" 526 rsync -aHAX$OPTRSYNC $PASSWORD --progress $FILESFROM "$ORIG/
" "$DESTRSYNC
" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%
" |tee -a $OGLOGCOMMAND 527 RETVAL=${PIPESTATUS[0]} 529 #*/ " Comentario Doxygen
541 function ogMountImage () { 542 local IMGEXT IMGFILE DIRMOUNT KERNELVERSION
544 if [
"$*" ==
"help" ]; then
546 "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
547 "$FUNCNAME REPO Ubuntu12" \
548 "$FUNCNAME CACHE Windows7 diff" 553 if [ $# -lt 2 ]; then
554 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" 558 [
"$3" ==
"" -o
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 560 DIRMOUNT=
"$(ogGetMountImageDir "$2
" ${IMGEXT#*\.})" 562 if [
"$1" ==
"REPO" -o
"$1" ==
"repo" ]; then
564 hose $REPOIP 2009 --out sh -c
"echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}" 565 echo
"$OGIMG/$DIRMOUNT" 567 # Si está montado nada que hacer.
568 df | grep
"$DIRMOUNT$" 2>&1 >/dev/null && echo
"/tmp/$DIRMOUNT" &&
return 0
570 IMGFILE=
"$(ogGetPath "$1
" /"$2.$IMGEXT
")" \
571 ||
return $(
ogRaiseError $OG_ERR_NOTFOUND
"$1 $2.$IMGEXT"; echo $?)
572 mkdir -p
"/tmp/$DIRMOUNT" 575 # FS de la imagen segun el contenido del archivo .img 576 if file
"$IMGFILE" |grep -i -e
" ext4 filesystem " 2>&1 > /dev/null ; then
577 mount -t ext4 -o loop
"$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
579 mount -o compress=lzo
"$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
582 # Comprobamos que se ha montado bien 583 [ $? -eq 0 ] ||
return $(
ogRaiseError $OG_ERR_DONTMOUNT_IMAGE
"$1 $2 $3"; echo $?)
584 echo
"/tmp/$DIRMOUNT" 598 local IMGTYPE DIRMOUNT
600 if [
"$*" ==
"help" ]; then
602 "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
603 "$FUNCNAME REPO Ubuntu12" \
604 "$FUNCNAME CACHE Windows7 diff" 608 if [ $# -lt 2 ]; then
609 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" 613 [
"$3" ==
"" ] && IMGTYPE=
"img" || IMGTYPE=
"$3" 615 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
616 DIRMOUNT=
"/tmp/$(ogGetMountImageDir "$2
" $IMGTYPE)" 619 [ -f $IMGFILE.lock ] && sed -i s/
"mounted" 622 echo
" hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE" 623 hose $REPOIP 2009 --out sh -c
"echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE" 636 if [
"$*" ==
"help" ]; then
638 "$FUNCNAME image_name [ extension ]" \
639 "$FUNCNAME Ubuntu12" \
640 "$FUNCNAME Windows7 diff" 645 if [ $# -lt 1 ]; then
646 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME image_name [ extension ]" 652 [
"$2" ==
"diff" ] && DIRMOUNT=
"$DIRMOUNT.diff" 668 function ogWaitSyncImage () { 669 local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX LOCKFILE IMGDIR IMGEXT STATE
673 # Ayuda o menos de 5 parametros y la imagen no es basica 674 if [
"$*" ==
"help" ]; then
676 "$FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " \
677 "$FUNCNAME REPO Ubuntu12 img 30000000" \
678 "$FUNCNAME CACHE Windows7 diff " 682 if [ $# -lt 4 ]; then
683 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " 690 return $(
ogRaiseError command $OG_ERR_FORMAT
"STATE = [ mounted | reduced ]" )
692 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" 693 [
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 694 LOCKFILE=
"${IMGDIR}/$(basename "/$2
").$IMGEXT.lock" 696 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
697 DIRMOUNT=
"/tmp/$(ogGetMountImageDir "$2
" $3)" 699 DIRMOUNT=
"$OGIMG/$(ogGetMountImageDir "$2
" $3)" 702 echo -n -e
" $MSG_SYNC_SLEEP: $DIRMOUNT\n #" | tee -a $OGLOGSESSION $OGLOGFILE
704 # Comprobamos: mounted -> que exista $DIRMOUNT/ogimg.info o que el fichero de lock contenga mounted 705 # reduced -> que el fichero de lock contenga reduced. 707 # time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s 708 let TIMEOUT=$SIZE/$CREATESPEED
709 [ $TIMEOUT -lt 60 ] && TIMEOUT=60
710 until $(grep -i $STATE $LOCKFILE &>/dev/null) ;
do 711 [ $STATE =
"mounted" -a -f
"$DIRMOUNT/ogimg.info" ] &&
ogEcho log session
"" &&
return 0
712 TIMEAUX=$[SECONDS-TIME]
713 [
"$TIMEAUX" -lt
"$TIMEOUT" ] ||
return $(
ogRaiseError $OG_ERR_DONTMOUNT_IMAGE
"$3 $4 $IMGEXT: time_out."; echo $?)
714 echo -n
"#" | tee -a $OGLOGSESSION $OGLOGFILE
717 echo
"" | tee -a $OGLOGSESSION $OGLOGFILE
733 local IMGEXT DIRMOUNT AVAILABLE USED IMGDIR IMGFILE ENDSIZE LOOPDEVICE
734 if [
"$*" ==
"help" ]; then
736 "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
737 "$FUNCNAME REPO Ubuntu12" \
738 "$FUNCNAME CACHE Windows7 diff" 742 if [ $# -lt 2 ]; then
743 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" 748 [
"$3" ==
"" -o
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 749 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" 750 IMGFILE=
"${IMGDIR}/$(basename "/$2
").$IMGEXT" 753 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
754 # Para imagenes EXT4 reduzco, para BTRFS solo desmonto. 755 if file
"$IMGFILE" | grep -i
" ext4 filesystem " 2>&1 > /dev/null; then
756 # Al montar se comprueba la existencia de la imagen 757 DIRMOUNT=
"$(ogMountImage $1 "$2
" ${IMGEXT#*\.})" 758 AVAILABLE=$(df -k|grep
"$DIRMOUNT$"|
awk '{print $4}')
759 # Si el espacio libre menor que 500Mb nos salimos
760 if [ $AVAILABLE -lt 200000 ]; then
762 echo
"reduced" >
"$IMGFILE.lock" 766 # Calculamos la diferencia entre el tamaño interno y externo 767 EXTSIZE=$(ls -l --block-size=1024
"$IMGFILE" | cut -f5 -d
" ")
768 INTSIZE=$(df -k|grep
"$DIRMOUNT"|
awk '{print $2}')
769 let EDGESIZE=$EXTSIZE-$INTSIZE
771 LOOPDEVICE=$(losetup -f)
772 losetup $LOOPDEVICE
"$IMGFILE" 774 # Redimensiono sistema de ficheros
775 echo
" resize2fs -fpM $LOOPDEVICE" 776 resize2fs -fpM $LOOPDEVICE |tee -a $OGLOGCOMMAND
779 # Calculamos el tamaño final del archivo 780 INTSIZE=$(df -k|grep
"$DIRMOUNT"|
awk '{print $2}')
781 let EXTSIZE=$INTSIZE+$EDGESIZE
784 # Si existe dispositivo de loop lo borro.
785 [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE
787 # Corto el archivo al tamaño del sistema de ficheros.
788 echo
" truncate --size=\"$EXTSIZE\"k $IMGFILE " 789 truncate --size=
"$EXTSIZE"k
"$IMGFILE" 795 echo
"reduced" >
"$IMGFILE.lock" 800 echo
" hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}" 801 hose $REPOIP 2009 --out sh -c
"echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}" 818 function ogIsSyncImage () { 819 local IMGEXT IMGDIR IMGFILE
821 if [
"$*" ==
"help" ]; then
823 "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
824 "$FUNCNAME REPO Ubuntu12" \
825 "$FUNCNAME CACHE Windows7 diff" 829 if [ $# -lt 2 ]; then
830 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" 834 [
"$3" ==
"" -o
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 835 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" 836 IMGFILE=
"${IMGDIR}"/$(basename
"/$2").$IMGEXT
838 file
"$IMGFILE" | grep -i -e
" BTRFS Filesystem " -e
" ext4 filesystem " >/dev/null
839 [ $? -eq 0 ] &&
return 0 ||
return $OG_ERR_DONTSYNC_IMAGE
855 local IMGEXT IMGDIR IMGFILE DIRMOUNT ISMOUNT RETVAL KERNELVERSION
857 if [
"$*" ==
"help" ]; then
859 "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
860 "$FUNCNAME REPO Ubuntu12" \
861 "$FUNCNAME CACHE Windows7 diff" 865 if [ $# -lt 2 ]; then
866 ogRaiseError $OG_ERR_FORMAT
"$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" 870 [
"$3" ==
"" -o
"$3" ==
"img" ] && IMGEXT=
"img" || IMGEXT=
"img.diff" 871 IMGDIR=
"$(ogGetParentPath "$1
" "/$2
")" 872 IMGFILE=
"${IMGDIR}/$(basename "/$2
").$IMGEXT" 876 # Comprobamos que no esté montada (daria falso error)
877 if [
"$1" ==
"CACHE" -o
"$1" ==
"cache" ]; then
878 $(df | grep
"/tmp/mount/$2${IMGEXT#img}$" &>/dev/null) && ISMOUNT=TRUE
880 [ -f
"$OGIMG/mount/$2${IMGEXT#img}/ogimg.info" ] && ISMOUNT=TRUE
882 [
"$ISMOUNT" == TRUE ] &&
ogEcho log session warning
"$MSG_SYNC_NOCHECK" &&
return 0
884 DIRMOUNT=
"/tmp/ogCheckImage$$" 886 # FS de la imagen segun el contenido del archivo .img
887 if file
"$IMGFILE" |grep -i -e
" ext4 filesystem " 2>&1 > /dev/null ; then
888 mount -t ext4 -o loop
"$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
889 RETVAL=${PIPESTATUS[0]}
891 mount -o compress=lzo
"$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
892 RETVAL=${PIPESTATUS[0]}
894 ls -C
"$DIRMOUNT" | tee -a $OGLOGCOMMAND
function ogDiskToDev()
Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fich...
function ogGetFsType()
Devuelve el mnemonico con el tipo de sistema de archivos. #.
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
function ogUnmountImage()
Desmonta la imagen para sincronizar. #.
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
function ogIsSyncImage()
Comprueba si la imagen es sincronizable #.
function ogReduceImage()
Reduce el archivo de la imagen a tamaño datos + 500M #.
function ogCreateFileImage()
Crear el archivo #.
function ogGetMountImageDir()
Devuelve el directorio de montaje de la imagen. #.
function ogGetMountPoint()
Devuelve el punto de montaje de un sistema de archivos. #.
function ogMountImage()
Monta la imagen para sincronizar. #.
function ogCheckStringInGroup()
Función para determinar si el elemento pertenece a un conjunto #.
function ogGetRepoIp()
Muestra la dirección IP del repositorio de datos. #.
function ogEcho()
Muestra mensajes en consola y lo registra en fichero de incidencias. #.
function ogCheckSyncImage()
Muestra el contenido de la imagen para comprobarla. #.
function rsync()
Función para utilizar la versión de rsync situada en $OPENGNSYS/bin en vez de la del sistema operativ...