AuFS significa Otro Sistema de Archivos de Unión.
AuFS comenzó como una implementación de UnionFS Union File System.
Un sistema de archivos de unión toma un sistema de archivos existente y lo superpone de forma transparente en un sistema de archivos más nuevo. Permite que archivos y directorios de sistemas de archivos separados coexistan bajo un mismo techo. AuFS puede combinar varios directorios y proporcionar una única vista combinada de ellos.
AuFS se usa en muchos de los proyectos de código abierto como Slax, Knoppix y muchas otras distribuciones de CD en vivo y USB en vivo.
En sistemas basados en Debian, por ejemplo en Ubuntu, haga lo siguiente para instalar aufs.
# apt-get install aufs-tools
Ejemplo 1:comprender cómo funciona AuFS
Este ejemplo muestra cómo montar dos directorios de un mismo sistema de archivos.
# mkdir /tmp/dir1 # mkdir /tmp/aufs-root # mount -t aufs -o br=/tmp/dir1:/home/lakshmanan none /tmp/aufs-root/
Los primeros dos comandos crearon 2 nuevos directorios. El mount.aufs es el comando para montar el sistema de archivos como Union mount.
El comando de montaje especifica que se va a montar en unión "/tmp/dir1" y /home/lakshmanan" en "/tmp/aufs-root". El directorio “/tmp/aufs-root” tendrá el contenido tanto de “/tmp/dir1” como de “/home/lakshmanan”.
Las siguientes opciones se utilizan en el ejemplo de comando de montaje anterior:
- -o:especifica las opciones que se pasarán al sistema de archivos
- br:especifica una rama, donde cada rama está separada por dos puntos (:). Una rama no es más que un directorio en un sistema.
- ninguno:especifica que no tenemos ningún dispositivo asociado, ya que vamos a montar dos directorios
Como puede ver en el siguiente resultado del comando ls -l, podemos ver que aufs está fusionando el contenido de los 2 directorios separados y ofrece una vista unificada.
# ls -l /tmp/dir1/ -rw-r--r-- 1 root root 23 Mar 25 14:21 file_in_tmp_dir1 # ls -l /home/lakshmanan -rw-r--r-- 1 root root 26 Mar 25 14:20 file_in_home_dir # ls -l /tmp/aufs-root/ -rw-r--r-- 1 root root 26 Mar 25 14:20 file_in_home_dir -rw-r--r-- 1 root root 23 Mar 25 14:21 file_in_tmp_dir1
De forma predeterminada, si no se especifican permisos, la primera rama se montará como de escritura y las ramas restantes se montarán como de solo lectura.
Entonces, cuando crea cualquier archivo dentro de '/tmp/aufs-root/', físicamente se creará en "/tmp/dir1", ya que es la única rama en la que se puede escribir.
Ejemplo 2:vista unificada de los directorios principales
A veces, los administradores del sistema terminan teniendo varias particiones de disco que tienen directorios de inicio de varios usuarios. Veremos un ejemplo de cómo podemos convertirlo en una vista unificada y simplificar el proceso de administración.
En este ejemplo:
- /home -> es el punto de montaje de /dev/sda2 que tiene usuarios "lakshmanan" y "sysadmin"
- /home1 -> es el punto de montaje de /dev/sdb2 que tiene un usuario de "prueba".
# mount -t aufs -o br=/home=rw:/home1=rw -o udba=reval none /common/ # ls -l /common/ drwxr-xr-x 39 lakshmanan lakshmanan 4096 Mar 25 15:52 lakshmanan drwxr-xr-x 26 sysadmin sysadmin 4096 Mar 25 15:51 sysadmin drwxr-xr-x 2 root root 4096 Mar 25 16:36 test
El comando de montaje anterior tiene una opción adicional llamada "udba", que se refiere al "Acceso directo a la rama del usuario". Esta opción dice qué hacer si el usuario accede directamente a una rama y crea/actualiza archivos sin pasar por AuFS.
Los siguientes son valores posibles para udba:
- udba=none:con esta opción, el AuFS será más rápido, pero puede mostrar datos incorrectos si el usuario creó algún archivo/directorio sin pasar por el AuFS.
- udba=reval:con esta opción, AuFS volverá a buscar las sucursales y las actualizará. Por lo tanto, cualquier cambio realizado en cualquier directorio dentro de la rama se reflejará en "/common".
- udba=notify:con esta opción, el AuFS se registrará en inotify para todos los directorios de las sucursales. Esto afecta el rendimiento de AuFS.
# touch /home/lakshmanan/TGS # ls -l /common/lakshmanan/ . . -rw-r--r-- 1 root root 0 Mar 25 17:17 TGS
El comando táctil creó un archivo llamado "TGS" en el directorio de inicio de "lakshmanan" sin pasar por AuFS. Dado que montamos usando "udba=retval", cuando ejecutamos ls, AuFS volvió a buscar y muestra el nuevo archivo que se creó.
También tenga en cuenta que, en el comando de montaje anterior, especificamos el permiso para cada rama como lectura y escritura. Entonces, cuando se crea un archivo en /common/test/, se creará físicamente en "/home1/test/", que es la ubicación física real. Lo mismo se aplica a otros directorios también.
# touch /common/test/Testing # ls -l /home1/test/ -rw-r--r-- 1 root root 0 Mar 25 18:26 Testing
Ejemplo 3:montaje con permiso de solo lectura para sucursales
También puede montar estableciendo permisos para cada sucursal.
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=ro -o udba=reval none /tmp/aufs-root/
El comando anterior montará /tmp/aufs-root, al tener "/tmp/dir1" como de escritura y "/home/lakshmanan" como de solo lectura. Cualquier cambio que haga en /tmp/aufs-root, se guardará solo en "/tmp/dir1", ya que ese es el único directorio en el que se puede escribir.
La siguiente secuencia de comandos se puede utilizar para verificar lo anterior.
# cat > /home/lakshmanan/1.txt This is a new file # cat /tmp/aufs-root/1.txt This is a new file # cat >> /tmp/aufs-root/1.txt This is updated on AuFS space # cat /home/lakshmanan/1.txt This is a new file # cat /tmp/dir1/1.txt This is a new file This is updated on AuFS space
En la secuencia de comandos anterior, hicimos lo siguiente:
- Estamos creando un archivo llamado 1.txt en "/home/lakshmanan".
- Este archivo se refleja en el directorio de montaje de unión, debido a la opción udba=retval que explicamos anteriormente
- Actualice el archivo que está presente en el directorio de montaje de la unión
- Aunque el archivo está presente dentro de /home/lakshmanan, ya que está montado como de solo lectura, AuFS toma una copia del archivo y la coloca en "/tmp/dir1".
- Además de esa copia, agrega el contenido y guarda el archivo
- En /home/lakshmanan/1.txt, el cambio no se refleja
- Se crea un nuevo archivo llamado "1.txt" en "/tmp/dir1" que tiene el contenido actualizado
Ejemplo 4:aplicar la política Round Robin para crear archivos en AuFS
Cuando tenemos más de 2 sucursales en las que se puede escribir, podemos elegir cualquiera de las políticas predefinidas, de modo que un archivo creado se almacenará en función de la política elegida.
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=rw -o udba=reval -o create=rr none /tmp/aufs-root/
La opción “create=rr”, especifica que se debe aplicar la política de turno rotativo para este montaje de unión. En la política de operación por turnos, si creamos 4 archivos, 2 archivos estarán en “/tmp/dir1” y 2 archivos estarán en “/home/lakshmanan”.
# touch /tmp/aufs/first-round-robin # touch /tmp/aufs/second-round-robin # ls -l /tmp/dir1/first-round-robin -rw-r--r-- 1 root root 0 Mar 25 21:53 /tmp/dir1/first-round-robin # ls -l /home/lakshmanan/second-round-robin -rw-r--r-- 1 root root 0 Mar 25 21:54 /home/lakshmanan/second-round-robin