[eside-ghost] unionfs.sh behind the scenes

Jon Ander Hernández hernandez en movimage.com
Mie Mayo 10 05:51:10 CEST 2006


Aupi!!

El otro email es para aquellos que le encuentren uso al script y no les
interese saber que hace, y este email es para explicar que hace el
script y de paso así ver como funciona el invento y aprender sacarle
jugo al unionfs.

Directorios :

/usr/ <-- es directorio donde vamos a montar el unionfs y a su vez
también vamos a unirlo, eso si debajo del todo, para que en caso de que
existan 2 ficheros iguales se pille el del paquete y no el del sistema.

/unionfs/cambios/ <-- una vez montado el unionfs, todos los cambios que
hagamos en /usr vendrán a parar a este directorio que será en único rw,
el resto de directorios unidos los ponemos como ro.

/unionfs/modules/ <-- aquí guardamos los paquetes, que son esos ficheros
squashfs, es decir un fichero que contiene un sistema de archivos
comprimido.

/unionfs/mounts/ <-- aquí crearemos un directorio con el mismo nombre
que el modulo y montaremos el modulo squashfs en el, y posteriormente
añadiremos ese directorio donde esta montado el modulo squashfs a la
pila de directorios unidos a /usr.

Una limitación que tenemos es que como montamos los modulos en plan :
unionfs -t squashfs -o
loop /unionfs/modules/programa_de_marras.mo /unionfs/modules/programa_de_marras.mo/
es decir usando un dispositivo loopback, tan solo podremos cargar hasta
8 módulos, porque los kernels por defecto solo soportan 8 loopback
devices.

Entonces vamos a hacer lo que hace script manualmente :

- montamos en unionfs en /usr
$ sudo mount -t unionfs -o dirs=/unionfs/cambios=rw:/usr=ro unionfs /usr

- hacemos un cambio en /usr para probar
$ sudo touch /usr/share/fichero_prueba

- creamos un archivo squashfs
$ mksquasfs /unionfs/cambios/ /unionfs/modules/modulo_prueba.mo

- borramos los cambios guardados en /unionfs/cambios
$ sudo find /unionfs/cambios -mindepth 1 -exec rm {} \;

- creamos un directorio donde montar el fichero squashfs
$ sudo mkdir /unionfs/mounts/modulo_prueba.mount_point

- montamos el fichero squashfs
$ sudo mount -t unionfs -o
loop /unionfs/modules/modulo_prueba.mo /unionfs/mounts/modulo_prueba.mount_point

- añadimos el directorio donde esta montado el paquete
(/unionfs/mounts/modulo_prueba.mount_point) al /usr
$ unionctl /usr --add --after /unionfs/cambios \
                --mode ro \
                /unionfs/mounts/modulo_prueba.mount_point

Este comando lo que hace es decirle a la herramienta de unionfs que
añada el /unionfs/mounts/modulo_prueba.mount_point como readonly después
del directorio /unionfs/cambios (que es el primer directorio en la pila
de unionfs) al unionfs montado en /usr. La sintaxis es un poco incomoda
pero es la que hay :D.

Y listo, para desmontar pos :

- desmontar el unionfs 
$ sudo umount /usr

- desmontar el fichero squashfs
$ sudo umount /unionfs/mounts/modulo_prueba.mount_point

Un saludete!!

JonAn.



Más información sobre la lista de distribución eside-ghost