source: client/shared/scripts/restoreDiffImage @ cad1e1b

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since cad1e1b was 1a632ba, checked in by ramon <ramongomez@…>, 12 years ago

Versión 1.0.5, #565: Integrar scripts para crear y restaurar imágenes diferenciales.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@3462 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 3.7 KB
Line 
1#!/bin/bash
2#/**
3#         restoreiDiffSquash
4#@brief Script de ejemplo para restaurar una imagen diferencial.
5#@brief (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).
6#@param 1 REPO|CACHE
7#@param 2 imagen
8#@param 3 disco
9#@param 4 particion
10#@param 5 protocolo
11#@param 6 opciones protocolo
12#@return
13#@exception OG_ERR_FORMAT  # 1 formato incorrecto.
14#@exception updateCache    # 15 No hay cache
15#@exception updateCache    # 16 no hay espacio sufiente
16#@exception "Error al montar la imagen" INTERNACIONALIZAR
17#@todo: Se puede dar la opcion de que mantenga los ficheros nuevos.
18#@todo: Se puede dar la opcion que la trasferencia se manden los datos comprimidos.
19#@version 1.0 - restauración de imagen con sincronizacion.
20#@author 
21#@date   2012-12-04
22#*/ ##
23trap "ogUnlockImage $1  /$2.$IMGEXT ; ogUnlock $3 $4; umount $DIRMOUNT; exit 1" 1 2 3 6 9 14 15
24
25TIME1=$SECONDS
26PROG="$(basename $0)"
27if [ $# -lt 4 ]; then
28    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen[.sujijo] ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"
29    exit $?
30fi
31
32echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
33
34# Procesar parámetros de entrada
35DIFFEXT="diff"
36DIFFFILE=$(ogGetPath "$1" "$2.$DIFFEXT") || exit $(ogRaiseError $OG_ERR_NOTFOUND "$2.$DIFFEXT"; echo $?)
37PROTO=${5:-"UNICAST"}
38if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
39   echo "[10] Realizando la actualizacion de la cache." | tee -a $OGLOGSESSION $OGLOGFILE
40   echo "     updateCache REPO" "/$DIFFFILE" "$PROTO" "$6"  | tee -a $OGLOGSESSION $OGLOGFILE   
41# COMENTADO PROVISIONAL para las pruebas
42#   updateCache REPO "/$DIFFFILE" "$PROTO" "$6"     &>> $OGLOGCOMMAND
43   RETVAL=$?
44   if [ "$RETVAL" != "0" ]
45        then
46        echo "[49] Fin del updateCache REPO $2.$DIFFEXT $5 $6 con error $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
47        # RC=15 No hay cache
48        # RC=16 no hay espacio sufiente
49        exit $RETVAL
50   fi
51fi
52
53TIME2=$SECONDS
54
55PART=$(ogDiskToDev "$3" "$4" 2>/dev/null )  || exit $(ogRaiseError $OG_ERR_PARTITION "$1 $2"; echo $?)
56
57
58# Restaurar la imagen.
59echo "[40] Restaurar imagen en $PART"
60DEST=$(ogMount "$3" "$4")
61DIRMOUNT="/tmp/mount$$"
62IMGINFO="$DIRMOUNT/ogimg.info"
63IMGACL="$DIRMOUNT/ogimg.acl"
64
65mkdir $DIRMOUNT
66echo "     mount -t squashfs -o loop  $DIFFFILE $DIRMOUNT" | tee -a $OGLOGSESSION $OGLOGFILE
67mount -t squashfs -o loop  $DIFFFILE $DIRMOUNT 1>/dev/null
68# Comprobamos que la imagen se ha montado -> si no se borra la particion
69[ -r "$IMGINFO" ] || echo "Error al montar la imagen"|tee -a $OGLOGSESSION $OGLOGFILE || exit 2
70
71# Restauramos la imagen
72echo "     Diferencial: copiando los datos: rsync -aHAXq --files-from=$IMGINFO $DIRMOUNT/ $DEST" | tee -a $OGLOGSESSION $OGLOGFILE
73rsync -aHAXq --files-from=$IMGINFO $DIRMOUNT/ $DEST |tee -a $OGLOGSESSION $OGLOGFILE
74
75echo "     Diferencial: creando enlaces y borrando"  | tee -a $OGLOGSESSION $OGLOGFILE
76cd $DEST
77rm -rf $(cat $DIRMOUNT/ogimg.rm)
78
79while read dest enlace orig
80do
81   if [ "$enlace" == "->" ]
82   then
83        OPTLN='-s'
84   else
85        OPTLN=''
86   fi
87   cd $DEST/$(dirname $dest)
88   ln $OPTLN $orig $(basename $dest) 2>/dev/null
89done < $DIRMOUNT/ogimg.ln
90TIMEAUX2=$[SECONDS-TIME2]
91echo "     Fin Restauracion $1 $2 $3 $4 tiempo parcial : $[TIMEAUX2/60]m $[TIMEAUX2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
92# Restableciendo acl
93# Me salgo de la particion para poder desmontarla
94cd
95ogUnmount "$3" "$4"
96if [ "$(ogGetFsType "$3" "$4")" == "NTFS" ] ; then
97    ntfs-3g.secaudit -se $DEST $IMGACL
98    TIMEAUX3=$[SECONDS-TIMEAUX2]
99    echo "   Fin acl tiempo parcial  : $[TIMEAUX3/60]m $[TIMEAUX3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
100fi
101umount $DIRMOUNT
102
103TIME=$[SECONDS-TIME1]
104echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
105
Note: See TracBrowser for help on using the repository browser.