[eside-ghost] Unionfs ERA: sistema de ficheros para p2p
Jon Ander Hernández
hernandez en movimage.com
Mie Mayo 10 03:14:07 CEST 2006
Aupi!!
On Wed, 2006-05-10 at 02:22 +0200, halls wrote:
>
> > On Wed, 2006-05-10 at 02:02 +0200, STenyaK (Bruno Gonzalez) wrote:
> > Por cierto, y sorry por el offtopic (si alguien responde q cambie el
> > subject): sería posible que, de alguna forma, /home, /etc y /var fueran de
> > la misma particion, para facilitar mas aun el backup?
> > Imagino que con symlinks se podria hacer algo, pero parece una solucion un
> > poco warra.. alguien sabe como?
>
> yepa, a mi se me ocurre una semiguarrada ke hice una vez:
>
> tenia una particion /backup, donde habia creao (no exactamente, pero
> lo adapto a ti XD):
> /backup/home
> /backup/etc
> /backup/var
>
> y tonces, los /etc, /var y /home autenticos no eran mas ke links
> simbolicos a /backup/*
>
> te sirve?
Existe una solución más limpia que es la base por ejemplo para las live
cds que se llama unionfs, unionfs es un sistema de archivos que montado
en un directorio permite mostrar en el los contenidos de otros
directorios mergeados, es decir :
$ mkdir a b c union_mount
$ touch a/{file_a,file_b}
$ touch b/{file_c}
$ touch c/file_d
# mount -t unionfs -o dirs=$PWD/a:$PWD/b:$PWD/c unionfs union_mount
$ ls union_mount
file_a file_b file_c file_d
$ rm a/file_b
$ ls union_mount
file_a file_c file_d
$ ls a
file_a
Es decir es bastante más limpio que usar syslinks.
Otro uso bastante interesante es unir varios directorios de modo que
todos sean read only, excepto uno donde queremos que se queden todos los
cambios :
$ mkdir cambios a b union_mount
$ touch a/file_a
$ touch b/file_b
# mount -t unionfs -o dirs=$PWD/cambios=rw:$PWD/a=ro:$PWD/b=ro unionfs
union_mount
$ ls union_mount
file_a file_b
$ touch union_mount/file_c
$ ls {a,b,cambios}/*
a/file_a b/file_b cambios/file_c
La pregunta del millón es? Y si un directorio esta como read only, que
ocurre si intentamos borrar un fichero en union_mount? Pues que no se
borra de verdad, lo que unionfs hace es crear un fichero whiteout en el
directorio rw, es decir un fichero vacio y oculto que se usa para saber
que ese fichero en el union_mount no existe.
$ rm union_mount/file_b
$ ls cambios/ -al
.
..
.wh.file_b
file_c
$ ls union_mount
file_a file_c
Si queremos borrar file_a otra manera podría ser :
$ touch cambios/.wh.file_a
$ ls union_mount
file_c
Y bueno esta es la intro básica de unionfs.
Cosas importantes para no volverse loco cuando uno empieza en unionfs :
1º El orden de los directorios que se unen importa :
- el rw siempre tiene que estar encima sino no funciona.
- Si hay dos ficheros con el mismo nombre el directorio de encima
predomina.
2º unionfs es un modulo especial que actua en plan man in the middle
entre vfs normales de linux, es decir, los directorios a unir no tienen
porque ser directorios especiales de ninguna clase y el directorio
montado con el unionfs es dinámico, es decir cuando hacemos un ls a
union_mount lo que el unionfs hace es hacer llamadas al vfs de linux
para saber que devolver como contenido, con lo cual si añades un fichero
nuevo a un directorio unido el fichero aparece mistico mágicamente en
union_mount
3º Si unes un directorio y lo pones como rw (por defecto) y borras un
fichero que esta en otro directorio unido y en este directorio, se borra
en todos, y no en plan en el primer fichero nombrado asi que encuentra
en la pila de directorios unidos (se puede cambiar a este
comportamiento, pero por defecto borra todos los ficheros nombrados de
esa manera en la pila de directorios unidos, ojo con esto).
Y ya ta!!
Un saludo!!
JonAn.
Más información sobre la lista de distribución eside-ghost