# Quotes de disc

Les **quotes de disc** (disk quotas) són un mecanisme del sistema Linux que permet limitar l'espai d'emmagatzematge i el nombre d'[inodes](https://proferamon.com/tic/inodes.html) (fitxers) que poden utilitzar els usuaris o els grups en un sistema de fitxers determinat. Aquest mecanisme és especialment útil en entorns multiusuari, com servidors de fitxers, sistemes acadèmics o serveis compartits, on cal evitar que un usuari consumeixi tot l'espai disponible en perjudici dels altres.

La configuració de quotes de disc és una eina essencial per a l'administració de sistemes multiusuari, ja que permet repartir de manera equitativa i controlada l'espai d'emmagatzematge disponible. El procés bàsic consisteix a habilitar les opcions de muntatge corresponents, generar els fitxers de quota amb `quotacheck`, activar el sistema amb `quotaon` i, finalment, definir els límits per usuari o grup mitjançant `edquota`.

En aquest document es mostra com instal·lar, configurar i administrar quotes de disc en un sistema Ubuntu (o Debian), tant per usuaris com per grups.

# 1. Requisits previs

Per poder aplicar quotes, el sistema de fitxers ha de ser compatible (ext2, ext3, ext4, XFS, etc.) i s'ha de muntar amb les opcions `usrquota` o `grpquota`.

Comprovem primer quina és la partició on volem aplicar les quotes:

```bash
df -h
```

Suposarem, a tall d'exemple, que volem aplicar quotes a la partició `/home`, muntada des de `/dev/sda3`.

# 2. Instal·lació del paquet de quotes

Instal·lem les eines necessàries per gestionar quotes:

```bash
sudo apt update
sudo apt install quota
```

Aquest paquet proporciona les ordres `quotacheck`, `edquota`, `repquota`, `quotaon` i `quotaoff`, entre d'altres.

# 3. Activació de les quotes al fitxer `/etc/fstab`

Cal editar el fitxer `/etc/fstab` per afegir les opcions `usrquota` (quotes per usuari) i `grpquota` (quotes per grup) a la línia corresponent a la partició on volem aplicar-les.

```bash
sudo nano /etc/fstab
```

Localitzem la línia de la partició `/home` i hi afegim les opcions:

```nano
/dev/sda3   /home   ext4   defaults,usrquota,grpquota   0   2
```

> [!NOTE]
> Si només es vol controlar l'espai dels usuaris individuals, n'hi ha prou amb `usrquota`. Si també es vol limitar per grups, cal afegir `grpquota`.

# 4. Remuntar la partició

Perquè els canvis s'apliquin sense reiniciar el sistema, remuntem la partició:

```bash
sudo mount -o remount /home
```

Comprovem que les opcions s'han aplicat correctament:

```bash
mount | grep /home
```

Hauríem de veure `usrquota` i `grpquota` a la sortida.

# 5. Creació dels fitxers de quotes

Ara cal generar els fitxers `aquota.user` i `aquota.group`, que emmagatzemen la informació de les quotes. Això es fa amb l'ordre `quotacheck`:

```bash
sudo quotacheck -cugm /home
```

On cada opció significa:

