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:
|
|
Sandro Doro (email me)