Cuotas en ext2/ext3

Es posible establecer cuotas de espacio en disco tanto por usuario como por grupo para evitar que un determinado usuario o grupo monopolice el espacio en disco.

Esta característica tiene que estar soportada dentro del núcleo.

El espacio en disco es un recurso finito y una mala gestión de su uso puede provocar una denegación de servicio.

Será necesario controlar la actividad de los usuarios para evitar un mal uso del espacio en disco.

Aunque el espacio en disco pueda parecer asequible a los usuarios en realidad es bastante caro. Ya que el tener espacio desaprovechado implica:

¿En qué sistemas de ficheros podemos establecer cuotas de usuario?

Podemos establecer cuotas de espacio en disco en todos los sistemas de ficheros que aparezcan en /etc/fstab.

Debido a la posibilidad de realizar una instalación en varios sistemas de ficheros podemos optimizar el uso de cuotas para los usuarios y grupos en cada sistema de fichero.

Cuotas hard

Las cuotas hard establecen la cantidad máxima de espacio que se puede utilizar y no se pueden sobrepasar a menos que el administrador las cambie. Estas cuotas se pueden establecer:

  • Por usuario. Una vez superado el usuario no podrá escribir en el sistema de ficheros.

    Sugerencia

    Al contrario que en otros sistemas un usuario que haya sobrepasado la cuota sí podrá borrar ficheros.

  • Por grupo. Una vez superado ningún usuario del grupo podrá escribir en el sistema de ficheros, a pesar de que no haya alcanzado su cuota como usuario.

Cuotas soft

Las cuotas soft establen el umbral para avisar a los usuarios o grupos de que están llegando al límite máximo o cuota hard. Cuando se llega a esta cuota cada vez que un usuario que la ha sobrepasado escribe en el sistema de ficheros le aparece un mensaje en la terminal recordandoselo. Estas cuotas se pueden establecer:

  • Por usuario.

  • Por grupo.

El periodo de gracia

Cuando se sobrepasa la cuota soft se entra en el periodo de gracia. Una vez terminado el periodo no le es permitido al usuario o grupo escribir en el sistema de ficheros hasta que libere el espacio necesario para estar por debajo de la cuota soft.

Este periodo se puede especificar en meses, semanas, dís, horas, minutos o segundos.

Pasos previos a la activación de las cuotas

Será necesario que el núcleo este activado con soporte para cuotas.

Como se podría esperar sólo es superusuario o root podrá establecer las cuotas.

Para cada sistema de ficheros en el que queramos establecer las cuotas deberemos hacer lo siguiente:

  1. Añadir en el fichero /etc/fstab las opciones usrquota para habilitar las cuotas para usuarios y grpquota para los grupos.

  2. Crear los ficheros quota.user y quota.group en la raíz del sistema de ficheros y establecer los permisos adecuados. Supongamos que queremos establecer las cuotas de usuario y grupo para el sistema de ficheros /dev/sda5 que está montado en /home:

    [root@sal]# touch /home/quota.user
    [root@sal]# touch /home/quota.group
    [root@sal]# chmod 400 /home/quota.*
    

    Importante

    Estos ficheros contendran datos binarios y no texto.

  3. Tendremos que inicializar las bases de datos que van a almacenar la información relativa a las cuotas en los ficheros que hemos creado anteriormente:

    [root@sal]# quotacheck -avug
    quotacheck: Scanning /dev/sda5 [/home] done
    quotacheck: Checked 79 directories and 657 files
    [root@sal]# 
    

    Las opciones que le hemos pasado a quotacheck:

    • a realiza la comprobación para todos los sistemas de ficheros con cuotas.

    • v modo verbose.

    • u realiza la comprobación para las cuotas de usuario.

    • g realiza la comprobación para las cuotas de grupo.

  4. Activamos el sistema de quotas:

    [root@sal]# quotaon -a
    [root@sal]# 
    

Estableciendo cuotas

Una vez configurado y arrancado el sistema de cuotas tendremos que establecer las cuotas para los diferentes usuarios y grupos.

Las cuotas se establecen por bloques e inodos. A menos que se haya jugueteado con las opciones la crear un sistema de ficheros cada bloque equivaldráa, normalmente, a 1 KB (1.24 bytes).

