Instalar y configurar cuotas de disco en Ubuntu 14.04 LTS

Publicado por P. Ruiz en

Un administrador de sistemas que tiene a su cargo servidores de red con múltiples usuarios, más pronto que tarde necesitará controlar la cantidad de información que pueden almacenar dichos usuarios. Ese es el objetivo de las cuotas de disco (en inglés, disk quotas)

Las cuotas se establecen para cada volumen (que habitualmente se corresponde con una partición) de forma independiente y pueden fijarse tanto para usuarios individuales como para grupos.

El propietario y el grupo al que éste pertenece, se almacenan en los metadatos de cada archivo del sistema, lo que hace que dicha información sea fácilmente accesible para el sistema de cuotas.

Los pasos que deberemos seguir para hacer uso de las cuotas de disco en Ubuntu 14.04 LTS son los siguientes:

  • Instalar los paquetes necesarios.

  • Activar las cuotas en el sistema de archivos y volver a montarlo.

  • Crear los archivos de cuota y la tabla de uso de espacio compartido.

  • Configurar cuotas para usuarios y grupos.

  • Establecer un valor para el periodo de gracia.

Una vez que tenemos claros los objetivos, comencemos…

Instalar los paquetes necesarios

Aunque la mayoría de distribuciones Linux incorporan en su núcleo (kernel) la capacidad para manejar cuotas, puede que alguna de ellas no lo haga.

Si nos encontráramos en ese caso, sería preciso volver a compilar el núcleo del sistema (cosa que, de momento, no forma parte de nuestros objetivos). En cualquier caso, si estás utilizando una distribución diferente de Ubuntu, puedes comprobar que soporta cuotas ejecutando el siguiente comando:

dmesg | grep quotas

El comando dmesg (diagnostic message) muestra los mensajes generados por el proceso de arranque. Lo que hacemos con este comando es enviar la salida a grep para localizar la línea que hace referencia a las cuotas durante el arranque. Lógicamente, si al ejecutar el comando no aparece ningún texto, significa que el núcleo no está preparado para manejar cuotas.

Si utilizas Ubuntu Server 14.04 LTS, el soporte para cuotas está incluido en el núcleo.

Como esperábamos, Ubuntu 14.04 LTS sí incluye soporte para cuotas.

Una vez realizada esta comprobación, procederemos a instalar los paquetes necesarios para manejar las cuotas:

sudo apt install quota quotatool

Si todo es correcto, estamos listos para comenzar

Activar las cuotas en el sistema de archivos y volver a montarlo

Para que el sistema pueda gestionar los valores de cuota de un dispositivo de almacenamiento, éste debe montarse teniendo en cuenta dicha característica.

Los comandos mount y umount obtienen la información necesaria para montar cualquier dispositivo o partición del archivo fstab (file systems table). Por lo tanto, necesitaremos editar este fichero para incorporar la nueva característica.

Como es habitual, usamos el editor nano para editar el archivo /etc/fstab con privilegios de superusuario.

En un momento, tendremos el contenido del archivo /etc/fstab en la pantalla.

En nuestro caso, asignaremos cuotas al directorio /home del sistema, por lo que buscaremos la línea que hace referencia al mismo:

UUID=0f953ff4-3a53-49c3-9f93-6e6f3e0125b4 /home           ext4    defaults        0       2

Una vez localizada, incluiremos los argumentos que informan al sistema de que el volumen indicado podrá tener cuotas para los usuarios y para los grupos (usrquota y grpquota).

UUID=0f953ff4-3a53-49c3-9f93-6e6f3e0125b4 /home           ext4    defaults,usrquota,grpquota        0       2

Cuando terminemos de hacer los cambios anteriores, salimos del editor pulsando las teclas Ctrl + X y asegurándonos de guardar los cambios.

Para que el sistema de cuotas esté activo, sólo nos quedará montar de nuevo la partición sobre la que se aplicarán las cuotas. Esto podemos conseguirlo fácilmente con el siguiente comando:

sudo mount -o remount,rw /home

Aunque también puedes, sencillamente, reiniciar el sistema.

Crear los archivos de cuota y la tabla de uso de espacio compartido

El siguiente paso consistirá en preparar al sistema de archivos para que admita las cuotas. Para lograrlo, utilizaremos el comando quotacheck, que se encargará de examinar el sistema de archivo que le indiquemos y crear una tabla del uso actual del disco. Después, la compara con la información almacenada en los archivos de cuota de disco del sistema de archivos, actualizándolos cuando sea necesario.

El comando quotacheck permite comprobar tanto los usuarios como los grupos.

En nuestro caso, como es la primera vez que usamos las cuotas, los archivos de cuota no existen en el sistema de archivos. Por este motivo, usaremos el argumento -c, que permite crearlos de forma automática (en realidad, han podido crearse automáticamente si reiniciaste al final del punto anterior).

sudo quotacheck -cgu /home

Los argumentos -g y -u hacen que se comprueben tanto los grupos como los usuarios.

Si obtenemos un error como el que se observa en la imagen sólo significa que las cuotas ya se han activado.

También podemos comprobar que los archivos de cuotas (aquota.user y aquota.group) se han creado correctamente en el directorio raíz del volumen.

Configurar cuotas para usuarios y grupos

Para asignar cuotas a los usuarios o grupos usaremos el comando edquota. Por ejemplo, para asignar valores de cuota a la cuenta usuario, escribiríamos lo siguiente:

sudo edquota -u usuario

Para asignar valores a todo un grupo, bastaría con escribir así el comando anterior:

sudo edquota -g grupo

Incluso, en lugar del nombre de un usuario o un grupo, podemos incluir sus UID o PID correspondientes.

