Attivare le quote su un filesystem: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(30 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
{{Stub}}
{{File_System1}}
{{File_System1}}
== Introduzione ==
== Introduzione ==
In questa guida vedremo come attivare e gestire le quote su base utenti e gruppi.<br/>
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.
'''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 che gli utenti (es. max 500MB) ma anche il numero massimo di file/directory che possono creare. Questo perché anche i file vuoti occupano spazio su disco. Le quote si possono, quindi, impostare per:
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 il numero di file e directory (numero di [[inode]])
# limitare lo spazio disco (numero di blocchi)
# 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 policy di quota, non dobbiamo usare una policy di gruppo, ma definire la quota per un utente qualsiasi del gruppo e poi "propagarla" (v. avanti) a tutti i restanti membri.
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:
Nell'uso di quota sono definiti tre attributi:


#  Limite soft (es. 100MB): "limite flessibile". L'utente riceve un warning ("disk quota exceeded") se prova a salvare/creare un file di dimensioni superiori al limite flessibile.
#  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").   
#  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. 500MB):  "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.
#  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.
 
Tali limiti si applicano su un file system, e in questa guida si considera che la <code>/home</code> sia su una partizione separata. In caso contrario sarebbe necessario accedere alla directory radice <code>/</code> senza che nessun programma ne faccia uso, per esempio avviando da una distribuzione Debian live.


== Requisiti ==
== 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.
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. Se lanciando il seguente comando con [[privilegi di amministrazione]]:
 
Se si sta usando un vecchio Kernel 2.4 bisognerà inserire manualmente il modulo.
 
Se il comando:


  # modprobe quota_v2
  # modprobe quota_v2
Riga 41: Riga 38:


== Installare quota e quota tool ==
== Installare quota e quota tool ==
Eseguiamo:


  # apt-get install quota quotatool
  # apt-get install quota quotatool
Mentre <code>quota</code> è il pacchetto fondamentale, <code>quotatool</code> serve a rendere più facile la gestione delle quote per utenti e gruppi, fornendo una comoda interfaccia a linea di comando anziché dover modificare manualmente dei file di configurazione.


== Modificare <code>/etc/fstab</code> ==
== Modificare <code>/etc/fstab</code> ==
 
Loggarsi al sistema come [[root]] (eviterà l'impegno della partizione <code>/home</code>), preferibilmente da un terminale virtuale (<code>tty1</code>, <code>tty2</code>, ...). Assicurarsi che non ci siano utenti collegati con il comando who:
Loggarsi sul gestore grafico come root (eviterà l'impegno della partizione /home). Assicurarsi che non ci siano utenti collegati con il comando who:


  # who
  # who
Riga 59: Riga 58:
  # nano /etc/fstab
  # nano /etc/fstab


Quindi accodare la stringa <code>,usrquota,grpquota</code> al campo "dump" della riga relativa al punto di mount dell'home,  nell'esempio <code>/home</code> è montata su <code>/dev/hda5</code>:
Quindi accodare la stringa <code>,usrquota,grpquota</code> al campo "dump" della riga relativa al punto di mount dell'home,  nell'esempio <code>/home</code> è montata su <code>/dev/sda5</code>:


  /dev/hda5       /home          ext3     defaults''',usrquota,grpquota'''        0      2
  /dev/sda5       /home          ext4     defaults''',usrquota,grpquota'''        0      2


L'opzione <code>usrquota</code> attiva le quote per gli utenti, mentre <code>grpquota</code> le attiva per i gruppi.
L'opzione <code>usrquota</code> attiva le quote per gli utenti, mentre <code>grpquota</code> 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).
'''N.B. Scrivere tutto su una sola riga e senza spazi prima o dopo le virgole'''. Poi per salvare premere <code>Ctrl-o</code> e per uscire <code>Ctrl-x</code>.


== Creazione file quota ==
== Creazione file quota ==
Disabilitiamo le quote con:


Occorrerà creare i due file "vuoti" quota (es. in /home)
# quotaoff -avug


# quotaoff -avug  
Le opzioni <code>-avug</code> sono definite in modo consistente per tutti i comandi <code>quotaoff</code>, <code>quotaon</code>, <code>quotacheck</code>, ecc... e significano:
# touch /home/aquota.user aquota.group
* '''-a''' di applicare il comando a tutti i file system con quote, cercandoli in <code>/etc/fstab</code>;
# chmod 600 /home/aquota.user aquota.group
* '''-v''' di aumentare la verbosità dell'output prodotto;
* '''-u''' di applicare il comando alle quote utente;
* '''-g''' di applicare il comando alle quote gruppo.
 
Nel caso di <code>quotaoff</code> disabilitano tutte le quote utente e gruppo.


Per rendere attive la nuova configurazione, dobbiamo smontare e rimontare il filesystem.
Per rendere attive la nuova configurazione, dobbiamo smontare e rimontare il filesystem.
Riga 83: Riga 87:
  # cat /etc/mtab
  # cat /etc/mtab


dovremmo leggere le nuove opzioni: usrquota,grpquota
dovremmo leggere le nuove opzioni: '''usrquota,grpquota''' per il file system utilizzato da <code>/home</code>.
 
Creiamo ora i file di configurazione delle quote:
 
# quotacheck -avugcmf
Dove le opzioni <code>-avug</code> ha lo stesso significato, e applica il comando alle quote utente e gruppo di tutti i file system, e inoltre:
* '''-c''' crea i file delle quote, dopo il controllo;
* '''-m''' non prova a rimontare in sola lettura i file system per il controllo;
* '''-f''' forza la scrittura delle quote.
 
Senza le opzioni <code>-cmf</code> il comando <code>quotacheck</code> effettuerebbe soltanto il controllo, senza alterare le quote. Con queste opzioni invece creerà due file in <code>/home</code>: <code>quota.user</code> e <code>quota.group</code>, per gestire le quote '''senza''' journal.
 
== 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.
 
Creiamo per prima cosa nuovi file per le quote con ''journal'':
 
# touch /home/aquota.user
# touch /home/aquota.group
# chmod 600 /home/aquota.user
# chmod 600 /home/aquota.group
 
Riapriamo il file <code>/etc/fstab</code>:
 
# nano /etc/fstab
 
e sostituiamo <code>,usrquota,grpquota</code> con la stringa <code>,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0</code> al campo "dump" della riga relativa al punto di mount dell'home, nell'esempio <code>/home</code> è montata su <code>/dev/sda5</code>:
 
/dev/sda5      /home          ext4      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 ripete la procedura di creazione della quota, che sarà utilizzata per popolare i file: <code>aquota.user</code> e <code>aquota.group</code> situati nella home e indicati nel file appena modificato. Il parametro <code>jqfmt=vfsv0</code> invece indica il formato delle quote (32 bit per UID/GID, 64 bit per limiti sullo spazio e 32 bit per limiti sugli inode), ma sono supportati anche <code>vfsv1</code> (tutto a 64 bit), <code>rpc</code> (su [[Nfs-kernel-server: condividere risorse tra macchine GNU/Linux|NFS]]) e <code>xfs</code> (per file system <code>xfs</code>).


== Attivare quota ==
== Attivare quota ==
 
Una volta che sono state create si possono attivare con <code>quotaon</code> e le solite opzioni:
# quotacheck -avugcmf
  # quotaon -avug  
  # quotaon -avug  


== Impostare la quota per un utente ==
== Impostare la quota per un utente ==
 
Per impostare la quota di un utente, bisogna dare il comando <code>edquota</code> (<code>username</code> va sostituito con il nome dell'utente):
Per impostare la quota di un utente, bisogna dare il comando <code>edquota</code> (<code>username</code> va sostituito con la userid dell'utente):


  # edquota username
  # edquota username
Riga 100: Riga 139:
   Disk quotas for user user (uid 1000):
   Disk quotas for user user (uid 1000):
   Filesystem                  blocks      soft      hard    inodes    soft    hard
   Filesystem                  blocks      soft      hard    inodes    soft    hard
   /dev/hda5                     1848      49600      50000        244        0        0
   /dev/sda5                     1848      49600      50000        244        0        0
</pre>
</pre>


* La prima cifra indica i blocchi attualmente in uso da parte dell'utente.
* La prima cifra indica i blocchi attualmente in uso da parte dell'utente.
* La seconda indica il limite soft espresso in blocchi.
* La seconda indica il limite soft espresso in blocchi (la dimensione dipende da quella usata dal file system, ma si può modificare più agilmente con <code>quotatool</code> come vedremo).
* La terza il limite hard, sempre 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.
* 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 quella proprietà non è impostata.
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.


== Impostare il periodo di grazia ==
== Impostare il periodo di grazia ==
Il periodo di grazia è definito a livello di punto di mount e si può modificare con il comando:
Il periodo di grazia è definito a livello di punto di mount e si può modificare con il comando:


Riga 121: Riga 159:


== Warnquota ==
== 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:
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
  # dpkg-reconfigure -plow quota
N.B. Per gli utenti definiti in una struttura LDAP, leggere il file : <code>/usr/share/doc/quota/README.ldap-support</code>


== Usare quotatool ==
== Usare quotatool ==
<code>quotatool</code> è uno strumento che consente di semplificare le operazione di gestione delle quote degli utenti, rispetto <code>edquota</code>, anche in modo dinamico: cioè è possibile modificare, in più o in meno, i diversi limiti. Ad esempio il seguente comando:


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


# quotatool -v -u mariorossi -b -q 300M  -l 500M  /home
Imposta la quota utente (opzione <code>-u</code>) per 'mariorossi' sulla partizione <code>/home</code> con i limiti di spazio disco soft/hard: 800MB/1200MB (opzioni: <code>-q</code>/<code>-l</code>). Quella per un gruppo è invece supportata con l'opzione <code>-g</code>.
 
Imposta per l'utente 'mariorossi' i limiti di spazio disco soft/hard: 30MB/50MB


Mentre il successivo comando:
Mentre il successivo comando:
Riga 138: Riga 176:
  # quotatool -v -u mariorossi -b -q +100M  /home
  # quotatool -v -u mariorossi -b -q +100M  /home


Incrementa di 100MB il limite soft sempre dell'utente 'mariorossi'
Incrementa di 100MB il limite soft sempre dell'utente 'mariorossi'  


E' possibile anche modificare il periodo di grazia. Es:
E' possibile anche modificare il periodo di grazia. Es:
Riga 148: Riga 186:
Per altri esempi di utilizzo di questo utile strumento consultare la documentazione: [https://github.com/ekenberg/quotatool/blob/master/README.md]
Per altri esempi di utilizzo di questo utile strumento consultare la documentazione: [https://github.com/ekenberg/quotatool/blob/master/README.md]


== Impostare una stessa quota per ogni utente ==
== 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:
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
  # edquota -p mariorossi mariobianchi


Tale comando copierà le impostazioni sulla quota di <code>mariororssi</code> e le utilizzerà anche per l'utente <code>mariobianchi</code>.
Tale comando copierà le impostazioni di quota dell'utente <code>mariororssi</code> sull'utente <code>mariobianchi</code>.


E' consigliabile crearsi un utente predefinito al quale applicare la quota desiderata. Quando verrà creato un nuovo utente con il comando:
E' consigliabile crearsi un utente predefinito al quale applicare la quota desiderata. Quando verrà creato un nuovo utente con il comando:
Riga 162: Riga 199:
verrà assegnata al nuovo utente la stessa quota dell'utente predefinito.
verrà assegnata al nuovo utente la stessa quota dell'utente predefinito.


Oppure usare il seguente script che automatizza il compito, per tutti gli utenti:
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`
  # edquota -p uid_predefinito `awk -F: '$3 > 999 {print $1}' /etc/passwd`


Per utenti LDAP:
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`
 
<br />
 
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}'`
  # 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 ==
== Report quota ==
Con il comando <code>repquota</code> è possibile visualizzare un reporter riepilogativo delle quote impostate a livello di gruppo e di utente, con i limiti di blocchi e di inode.:


Con il comando <code>repquota</code> è possibile visualizzare una tabella con tutte le quote impostate a livello di gruppo, di utente e con limite di blocchi e di inode.:
# repquota -augs
 
L'opzione <code>-s</code> è per utilizzare un formato ''human-readable''.
# repquota -agus


Es.
Es.
Riga 197: Riga 246:
  frank    --    535M      0K      0K          2299    0    0       
  frank    --    535M      0K      0K          2299    0    0       
  faculty  --  56752K      0K      0K            410    0    0
  faculty  --  56752K      0K      0K            410    0    0


== Che quota ho? ==
== Che quota ho? ==
Ogni utente può conoscere la quota assegnata mediante il comando:
Ogni utente può conoscere la quota assegnata mediante il comando:


Riga 208: Riga 255:
  Disk quotas for user mariobianchi (uid 1003):  
  Disk quotas for user mariobianchi (uid 1003):  
     Filesystem  space  quota  limit  grace  files  quota  limit  grace
     Filesystem  space  quota  limit  grace  files  quota  limit  grace
  /dev/mapper/vg_system-skole+tjener+home0
  /dev/mapper/vg_system-server+home0
                   143M    800M  1200M            2149      0      0      
                   143M    '''800M'''   '''1200M'''           2149      0      0


== Test dei limiti ==
== Test dei limiti ==
 
E' possibile testare i limiti creando un file ''zero filled'' (riempito con una sequenza del carattere ASCII n. 0) di dimensione maggiore o uguale ai limiti imposti. Supponiamo che i limiti siano 800MB/1200MB.
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)''':
Creiamo un file di '''800MB (soft limit)''':
Riga 223: Riga 269:
  800000000 byte (800 MB) copiati, 6,11045 s, 131 MB/s
  800000000 byte (800 MB) copiati, 6,11045 s, 131 MB/s


Riceviamo un "warning", da questo momento parte il "timer" per il periodo di grazia.
Riceviamo un "warning", da questo momento parte il conteggio del periodo di grazia.


Cancelliamo <code>file.bin</code>:
Cancelliamo <code>file.bin</code>:
Riga 231: Riga 277:
Creiamo ora un file di '''1200MB (hard limit)''':
Creiamo ora un file di '''1200MB (hard limit)''':


  $ dd if=/dev/zero of=file2.bin bs=1MB count=1200
  $ dd if=/dev/zero of=file.bin bs=1MB count=1200
  dm-6: warning, user block quota exceeded.
  dm-6: warning, user block quota exceeded.
  dd: scrittura di "file2.bin": '''Spazio esaurito sul device'''
  dd: scrittura di "file.bin": '''Spazio esaurito sul device'''
  946+0 record dentro
  946+0 record dentro
  945+0 record fuori
  945+0 record fuori
Riga 241: Riga 287:


== Check quotidiano delle quote ==
== 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:
E' consigliabile impostare un cron, che a una particolare ora (es. le ore 05:00 di ogni giorno) esegua un check delle quote. Lanciar l'editor di crontab:


   # crontab -e
   # crontab -e
Riga 251: Riga 296:


== Disattivare le quote ==
== 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:
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
  # quotaoff -avug


verranno disattivate tutte le quote su base utente e gruppo.
verranno disattivate tutte le quote su base utente e gruppo, come abbiamo già visto.
 
[[Categoria:Filesystem]]
[[Categoria:Filesystem]]

Versione attuale delle 09:07, 16 nov 2015

File System

Sommario

  1. Principale
  2. File e permessi
  3. Quote utenti

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:

  1. limitare il numero di file e directory (numero di inode)
  2. 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:

  1. 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.
  1. 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").
  1. 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.

Tali limiti si applicano su un file system, e in questa guida si considera che la /home sia su una partizione separata. In caso contrario sarebbe necessario accedere alla directory radice / senza che nessun programma ne faccia uso, per esempio avviando da una distribuzione Debian live.

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. Se lanciando il seguente comando con privilegi di amministrazione:

# modprobe quota_v2

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

Eseguiamo:

# apt-get install quota quotatool

Mentre quota è il pacchetto fondamentale, quotatool serve a rendere più facile la gestione delle quote per utenti e gruppi, fornendo una comoda interfaccia a linea di comando anziché dover modificare manualmente dei file di configurazione.

Modificare /etc/fstab

Loggarsi al sistema come root (eviterà l'impegno della partizione /home), preferibilmente da un terminale virtuale (tty1, tty2, ...). 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/sda5:

/dev/sda5       /home           ext4      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. Poi per salvare premere Ctrl-o e per uscire Ctrl-x.

Creazione file quota

Disabilitiamo le quote con:

# quotaoff -avug

Le opzioni -avug sono definite in modo consistente per tutti i comandi quotaoff, quotaon, quotacheck, ecc... e significano:

  • -a di applicare il comando a tutti i file system con quote, cercandoli in /etc/fstab;
  • -v di aumentare la verbosità dell'output prodotto;
  • -u di applicare il comando alle quote utente;
  • -g di applicare il comando alle quote gruppo.

Nel caso di quotaoff disabilitano tutte le quote utente e gruppo.

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 per il file system utilizzato da /home.

Creiamo ora i file di configurazione delle quote:

# quotacheck -avugcmf

Dove le opzioni -avug ha lo stesso significato, e applica il comando alle quote utente e gruppo di tutti i file system, e inoltre:

  • -c crea i file delle quote, dopo il controllo;
  • -m non prova a rimontare in sola lettura i file system per il controllo;
  • -f forza la scrittura delle quote.

Senza le opzioni -cmf il comando quotacheck effettuerebbe soltanto il controllo, senza alterare le quote. Con queste opzioni invece creerà due file in /home: quota.user e quota.group, per gestire le quote senza journal.

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.

Creiamo per prima cosa nuovi file per le quote con journal:

# touch /home/aquota.user
# touch /home/aquota.group
# chmod 600 /home/aquota.user
# chmod 600 /home/aquota.group

Riapriamo il file /etc/fstab:

# nano /etc/fstab

e sostituiamo ,usrquota,grpquota con 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/sda5:

/dev/sda5       /home           ext4      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 ripete la procedura di creazione della quota, che sarà utilizzata per popolare i file: aquota.user e aquota.group situati nella home e indicati nel file appena modificato. Il parametro jqfmt=vfsv0 invece indica il formato delle quote (32 bit per UID/GID, 64 bit per limiti sullo spazio e 32 bit per limiti sugli inode), ma sono supportati anche vfsv1 (tutto a 64 bit), rpc (su NFS) e xfs (per file system xfs).

Attivare quota

Una volta che sono state create si possono attivare con quotaon e le solite opzioni:

# quotaon -avug 

Impostare la quota per un utente

Per impostare la quota di un utente, bisogna dare il comando edquota (username va sostituito con il nome 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/sda5                      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 dimensione dipende da quella usata dal file system, ma si può modificare più agilmente con quotatool come vedremo).
  • 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 la quota utente (opzione -u) per 'mariorossi' sulla partizione /home con i limiti di spazio disco soft/hard: 800MB/1200MB (opzioni: -q/-l). Quella per un gruppo è invece supportata con l'opzione -g.

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 -augs

L'opzione -s è per utilizzare un formato human-readable.

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 un file zero filled (riempito con una sequenza del carattere ASCII n. 0) di dimensione maggiore o uguale ai 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, come abbiamo già visto.