Attivare le quote su un filesystem: differenze tra le versioni
Riga 127: | Riga 127: | ||
* La quarta cifra indica il numero di inode utilizzati dall'utente, e le successive due sono i limiti soft e hard sugli inode. | * La quarta cifra indica il numero di inode utilizzati dall'utente, e le successive due sono i limiti soft e hard sugli inode. | ||
Un valore 0 significa che | Un valore 0 significa che quel limite non è impostato. | ||
Le modifiche effettuate vengono controllate quando si chiude l'editor. In caso abbiate commesso qualche errore vi verrà segnalato. | Le modifiche effettuate vengono controllate quando si chiude l'editor. In caso abbiate commesso qualche errore vi verrà segnalato. |
Versione delle 19:19, 23 ago 2014
Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.
Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template. |
File System |
Sommario |
Introduzione
In questa guida vedremo come attivare e gestire le quote su base utenti e gruppi.
A cosa servono le quote? Nel caso di sistemi con più utenti, il loro utilizzo è utile perché permette di impedire che pochi utenti occupino tutto lo spazio disponibile, a discapito degli altri.
Servono a limitare lo spazio di disco (es. max 500MB) che gli utenti possono utilizzare, ma anche il numero massimo di file/directory che possono creare; questo perché anche i file vuoti occupano spazio su disco. Le quote, quindi, si possono impostare per:
- limitare il numero di file e directory (numero di inode)
- limitare lo spazio disco (numero di blocchi)
La limitazione può essere per utente e per gruppo. La limitazione per gruppo si riferisce allo spazio occupato/numero di file o directory, complessivi, di tutti i membri dello stesso gruppo. Se vogliamo, invece, che ciascun utente di uno stesso gruppo (es. Studenti) abbia una identica quota, non dobbiamo usare una quota di gruppo, ma definire la quota per un utente qualsiasi del gruppo e poi "propagarla" (v. avanti) a tutti i restanti membri.
Nell'uso di quota sono definiti tre attributi:
- Limite soft (es. 800MB): "limite flessibile". L'utente riceve un warning ("disk quota exceeded") se prova a salvare/creare un file di dimensioni superiori al limite flessibile.
- Periodo di grazia (es. 7 giorni): al raggiungimento del limite flessibile, decorre un periodo di tempo durante il quale all'utente è concesso sforare tale limite, senza che riceva quindi l'errore di "quota disco superata"; sempre che non superi un secondo limite più grande (detto "rigido").
- Limite hard (es. 1200MB): "limite rigido". L'utente non sarà in grado di creare/salvare file con una dimensione maggiore di quella definita nel limite hard. E' un limite che non può essere derogato temporaneamente come quello soft.
Requisiti
Occorre che il kernel abbia il supporto per le quote. I kernel precompilati hanno tale supporto. Se invece state usando un kernel compilato da voi, assicuratevi di aver incluso il supporto alle quote. Se si sta usando un vecchio Kernel 2.4 bisognerà inserire manualmente il modulo. Lanciando il comando:
# modprobe quota_v2
se restituirà il messaggio:
...Module quota_v2 loaded, with warnings...
occorrerà aggiungerlo al caricamento dei moduli all'avvio:
# echo 'quota_v2' >> /etc/modules
quindi riavviare il sistema
Installare quota e quota tool
# apt-get install quota quotatool
Modificare /etc/fstab
Loggarsi al sistema come root (eviterà l'impegno della partizione /home). Assicurarsi che non ci siano utenti collegati con il comando who:
# who
In tal caso riavviare il sistema
# shutdown -r now "Riavvio del sistema per manutenzione"
Per prima cosa dobbiamo abilitare nel file /etc/fstab
le quote sul filesystem che ci interessa; solitamente si attivano sul punto di mount relativo alla directory radice delle home. Nel caso non ci sia un punto di mount per /home
(es. una partizione dedicata alle home dir. utenti) occorrerà applicare le modifiche all'intero filesystem (punto di mount: /
):
# cp /etc/fstab /etc/fstab.orig # nano /etc/fstab
Quindi accodare la stringa ,usrquota,grpquota
al campo "dump" della riga relativa al punto di mount dell'home, nell'esempio /home
è montata su /dev/hda5
:
/dev/hda5 /home ext3 defaults,usrquota,grpquota 0 2
L'opzione usrquota
attiva le quote per gli utenti, mentre grpquota
le attiva per i gruppi.
N.B. Scrivere tutto su una sola riga e senza spazi prima o dopo le virgole (si consiglia l'editor predefinito nano).
Creazione file quota
Occorrerà creare i due file "vuoti" quota
# quotaoff -avug # touch /home/aquota.user # touch /home/aquota.group # chmod 600 /home/aquota.user # chmod 600 /home/aquota.group
Per rendere attive la nuova configurazione, dobbiamo smontare e rimontare il filesystem.
# mount -o remount /home
Se tutto è andato bene con il comando:
# cat /etc/mtab
dovremmo leggere le nuove opzioni: usrquota,grpquota
Attivare quota
# quotacheck -avugcmf # quotaon -avug
Quota giornalizzata
Se dopo l'esecuzione di quotacheck, si riceve il seguente messaggio
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
E' preferibile optare per la "journaled quota" che offre vantaggi rispetto alla quota normale.
Riapriamo il file /etc/fstab
:
# nano /etc/fstab
e accodiamo questa volta la stringa ,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0
al campo "dump" della riga relativa al punto di mount dell'home, nell'esempio /home
è montata su /dev/hda5
:
/dev/hda5 /home ext3 defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 2
sempre prestando attenzione a mettere tutto su una sola riga.
A questo punto, si riparte dalla procedura di creazione della quota
Impostare la quota per un utente
Per impostare la quota di un utente, bisogna dare il comando edquota
(username
va sostituito con la userid dell'utente):
# edquota username
Si aprirà il vostro editor predefinito, che mostrerà una schermata simile a questa:
Disk quotas for user user (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/hda5 1848 49600 50000 244 0 0
- La prima cifra indica i blocchi attualmente in uso da parte dell'utente.
- La seconda indica il limite soft espresso in blocchi.
- La terza il limite hard, sempre espresso in blocchi.
- La quarta cifra indica il numero di inode utilizzati dall'utente, e le successive due sono i limiti soft e hard sugli inode.
Un valore 0 significa che quel limite non è impostato.
Le modifiche effettuate vengono controllate quando si chiude l'editor. In caso abbiate commesso qualche errore vi verrà segnalato.
Impostare il periodo di grazia
Il periodo di grazia è definito a livello di punto di mount e si può modificare con il comando:
# edquota -t
può essere specificato con le seguenti unità di misura: 'seconds', 'minutes', 'hours', and 'days' (es. '7days')
Warnquota
Warnquota è uno script che invia automaticamente una mail all'utente che ha raggiunto il limite soft. E' gestito da cron e lo si configura mediante debconf:
# dpkg-reconfigure -plow quota
N.B. Per gli utenti definiti in una struttura LDAP, leggere il file : /usr/share/doc/quota/README.ldap-support
Usare quotatool
quotatool è uno strumento che consente di semplificare le operazione di gestione delle quote degli utenti, rispetto edquota, anche in modo dinamico: cioè è possibile modificare, in più o in meno, i diversi limiti. Ad esempio il seguente comando:
# quotatool -v -u mariorossi -b -q 800M -l 1200M /home
Imposta per l'utente 'mariorossi' i limiti di spazio disco soft/hard: 800MB/1200MB
Mentre il successivo comando:
# quotatool -v -u mariorossi -b -q +100M /home
Incrementa di 100MB il limite soft sempre dell'utente 'mariorossi'
E' possibile anche modificare il periodo di grazia. Es:
# quotatool -u -b -t "1 week" /home
Imposta per tutti gli utenti che hanno una quota su /home
il periodo di grazia a 1 settimana.
Per altri esempi di utilizzo di questo utile strumento consultare la documentazione: [1]
Impostare una stessa quota per più utenti
Dopo aver impostato la quota di un utente, se volessimo usare le stesse impostazioni per altri utenti, sarà sufficiente scrivere, per esempio:
# edquota -p mariorossi mariobianchi
Tale comando copierà le impostazioni di quota dell'utente mariororssi
sull'utente mariobianchi
.
E' consigliabile crearsi un utente predefinito al quale applicare la quota desiderata. Quando verrà creato un nuovo utente con il comando:
# edquota -p uid_predefinito uid_nuovo_utente
verrà assegnata al nuovo utente la stessa quota dell'utente predefinito.
Oppure usare il seguente script che automatizza il compito.
Per tutti gli utenti:
# edquota -p uid_predefinito `awk -F: '$3 > 999 {print $1}' /etc/passwd`
Oppure solo per gli utenti del gruppo con GID=10100
# edquota -p uid_predefinito `awk -v X=10100 -F ':' '{if ( $4 == X ) print $1 }' /etc/passwd`
Invece, per gli utenti archiviati in una struttura LDAP si potranno, rispettivamente, usare gli script:
# edquota -p uid_predefinito `getent passwd | awk -F: '$3 > 999 {print $1}'`
e:
# edquota -p uid_predefinito `getent passwd | awk -v X=10100 -F ':' '{if ( $4 == X ) print $1 }'`
Report quota
Con il comando repquota
è possibile visualizzare un reporter riepilogativo delle quote impostate a livello di gruppo e di utente, con i limiti di blocchi e di inode.:
# repquota -agus
Es.
*** Report for user quotas on device /dev/mapper/vg_system-server+home Block grace time: 7days; Inode grace time: 7days Space limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 292K 0K 0K 51 0 0 frank -- 535M 800M 1200M 2709 0 0 mariobianchi -- 143M 800M 1200M 2149 0 0 marioverdi -- 54408K 800M 1200M 1595 0 0
*** Report for group quotas on device /dev/mapper/vg_system-server+home Block grace time: 7days; Inode grace time: 7days Space limits File limits Group used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 292K 0K 0K 51 0 0 mail -- 272K 0K 0K 68 0 0 frank -- 535M 0K 0K 2299 0 0 faculty -- 56752K 0K 0K 410 0 0
Che quota ho?
Ogni utente può conoscere la quota assegnata mediante il comando:
$ quota -vs
Esempio:
Disk quotas for user mariobianchi (uid 1003): Filesystem space quota limit grace files quota limit grace /dev/mapper/vg_system-server+home0 143M 800M 1200M 2149 0 0
Test dei limiti
E' possibile testare i limiti creando dei file "zero filled" (vuoti) di dimensioni maggiori o uguali dei limiti imposti. Supponiamo che i limiti siano 800MB/1200MB.
Creiamo un file di 800MB (soft limit):
$ dd if=/dev/zero of=file.bin bs=1MB count=800 dm-6: warning, user block quota exceeded. 800+0 record dentro 800+0 record fuori 800000000 byte (800 MB) copiati, 6,11045 s, 131 MB/s
Riceviamo un "warning", da questo momento parte il conteggio del periodo di grazia.
Cancelliamo file.bin
:
$ rm file.bin
Creiamo ora un file di 1200MB (hard limit):
$ dd if=/dev/zero of=file.bin bs=1MB count=1200 dm-6: warning, user block quota exceeded. dd: scrittura di "file.bin": Spazio esaurito sul device 946+0 record dentro 945+0 record fuori 945192960 byte (945 MB) copiati, 11,9278 s, 79,2 MB/s
Abbiamo superato il limite rigido e il messaggio ricevuto ci informa che abbiamo esaurito lo spazio a nostra disposizione.
Check quotidiano delle quote
E' consigliabile impostare un cron, che a una particolare ora (es. le ore 05:00 di ogni giorno) esegua un check delle quote. Lanciare l'editor di crontab:
# crontab -e
e aggiungere la seguente riga:
0 5 * * * quotacheck -avug
Disattivare le quote
Può capitare di impostare valori insufficienti nei limiti e bloccare così i login oppure di non avere più necessità di impostare quote. Con il comando:
# quotaoff -avug
verranno disattivate tutte le quote su base utente e gruppo.