Utilizaremos el comando edquota para establecer las cuotas. Este comando accede a los ficheros quota.user y quota.group creando un fichero temporal en /tmp editandolo por defecto con vi a menos que se especifique otro editor en las variables de entorno EDITOR o VISUAL. Algunos de los flags que podemos utilizar son:

  • u que se utiliza para editar las cuotas de disco de los usuarios. Si se especifica la opción g esta opción es ignorada.

  • g que se utiliza para editar las cuotas de disco de los grupos.

Para cambiar las cuotas del usuario pcm deberemos:

[root@sal]# edquotacheck -u pcm

A continuación se accederá a los ficheros de cuotas y se creará en /tmp un fichero con datos que será editado y aparecerá algo como esto:

Disk quotas for user pcm (uid 1000):
Filesystem     blocks   soft   hard   inodes   soft   hard
/dev/sda5        1084  15000  25000      732   2000   3500

Modificamos los valores para hard y soft y al grabar y salir se actualiza el sistema de cuotas con los nuevos datos.

Importante

Los valores que aparecen en blocks y en inodes son los bloques e inodos que está utilizando el usuario en ese sistema de ficheros en ese momento.

Es posible establecer cuotas de usuario en línea de comando utilizando el comando setquota.

Sugerencia

man setquota

Estableciendo el periodo de gracia

El periodo de gracia lo estableceremos con edquota -t. El procedimiento es el mismo que para establecer las cuotas de usuarios y grupos con edquota. Al ejecutar edquota -t:

[root@sal]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem       Block grace period   Inode grace period
/dev/sda5        7days                7 days

Podemos establecer el periodo de gracia pro bloques o por inodos. Lo establecemos según nuestras necesidades y al salir grabando se actualizan las BBDD del sistema con los nuevos datos.

Iniciando y parando el sistema de cuotas

Una vez que hemos configurado los sistemas de ficheros sobre los cuales tendremos cuotas y hemos establecido dichas cuotas tendremos que arrancar el sistema de cuotas:

[root@sal]# quotaon -av
/dev/sda5 [/home]: group quotas turned on
/dev/sda5 [/home]: user quotas turned on
[root@sal]# 

Los flags más habituales son:

  • a que inicializa las cuotas en todos los sistemas de ficheros que las tienen activadas.

  • v modo verbose.

  • u unicamente inicializa las cuotas de usuario.

  • g unicamente inicializa las cuotas de grupo.

Es posible inicializar las cuotas sobre un determinado sistema de ficheros:

[root@sal]# quotaon -v /opt
/dev/sda6 [/opt]: group quotas turned on
/dev/sda6 [/opt]: user quotas turned on
[root@sal]# 

Podemos parar el sistema de cuotas con el comando quotaoff.

Sugerencia

man quotaoff

Chequeando el sistema de cuotas

Utilizaremos para ello el comando quotacheck. Este comando se utiliza para chequear y actualizar el uso de espacio en disco en los sistemas de ficheros y para repar los ficheros de cuotas quota.user y quota.group.

Por defecto sólo se comprueban las cuotas de usuario, si se quieren comprobar las de grupo habrá que utilizar g.

Aviso

Cuando se chequeen las cuotas de disco es recomendable hacerlo con el sistema de cuotas parado.

Aviso

Es aconsejable que cuando se arranque el sistema se comprueben los sistemas de ficheros con cuotas antes de inicializar el sistema de cuotas.

Los flags más habituales son:

  • a comprueba todos los sistemas de ficheros montados con cuotas establecidas.

  • g comprueba las cuotas de grupo. No se comprueban a menos que se use este flag.

  • i trabaja en modo interactivo.

  • u comprueba las cuotas de usuario. Acción por defecto.

  • v modo verbose. Es aconsejable utilizar este flag.

Reporting de cuotas

Mediante el uso de repquota es posible obtener informes sobre el estado de las cuotas del sistema. Los flags más significativos son:

  • a informe sobre todos los sistemas de ficheros con cuotas presentes en /etc/fstab.

  • g informe sobre las cuotas de grupo.

  • u informe sobre las cuotas de usuario.

[root@sal]# repquota -a
*** Report for user quotas on device /dev/sda5
Block grace time: 7days; Inode grace time: 7days
                  Block limits                  File limits
User       used   soft   hard   grace    used    soft   hard   grace
--------------------------------------------------------------------
root   --    20      0      0               4       0      0
pcm -- 10848  15000  25000             732    2000   3500
[root@sal]# 

Sugerencia

Es posible sacar informes sobre un único sistema de ficheros pasandole el punto de montaje o el dispositivo físico como argumento a repquota.