Laboratorio

Modulo 7 - Sistemi operativi di rete

Esperienza su quota e ACL su filesystem XFS

Per la realizzazione di questo modulo useremo Netkit4TIC. Scarica il tarball (5KB) contenente lo script lab che genera l'esercitazione.

In questa sezione faremo riferimento al filesystem XFS ma diciamo che, con piccole variazioni, potremmo fare riferimento al filesystem ext3. E` disponibile in internet un interessante corso per XFS Overview & Internals dove ci sono anche dei "labs" che possono essere usati per estendere questa stessa esperienza.
XFS è un filesystem completamente a 64 bits (contatori/indirizzi). La dimensione teorica del filesystem raggiungono i 18 millioni di terabyte (invece per ext3 con blocchi da 4KiB si raggiungono i 2TiB). Maggiori informazioni si possono trovare consultando la XFS/Linux homepage. Le caratteristiche che ci hanno fatto decidere per questo filesystem sono: stabilità del codice, ottime prestazioni con grandi volumi di I/O e infine ottimo supporto per ACL.

Preparazione dell'ambiente

Per effettuare l'esperienza occorre avere nella vm una partizione da usare come filesystem XFS. Ricordando che i device a blocchi di UML sono normalmente associati ad un file sull'host, prepariamo su quest'ultimo una backing store di 20M come "sparse file" (XFS ed ext3 lo supportano):

realHost$ dd if=/dev/zero of=/tmp/xfs.fs bs=1M seek=20 count=1

e la passiamo alla nascente vm come secondo ubd device (ubd1):

realHost$ vstart test-xfs --mem=128 --append="ubd1=/tmp/xfs.fs"

All'interno della vm costruiamo un filesystem XFS sul device /dev/ubd/1:

test-xfs# mkfs.xfs -f /dev/ubd/1
meta-data=/dev/ubd/1             isize=256    agcount=1, agsize=4096 blks
         =                       sectsz=512  
data     =                       bsize=4096   blocks=4096, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096  
log      =internal log           bsize=4096   blocks=1200, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0

In seguito occorrerà costruire un punto di montaggio dove inseriremo il filesystem XFS:

test-xfs# mkdir /mnt/xfs

poi modifichiamo il file /etc/fstab aggiungendo la riga:

/dev/ubd/1   /mnt/xfs   xfs   rw,usrquota,grpquota 0 1

Abbiamo specificato il tipo di filesystem (xfs), la modalità di accesso (rw), l'attivazione di quota (usrquota e grpquota).
Ora montiamo il filesystem:

test-xfs# mount /mnt/xfs

Nel caso invece di filesystem ext3 occorrerebbe costruire solo per una volta i files che contengono le informazioni di quota per utente e per gruppo (aquota.group e aquota.user) con il comando

test-xfs# quotacheck -cug /mnt/xfs

e in seguito abilitare il quota:

test-xfs# quotaon /mnt/xfs

Proseguiamo con la costruzione di due utenti di prova con la home directory nel filesystem XFS:

test-xfs# chmod a+rwx /mnt/xfs; \
               useradd -m -d /mnt/xfs/nane nane; \
               useradd -m -d /mnt/xfs/toni toni

Ora è venuto il momento di settare i limiti per l'occupazione di memoria. Il pacchetto che fornisce l'implementazione del sistema per il quota disk è quota. Decidiamo che l'utente nane possa raggiungere una massimo di 6.2 MB e quando supera il valore 5 MB cominci ad essere avvisato dal sistema attraverso una mail che il suo spazio su disco stà iniziando ad esaurirsi. Per l'utente toni poniamo i due valori a 3.2 MB e a 2 MB (vengono settati anche gli i-node a 10 e 11):

test-xfs# setquota -u nane 5000 6200 10 11 /dev/ubd/1; \
          setquota -u toni 2000 3200 10 11 /dev/ubd/1

Tutti i passi precedentemente illustrati vengono fatti automaticamente con il lancio del comando:

realHost$ ./lab start

e quindi si possono verificare nel codice dello script.

Sperimentazione interattiva del Quota

Per disabilitare il quota:

test-xfs# quotaoff  -v /mnt/xfs
Disabling group quota enforcement on /dev/ubd/1
/dev/ubd/1: group quotas turned off
Disabling user quota enforcement on /dev/ubd/1

e per riabilitarlo occorre smontare e poi rimontare la partizione.

test-xfs# umount /mnt/xfs; \
          mount /mnt/xfs

Allo scopo di simulare una occupazione di disco da parte degli utenti lo script genera un file fittizio di 5MB per l'utente nane e un file di 2MB per l'utente toni.
Per riassumere la situazione usiamo il comando repquota:

test-xfs# repquota /mnt/xfs
*** Report for user quotas on device /dev/ubd/1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --       0       0       0              3     0     0       
nane      +-    5132    5000    6200  7days       5    10    11       
toni      +-    2060    2000    3200  7days       5    10    11

Per verificare che la limitazione configurata esista e funzioni, simuliamo che l'utente nane generi un file di 2M e osserviamo le reazioni del sistema:

test-xfs# su - nane
test-xfs$ dd if=/dev/zero of=big bs=2M count=1
dd: writing `big': Disk quota exceeded
1+0 records in
0+0 records out
1048576 bytes transferred in 0.035859 seconds (29241714 bytes/sec)

Possimo evidenziare come sia comparso un avviso del superamento dello spazio assegnato e che quello che è stato possibile scrivere effettivamente su disco sia all'incirca l'hard limit.

Un utile comando è warnquota che serve per controllare la quota per ogni filesystem montato. Nel caso di superamento della quota spedisce una e-mail di warning per tutti gli utenti ai quali si stà esaurendo lo spazio su disco. Il programma è parte del pacchetto quota. Normalmente la sua esecuzione avviene di notte e la partenza viene configurata utilizzando il demone crond.

Nella nostra esperienza virtuale non aspettiamo la notte e lo lanciamo a mano:

test-xfs# warnquota -u

possiamo andare a vedere il testo della e-mail di notifica all'utente toni con il comando:

test-xfs# mutt -f /var/spool/mail/toni

(screenshot).

Per operare una scansione del filesystem per il ricalcolo della percentuale di disco utilizzato è utile il comando quotacheck (a volte anche con il flag -m) ma non è necessario per XFS.

Sperimentazione interattiva delle ACL

Le ACL (acronimo di Access Control Lists) sono un sistema per definire dei permessi più dettagliati per l'accesso a file e directory. Ci sono due tipi di ACL:

Una ACL consiste in una o più righe dette entry.

Le ACL a cui faremo riferimento sono quelle delle specifiche rilasciate da IEEE 1003.1e draft 17 ("POSIX.1e").
Per reperire le informazioni riguardanti le ACL si può attivare una macchina virtuale e da questa dare il comando:

virtualHost# man acl

e poi continuare sfogliando con il man tutti i "SEE ALSO" incontrati.

Ci sono molti documenti che descrivono le ACL e tra quelli in lingua italiano il migliore è sicuramente il capitolo "ACL POSIX con i sistemi GNU/Linux" in Appunti di Informatica Libera di Daniele Giacomini. Riportiamo alcuni comandi modificati (il pacchetto che contiene i programmi come setfacl/getfacl è acl):

test-xfs# su - nane
test-xfs$ touch primo
test-xfs$ ls -la primo
-rw-r--r--  1 nane users 0 Oct  1 23:02 primo
test-xfs$ getfacl primo
# file: primo
# owner: nane
# group: users
user::rw-
group::r--
other::r--
test-xfs$ setfacl -m user:toni:rw- primo
test-xfs$ getfacl primo
# file: primo
# owner: nane
# group: users
user::rw-
user:toni:rw-
group::r--
mask::rw-
other::r--
test-xfs:~$ ls -l primo
-rw-rw-r--+ 1 nane users 0 Oct  1 23:02 primo

si lascia al lettore la prova dell'intera sequenza di comandi compresa l'esplorazione della eredità.

Altre letture consigliate:

Creative Commons License FREE THE MOUSE Valid HTML! Sandro Doro (email me)
Ultima modifica: $Date: 2007-10-31 16:24:21 $