En realidad, el comando edquota abre el editor nano con la información correspondiente a la cuota del usuario o grupo que hayamos indicado. Si preferimos un editor diferente a nano, basta con indicarlo en la variable de entorno $EDITOR.

Al ejecutar edquota, la pantalla aparecerá como en esta imagen.

El editor nos muestra la siguiente información, ordenada en columnas:

  • Columna 1 (Sist. arch.): La partición para la que tenemos activadas las cuotas. En nuestro ejemplo es /dev/sda6, pero en otro equipo puede ser distinta.

  • Columna 2 (bloques): Indica el número de bloques que está usando el usuario en estos momentos.

  • Columna 3 (blando): Indica un valor flexible en cuanto al número de bloques utilizados. Este límite podrá sobrepasarse durante un determinado tiempo.

  • Columna 4 (duro): Representa el límite rígido de bloques que podrá usar el usuario (o grupo). Cuando el espacio ocupado por el usuario alcance el valor indicado en esta columna, ya no podrá guardar más información.

  • Columna 5 (inodos): Indica el número de i-nodos que está usando el usuario en estos momentos.

  • Columna 6 (blando): Indica un valor flexible en cuanto al número de archivos y/o directorios utilizados. Como en el caso de los bloques, el límite podrá sobrepasarse durante un tiempo.

  • Columna 7 (duro): Representa el límite rígido de i-nodos que podrá usar el usuario (o grupo). Cuando el usuario alcance el número de archivos y/o directorios indicado en esta columna, ya no podrá crear archivos y/o directorios nuevos.

El tiempo que el usuario puede exceder un límite flexible suele llamarse periodo de gracia.

Para eliminar cualquier límite, basta con poner su valor a cero.

Cuando acabemos de establecer los valores adecuados, saldremos del editor pulsando las teclas Ctrl + X y asegurándonos de guardar los cambios.

La asignación de cuotas a grupos funciona de forma idéntica a la de los usuarios.

Establecer un valor para el periodo de gracia

Como hemos comentado antes, el periodo de gracia representa el tiempo durante el cual podrá sobrepasarse un límite flexible antes de que se convierta en rígido.

El tiempo de gracia puede expresarse en días, horas, minutos o segundos.

Para modificar el valor predeterminado del periodo de gracia sólo debemos ejecutar el siguiente comando:

sudo edquota -t

Para cambiar el valor del periodo actuaremos como estableciendo las cuotas.

Como puede verse, incluso podemos asignar valores diferentes para los bloques y para los i-nodos.

Una vez realizadas las modificaciones, salimos del editor pulsando las teclas Ctrl + X y asegurándonos de guardar los cambios.

El comando edquota es capaz de cambiar las unidades de tiempo en inglés, por su traducción al español, para mostrarnos el archivo. Sin embargo, luego no es capaz de hacer la conversión contraria. Esto significa que, cuando escribamos los valores para los periodos de gracia, deberemos utilizar las unidades de tiempo en inglés (days, hours, minutes o seconds)

Comprobar que las cuotas funcionan

Si, en el futuro, necesitamos comprobar qué cuota le establecimos a un determinado usuario, sería tan fácil como usar el comando edquota y volver a editar el fichero de definición. Sin embargo, disponemos de otras opciones que nos evitan el riesgo de modificarlo por accidente:

  • El comando quota: Ofrece la información relativa a las cuotas de un usuario o grupo determinado. La sintaxis sería como en el siguiente ejemplo:

    sudo quota -u usuario

    Salida del comando quota.

    Lógicamente, tendríamos que sustituir el nombre de la cuenta de usuario por la que queramos consultar.

    Como puedes suponer, para consultar la cuota de un grupo, la sintaxis sería así:

    sudo quota -g grupo

    También podemos omitir los argumentos -u o -g. Si lo hacemos, el comando supondrá que estamos consultando la cuota de un usuario.

  • El comando repquota: muestra un informe sobre el grado de ocupación y las cuotas en una determinada partición. La sintaxis sería así:

    sudo repquota /home

    Salida del comando repquota.

    Un detalle que pasa casi desapercibido en el informe anterior son los dos guiones () que hay después del nombre de usuario. El primero indica que aún no se ha excedido el límite flexible para los bloques y el segundo que no se ha excedido el límite flexible en los i-nodos. Cuando se exceda cualquiera de ellos, su guión se convertirá en un signo más (+). Además, también aparecerá el periodo de gracia que aún tendrá el usuario para seguir excediendo el límite (en el caso de la imagen siguiente, 7 días).

    Como puedes intuir, este es un mecanismo muy sencillo para identificar a los usuarios que han excedido alguno de sus límites, cuando el número de usuarios es elevado.

    La cuenta usuario ha excedido su límite flexible de bloques.

Por último, cuando un usuario trate de sobrepasar su límite rígido, recibirá un error y la operación no podrá completarse.

Cuando el usuario muestre los detalles del error, comprobará que ha excedido su cuota en disco.

Desactivar y volver a activar las cuotas.

En ocasiones, podemos necesitar desactivar las cuotas de forma transitoria, por ejemplo para realizar alguna operación administrativa, y volver a activarlas más tarde.

Desactivarlas será tan sencillo como escribir el siguiente comando:

sudo quotaoff /home

Ahora podríamos, por ejemplo, realizar la copia que hemos intentado más arriba y funcionaría sin problemas.

Como podemos comprobar, hemos excedido el límite flexible y hemos alcanzado el límite rígido.

Para volverlas a activar, bastará con utilizar el comando quotaon:

sudo quotaon /home

 

Recuerda que al reiniciar el sistema operativo, las cuotas se habilitan de forma automática. Si piensas desactivarlas de forma definitiva deberías usar el comando edquota y poner los límites a cero.

Y hasta aquí el presente artículo. Como siempre, espero que te resulte útil.