wiki:ticket565_ImagenesSincronizadas

Version 5 (modified by trac, 7 years ago) (diff)

--

Scripts de restauración de imágenes sincronizadas (versión 2)

Existen dos versiones de la sincronización de imágenes.

El uso de la consola para ambas versiones está explicada en http://opengnsys.es/wiki/SyncronizeDoc.

La consola llama a scripts línea de comandos, en esta página se documentan los de la versión 2.

Imágenes sincronizadas e imágenes diferenciales.

Las imágenes sincronizadas son imágenes completas de una partición que al restaurarlas se va a realizar una comparación del contenido de la imagen con el de la partición y sólo se va a copiar lo que difiere.

De igual modo si la imagen ya existe pero queremos crear de nuevo la imagen completa, se comparará la partición del equipo modelo con la imagen existente y sólo se copiarán los archivos que cambien.

Las imágenes diferenciales -> FALTA

Descripción

Los script de crear y restaurar imágenes sincronizadas o diferenciales siguen la lógica de los script de crear y restaurar imágenes normales, soportando los mismos protocolos.

La imagen se crea generando un fichero que contiene un sistema de ficheros btrfs vacío, del tamaño de los datos de la imagen. Luego se monta el sistema de ficheros y se sincroniza con los datos que contiene la partición.

La imagen permite escribir sobre ella, de forma que la segunda vez que se haga se puede sincronizar la ya existente. Podemos configurar si antes de modificar la imagen queremos hacer una copia de seguridad.

La transferencia con rsync se hace con el servicio rsync iniciado en el servidor.

La imagen está comprimida con lzop. Comprime sólo el 20%, hay que seguir probando.

Opciones de rsync: variables de entorno

Se incluyen variables de entorno con opciones de rsync:

  • al restaurar: si se quiere o no borrar archivos actualizados y nuevos el partición de destino: ogrsyncdel por defecto true.
  • al restaurar o crear imagen: si se quiere o no que en la transferencia por los datos vayan comprimidos.

Variable de time-out

En el proceso de creación de la imagen en el repositorio, el cliente manda la orden pero no obtiene respuesta de cuando acaba. Para evitar que en caso de error el cliente quede esperando indefinidamente se establece un tiempo time-out que se calcula según el tamaño de la imagen.

El factor por el multiplicamos dependerá de la capacidad del servidor, por defecto es 100000k -> 4s, se puede modificar en /opt/opengnsys/client/etc/engine.cfg

CREATESPEED=100000*4

Protocolos de transferecia, updateCache y md5sum

Se ha modificado el script updateCache para que pueda bajarse las imágenes sincronizadas.

Para trasferir la imagen desde el repositorio a la cache, la primera vez se pueden usar UNICAST, MULTICAST o TORRENT. Cuando detecta que existe la imagen en cache, la sincroniza con la del repositorio con RSYNC.

Cada vez que se monta la imagen, aunque sea en modo lectura se modifica su md5sum. Por lo que no podemos comparar la imagen de cache y la del repositorio.

Backup

Se puede configurar si al crear la imagen queremos hacer backup de la anterior. Se configura en /etc/opengnsys/cliente/etc/engine.cfg en la variable BACKUP, para las pruebas está a false.

Tamaño mínimo de la imagen.

El tamaño mínimo de la imagen es 300M debido a que el sistema de ficheros btrfs necesita como mínimo 250M para que se pueda crear.

Sintaxis de los script

Se han definido los siguientes script y funciones:

Del lado del cliente.

Se utilizan para crear o restaurar las imágenes:

  • createBaseImage num_disk num_part [REPO|CACHE] nombre_imagen
  • restoreBaseImage [CACHE|REPO] nombre_imagen num_disk num_part [PROTOCOLO] [opciones_protocolo]
  • createDiffImage num_disk num_part [REPO|CACHE] nombre_imagen_basica nombre_imagen_diferencial.
  • restoreDiffImage [CACHE|REPO] nombre_imagen num_disk num_part [PROTOCOLO] [opciones_protocolo]
  • ogMountImage [CACHE|REPO] nombre_imagen [img|diff] -> la extensión es opcional, por defecto es básica.
  • ogUnmountImage [CACHE|REPO] nombre_imagen [img|diff] -> la extensión es opcional, por defecto es básica.

Del lado del servidor.

Se utilizan para modificar las imágenes. La imagen es un sistema de fichero en el que podremos copiar o borrar archivos e incluso manipular los archivos de registro de windows.

  • createfileimage image [ img|diff ] size_kb
  • reduceimage nombre_image [ img|diff ] -> la extensión es opcional, por defecto es básica
  • mountimage nombre_image [ img|diff ] -> la extensión es opcional, por defecto es básica.
  • unmountimage image [ img | diff ] -> la extensión es opcional, por defecto es básica.

Los nombres son descriptivos, cabe comentar:

Las funciones para crear el fichero de la imagen, si este existe lo redimensiona. Al terminar deja la imagen montada con permisos de escritura.

La función para montar la imagen del lado del cliente lo monta en modo lectura, la del lado del servidor lo monta en modo escritura.

Pruebas desde la consola.

Al tener dos versiones de las imágenes sincronizadas, los script de la consola inicialmente llaman a la otra versión. Para cambiar de una versión a otra bastan comentar las primeras líneas de los script. Los script a modificar están en /opt/opengnsys/client/interfaceAdm/ y son:

  • CrearImagenBasica
  • CrearSoftIncremental
  • RestaurarImagenBasica
  • RestaurarSoftIncremental

Funcionalidades que no están reflejadas en la consola:

  • Permite hacer la transferencia de los archivos comprimida. → Descomentar en los script de interface la línea #export ogcompress="true"
  • Protocolos de transferecnia: al restaurar desde cache, la primera vez que se trae la imagen desde el repositorio lo puede hacer con multicast, unicast o torrent, las siguientes veces sincronizará la imagen de cache con la del repositorio. → Desde consola se hace con unicast, para probar con otros protocolos hay que hacerlo desde línea de comandos o desde la consola con ejecutar script.
  • Permite hacer copia de seguridad de las imágenes al crearlas → variable de entorno BACKUP en engine.cfg

Factor de compresión: al crear la imagen se calcula el tamaño del archivo a crear partiendo del tamaño de los datos y multiplicando por un factor de compresión. En las pruebas habría que tomar nota de cuanto ocupan los datos en la partición y en la imagen para poder ajustar mejor este parámetro, se ha visto que para windows y linux difiere, aunque estamos usando el mismo.

TODO.

1) Seguir probando la compresión.

2) Mensajes de log en la consola y definición de errores.

3) Internacionalización: aparecen nuevos mensaje que hay que incluir en las variables.

4) Hay que modificar las funciones ogGetImage* para que puedan obtener los datos de las imágenes básicas y diferenciales

5) Valorar si hay que incluir en la consola la definición de las variables de entorno o buscar alternativa.