Hasta ahora Opengnsys permite crear un archivo imagen de una partición completa que luego puede clonarse en otra. Estas imágenes hay que tratarlas como un todo y no permiten ver su contenido.
Con la sincronización de imágenes pretendemos:
Procedimiento
Creamos imágenes con mksquashfs
Para restaurar montaremos la imagen (en cache o repo) y utilizaremos rsync para sincronizar la partición. El procedimiento funciona bien para la partición completa o para una partición donde se ha restaurado la imagen y luego se han realizado cambios.
Para windows restauraremos las ACL con ntfs-3g.secaudit
Nota: supongo que después de creada la imagen permitiría añadir nuevos ficheros (igual que ogclient), aunque quizás es demasido complejo para que sea práctico
Problemas
La transferencia de la imagen con formato sqfs a través de la red sólo ha ido bien con rsync. Cuando se ha intentado mandar por multicast o unicast ha fallado.
Al restaurar la cache no se pueden mostrar log, si ponemos esta opción a rsync se cuelga el equipo. Se podría lanzar algún comando en paralelo que muestre lo que va aumentando la partición.
Comparación con partclone
La imagen será un archivo con formato squashfs del sistema de fichero de la partición.
Para guardar la información de la imagen (como tenemos en partclone: tipo de sistema operativo, tamaño, archivos de que contiene, ...) necesitaremos incluir uno o varios archivos en el sistema de fichero original antes de realizar la creación.
Montamos la partición que queremos clonar y realizamos:
# Creamos la lista del contenido y lo situamos en la particion a copiar..
rsync -aHvn --delete /mnt/sdaX/ montar > /tmp/oglista
mv /tmp/oglista /mnt/sdaX
# Nos situamos en la cache (o en repo) y creamos la imagen.
cd $OGCAC$OGIMG
mksquashfs /mnt/sdaX NombreIMG.sqfs
La única diferencia es que guardamos las acl.
Montamos la partición que queremos clonar y realizamos:
# Creamos la lista del contenido y lo situamos en la particion a copiar.
rsync -aHvn --delete /mnt/sda1/ montar > /tmp/oglista
mv /tmp/oglista /mnt/sda1
# Guardamos el contenido de las acl
ogUnmount 1 X | tee -a $FILELOG
ntfs-3g.secaudit -b /dev/sdaX / > ogimage.acl
ogMount 1 X
cp /tmp/ogimage.acl /mnt/sdaX
mksquashfs /mnt/sdaX nombreIMG.sqfs
La imagen puede estar en la cache o en repo.
Para restaurar montaremos la imagen y la partición y copiaremos con rsync
ogMount 1 2
mount -t squashfs -o loop /opt/opengnsys/image/ubuntuMontar.sqfs $OGCAC$OGIMG/montar
rsync -a –delete –quiet /opt/opengnsys/cache/opt/opengnsys/images/montar/ /mnt/sda2
ogMount 1 1
mount -t squashfs -o loop /opt/opengnsys/image/Windows.sqfs /opt/opengnsys/cache/opt/opengnsys/images/montar
rsync -aq -XH --delete $OGCAC$OGIMG/montar/ $PART 2>&1 | tee -a $FILELOG
# Restableciendo acl
cp $PART/ogimage.acl /tmp
ogUnmount 1 1
ntfs-3g.secaudit -se /dev/sda1 /tmp/ogimage.acl
/ la barra en el directorio de origen hace que transfiera el contenido del directorio al directorio destino (si no la ponemos copia también el directorio)
-a, --archive modo archivo: igual que -rlptgoD (no -H,-A,-X) conserva los enlaces simbólicos, dispositivos, permisos y propietario.
-q –quiet: no muestra mensajes que no sean errores. Si no se pone a veces se cuelga el equipo.
--delete Borra los ficheros que no existían en el original
-A preserva ACLs
-X preserva atributos extendidos (como los de Selinux)
-H preserva enlaces “duros”
-n realiza la prueba pero no hace cambios, nos sirve para crear el listado.
No utilizamos:
-z, --compress Comprime el fichero en la transferencia → no: tanto en cache como repo va más lento
-v, --verbose : Muestra todos los archivos que se van copiando) → cuelga el equipo.
--progress: muestra los archivos y el progreso → cuelga el equipo.
-g preserva grupo (incluido en a)
-o preserva propietario (incluido en a)
*Definición de imagen diferencial: *
Supongamos que tenemos una imagen completa y la hemos restaurado en un equipo que hará de modelo. Instalamos una serie de programas.
Llamaremos imagen diferencial de una completa a la que contengan los archivos nuevos y la información de los archivos que sobran, de forma que al restaurar primero la imagen completa y luego la diferencial la partición destino quede como la del equipo modelo.
Procedimiento
# Montamos imagen completa (con la que vamos a comparar)
mount -t squashfs -o loop /opt/opengnsys/image/ImgCompleta $OGCAC$OGIMG/montar
# Creamos las diferencias
rsync -aHvn --delete /mnt/sda2/ $OGCAC$OGIMG/montar > lista_img
sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g lista_img
# creasmo directorio temporarl
mkdir $OGCAC$OGIMG/img.tmp
grep -e '\->' -e '\=>' lista_img > $OGCAC$OGIMG/img.tmp/list__ln
grep -e ^deleting lista_img | sed s/^deleting\ //g > $OGCAC$OGIMG/img.tmp/list_rm
grep -v -e '\->' -e '\=>' -e ^deleting lista_img > $OGCAC$OGIMG/img.tmp/lista_rsync
#
echo "rsync -aHq --files-from=$OGCAC$OGIMG/img.tmp/list_rsync /mnt/sda2/ $OGCAC$OGIMG/img.tmp" | tee -a $FILELOG
rsync -aHq --files-from=$OGCAC$OGIMG/img.tmp/list_rsync /mnt/sda2/ $OGCAC$OGIMG/img.tmp >> $FILELOG 2>&1
echo "mksquashfs $OGCAC$OGIMG/img.tmp ubuntu11DesdePArticionSqfs.diff" | tee -a $FILELOG
mksquashfs $OGCAC$OGIMG/img.tmp ubuntu11DesdePArticionSqfs.diff | tee -a $FILELOG
Tras restaurar la imagen completa, la restauración de la imagen diferencial hará lo siguiente:
echo "Restaurar diferencial" | tee -a $FILELOG
ogMount 1 X
mount $OGCAC$OGIM/imagen.diff $OGCAC$OGIMG/montar
rsync -aHq –files-from=$OGCAC$OGIMG/montar/list_rsync $OGCAC$OGIMG/montar/ /mnt/sdaX | tee -a $FILELOG
echo "Diferencial: creando enlaces y borrando" | tee -a $FILELOG
cd $PART
rm -rf $(cat $OGCAC$OGIMG/montar/list_rc)
# nota: mal la comparación de -> no distingue el => para los enlaces duros
while read dest enlace orig
do
echo $dest ... $enlace ... $orig
if [ "$enlace" == "->" ]
then
echo enlace: $enlace
OPTLN='-s'
fi
echo "ln $OPTLN ${dest%\/*}/$orig $dest"
#ln $OPTLN ${dest%\/*}/$orig $dest
echo ""
done < $OGCAC$OGIMG/montar/list_ln
Partimos de una imagen de partclone comprimida, la transformamos en una que se pueda montar.
Se restaura la imagen en un fichero (dos opciones según el compresor):
cat Imagen.img.gz | gzip -d -c | partclone.restore -C -s - -O imgMontable.img
lzop -dc Ubuntu11.img | partclone.restore -C -s - -O ubuntu11Montar.img
Montando la imagen
mkdir montar
mount -o loop ubuntuMontar.img montar/
mount.ntfs-3g -o loop w7BasicaMontar.img montar/
Comprimiendo la imagen en formato sqfsImage.sqfs.lib
cd /opt/opengnsys/images
sudo mkdit montar
sudo mount -o loop ubuntuMontar montar
sudo mksquashfs montar ubuntuMontar.sqfs
Montando el fichero sqfs
mount -t squashfs -o loop ubuntuMontar.sqfs montar
Tamaño de la imagen
Squashfs es menor que la de partclone
Datos en disco | Squashfs | partclone | |
---|---|---|---|
Ubuntu11 Basica | 3620864(2,9G) | 1174310912 | 1659435098 |
Ubuntu 11 Completa | 5208072(5,0G) | 3672375296 | 5108650810 |
Tiempo de restauración
Squashfs | partclone | |
---|---|---|
!CreateImage en CACHE | 13:10 | 5:45 |
!RestoreImage Completa (partición vacía) | 07:16 | 4:23 |
!RestoreImage (solo borrado varios archivos*) | 00:40 |
Archivos borrados:
Tamaño de la imagen
Squashfs es mayor que la de partclone
Datos en disco | Squashfs | partclone | |
---|---|---|---|
Windows 7 Enterprise | 13095036 (13Gb) | 7759040512 | 7275938613 |
Tiempo de restauración
Squashfs | partclone | |
---|---|---|
!CreateImage en CACHE | 12:33 | 05:07 |
!RestoreImage Completa (partición vacía) | 15:37 (acl: 1m 40s) | 04:37 |
!RestoreImage (solo borrado varios archivos*) | 2:02 (acl: 1m 52s) |
Archivos borrados: