[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