- `-c`: crea els fitxers de quota nous (en lloc d'utilitzar els existents).
- `-u`: comprova les quotes d'usuari.
- `-g`: comprova les quotes de grup.
- `-m`: força la comprovació encara que el sistema de fitxers estigui muntat.

Després de l'execució, haurien d'aparèixer els fitxers `aquota.user` i `aquota.group` a l'arrel de `/home`:

```bash
ls -l /home/aquota.*
```

# 6. Activació de les quotes

Un cop creats els fitxers, activem el sistema de quotes:

```bash
sudo quotaon -v /home
```

Per desactivar-les en qualsevol moment:

```bash
sudo quotaoff -v /home
```

# 7. Assignació de quotes a un usuari

Per establir els límits d'un usuari concret (per exemple, `alumne1`), utilitzem l'ordre `edquota`, que obre un editor de text amb la configuració actual:

```bash
sudo edquota -u alumne1
```

Aquesta ordre mostra una pantalla similar a aquesta:

```ini
Disk quotas for user alumne1 (uid 1001):
  Filesystem   blocks   soft   hard   inodes   soft   hard
  /dev/sda3    102400   0      0      120      0      0
```

Els camps que cal entendre són:

- **blocks**: espai actualment utilitzat (en KB).
- **soft**: límit suau. Si se supera, l'usuari rep avisos, però pot seguir treballant durant un període de gràcia.
- **hard**: límit dur. No es pot superar de cap manera.
- **inodes**: nombre de fitxers utilitzats actualment.

Per exemple, per limitar l'usuari a 500 MB (límit suau) i 600 MB (límit dur), i a 1000/1100 inodes:

```nano
Disk quotas for user alumne1 (uid 1001):
  Filesystem   blocks   soft     hard     inodes   soft    hard
  /dev/sda3    102400   512000   614400   120      1000    1100
```

> [!NOTE]
> Els valors de `blocks` s'expressen en KB. 500 MB equivalen a 512000 KB.

# 8. Definició del període de gràcia

El **període de gràcia** és el temps durant el qual un usuari pot superar el límit suau abans que es converteixi en un límit dur. Es configura amb:

```bash
sudo edquota -t
```

Aquesta ordre mostra:

```ini
Grace period before enforcing soft limits for users:
Filesystem    Block grace period     Inode grace period
/dev/sda3     7days                  7days
```

Es pot modificar a hores, dies o setmanes segons les necessitats (per exemple, `3days`, `12hours`).

# 9. Còpia de la configuració a altres usuaris

Si es vol aplicar la mateixa configuració de quotes a múltiples usuaris, es pot utilitzar `edquota` amb l'opció `-p` per replicar la configuració d'un usuari de referència:

```bash
sudo edquota -p alumne1 -u alumne2 alumne3 alumne4
```

Aquesta ordre copia els límits d'`alumne1` cap a la resta d'usuaris indicats, fet molt útil en entorns educatius amb molts alumnes.

# 10. Quotes per grup

De manera similar als usuaris, es poden definir quotes per grup:

```bash
sudo edquota -g alumnes
```

Això permet limitar l'espai total que pot utilitzar un grup sencer, independentment dels límits individuals dels seus membres.

# 11. Consulta de l'estat de les quotes

Per veure l'ús actual de quotes d'un usuari concret:

```bash
quota -u alumne1
```

Per obtenir un informe general de totes les quotes en una partició:

```bash
sudo repquota -a
```

La sortida mostra una taula amb l'usuari, l'espai utilitzat, els límits i si s'ha superat algun límit (marcat amb `+`):

```ini
*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft     hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
alumne1   --   312000  512000  614400          340  1000  1100
```

# 12. Avisos automàtics als usuaris (opcional)

El servei `quotarpc` o l'ordre `warnquota` permeten enviar avisos per correu electrònic als usuaris que s'apropen al límit. Cal configurar el fitxer `/etc/warnquota.conf` i, opcionalment, afegir una tasca programada amb `cron`:

```bash
sudo apt install quota
sudo nano /etc/warnquota.conf
```

I afegirem una entrada a `crontab` per executar-ho periòdicament:

```bash
sudo crontab -e
```

```nano
0 8 * * * /usr/sbin/warnquota
```

# 13. Verificació i manteniment

És recomanable executar `quotacheck` periòdicament (per exemple, després d'una aturada incorrecta del sistema) per mantenir la integritat dels fitxers de quota:

```bash
sudo quotaoff /home
sudo quotacheck -avugm
sudo quotaon /home
```

# Resum de les ordres principals

| Ordre | Funció |
|---|---|
| `quotacheck` | Crea o verifica els fitxers de quotes |
| `quotaon` / `quotaoff` | Activa o desactiva el sistema de quotes |
| `edquota -u` | Edita la quota d'un usuari |
| `edquota -g` | Edita la quota d'un grup |
| `edquota -t` | Configura el període de gràcia |
| `quota -u` | Mostra la quota d'un usuari |
| `repquota -a` | Mostra un informe complet de totes les quotes |

#### Versions d'aquest document

+ HTML - [quotes.html](https://proferamon.com/tic/quotes.html)
+ PDF - [quotes.pdf](https://proferamon.com/tic/docs/quotes.pdf)
+ ODT - [quotes.odt](https://proferamon.com/tic/odt/quotes.odt)
+ MD - [quotes.md](https://proferamon.com/tic/md/quotes.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)
