AuFS sta per Another Union File System.
AuFS è nato come implementazione di UnionFS Union File System.
Un filesystem union prende un filesystem esistente e lo sovrappone in modo trasparente a un filesystem più recente. Consente a file e directory di filesystem separati di coesistere sotto un unico tetto. AuFS può unire più directory e fornirne un'unica vista unita.
AuFS è utilizzato in molti dei progetti opensource come Slax, Knoppix e molti altri CD live e distribuzioni USB live.
Sui sistemi basati su Debian, ad esempio su Ubuntu, procedi come segue per installare aufs.
# apt-get install aufs-tools
Esempio 1 – Capire come funziona AuFS
Questo esempio mostra come montare due directory di uno stesso filesystem.
# mkdir /tmp/dir1 # mkdir /tmp/aufs-root # mount -t aufs -o br=/tmp/dir1:/home/lakshmanan none /tmp/aufs-root/
I primi due comandi hanno creato 2 nuove directory. mount.aufs è il comando per montare il filesystem come Union mount.
Il comando mount specifica che eseguirà l'unione di mount “/tmp/dir1″ e /home/lakshmanan” sotto “/tmp/aufs-root”. La directory “/tmp/aufs-root” avrà il contenuto sia di “/tmp/dir1” che di “/home/lakshmanan”.
Le seguenti opzioni vengono utilizzate nell'esempio del comando mount sopra:
- -o – specifica le opzioni da passare al filesystem
- br – specifica un ramo, in cui ogni ramo è separato da due punti (:). Un ramo non è altro che una directory su un sistema.
- none:specifica che non abbiamo alcun dispositivo associato, poiché monteremo due directory
Come puoi vedere dall'output del comando ls -l sottostante, possiamo vedere che aufs sta fondendo il contenuto delle 2 directory separate e offre una vista unificata.
# 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
Per impostazione predefinita, se non vengono specificate autorizzazioni, il primo ramo verrà montato come scrivibile e i rami rimanenti verranno montati come di sola lettura.
Quindi, quando crei un file all'interno di "/tmp/aufs-root/", fisicamente verrà creato in "/tmp/dir1", poiché è l'unico ramo scrivibile.
Esempio 2 – Visualizzazione unificata delle home directory
A volte, gli amministratori di sistema finiscono per avere più partizioni del disco che hanno directory home di più utenti. Vedremo un esempio di come possiamo renderlo una vista unificata e semplificare il processo di amministrazione.
In questo esempio:
- /home -> è il punto di montaggio di /dev/sda2 con utenti "lakshmanan" e "sysadmin"
- /home1 -> è il punto di montaggio di /dev/sdb2 con utente "test".
# 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
Il comando mount sopra ha un'opzione aggiuntiva chiamata "udba", che si riferisce a "Accesso diretto dell'utente". Questa opzione dice cosa fare se l'utente accede direttamente a un ramo e crea/aggiorna file senza passare da AuFS.
I seguenti sono valori possibili per udba:
- udba=none – Con questa opzione, AuFS sarà più veloce, ma potrebbe mostrare dati errati, se l'utente ha creato file/directory senza passare attraverso AuFS.
- udba=reval – Con questa opzione, AuFS cercherà nuovamente i rami e li aggiornerà. Pertanto, qualsiasi modifica apportata a qualsiasi directory all'interno del ramo si rifletterà in "/common".
- udba=notify – Con questa opzione, AuFS registrerà per inotify per tutte le directory nei rami. Ciò influisce sulle prestazioni di AuFS.
# touch /home/lakshmanan/TGS # ls -l /common/lakshmanan/ . . -rw-r--r-- 1 root root 0 Mar 25 17:17 TGS
Il comando touch ha creato un file chiamato "TGS" nella home directory di "lakshmanan" senza passare da AuFS. Poiché abbiamo montato utilizzando "udba=retval", quando eseguiamo ls, AuFS ha eseguito una nuova ricerca e mostra il nuovo file che è stato creato.
Si noti inoltre che, nel precedente comando mount, abbiamo specificato l'autorizzazione per ciascun ramo come readwrite. Quindi, quando un file viene creato in /common/test/, verrà creato fisicamente in "/home1/test/", che è la posizione fisica effettiva. Lo stesso vale anche per altre directory.
# touch /common/test/Testing # ls -l /home1/test/ -rw-r--r-- 1 root root 0 Mar 25 18:26 Testing
Esempio 3:montaggio con autorizzazione di sola lettura per i rami
Puoi anche montare impostando le autorizzazioni per ogni ramo.
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=ro -o udba=reval none /tmp/aufs-root/
Il comando precedente monterà /tmp/aufs-root, avendo "/tmp/dir1" come scrivibile e "/home/lakshmanan" come sola lettura. Qualsiasi modifica apportata in /tmp/aufs-root, verrà salvata solo in "/tmp/dir1", poiché questa è l'unica directory scrivibile.
La seguente sequenza di comandi può essere utilizzata per verificare quanto sopra.
# 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
Nella sequenza di comandi sopra, abbiamo fatto quanto segue:
- Stiamo creando un file chiamato 1.txt sotto “/home/lakshmanan”.
- Questo file si riflette nella directory mount dell'unione, a causa dell'opzione udba=retval che abbiamo spiegato sopra
- Aggiorna il file presente nella directory di montaggio dell'unione
- Anche se il file è presente all'interno di /home/lakshmanan, dal momento che è montato in sola lettura, AuFS prende una copia del file e la posiziona su “/tmp/dir1”.
- In cima a quella copia, aggiunge il contenuto e salva il file
- In /home/lakshmanan/1.txt, la modifica non si riflette
- Un nuovo file denominato "1.txt" viene creato in "/tmp/dir1" con il contenuto aggiornato
Esempio 4:applicare la politica Round Robin per la creazione di file in AuFS
Quando abbiamo più di 2 branch scrivibili, possiamo scegliere uno qualsiasi dei criteri predefiniti, in modo che un file creato venga archiviato in base al criterio scelto.
# mount -t aufs -o br=/tmp/dir1=rw:/home/lakshmanan=rw -o udba=reval -o create=rr none /tmp/aufs-root/
L'opzione "create=rr", specifica che la politica round robin deve essere applicata per questo montaggio union. Nella politica round robin, se creiamo 4 file, 2 file saranno in "/tmp/dir1" e 2 file in "/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