Instalar y configurar cuotas de disco en Ubuntu Server 20.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 20.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…

El artículo de hoy lo hemos desarrollado sobre Ubuntu Server pero, para ponerlo en práctica sobre la versión de escritorio, solo tienes que abrir una ventana de terminal. Por ejemplo, usando la combinación de teclas Alt + Control + T.

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 20.04 LTS, el soporte para cuotas está incluido en el núcleo.

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

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-001

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

sudo apt install quota quotatool

Escribimos el comando y pulsamos la tecla Intro. Después, deberemos autenticarnos para obtener privilegios administrativos

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-002

Como se necesitan instalar algunas dependencias, el sistema nos solicita nuestra aprobación.

Podemos pulsar la tecla Y o, sencillamente, pulsar Intro, ya que la respuesta afirmativa es la predeterminada.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-003

Después de esto, la instalación continuará unos instantes más. Solo tenemos que esperar a que concluya.

Si todo es correcto, estamos listos para comenzar

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-004

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.

sudo nano /etc/fstab

Escribimos el comando y pulsamos la tecla Intro.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-005

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

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-006

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

/dev/disk/by-uuid/49115910-73ca-41ef-a5d8-183147b5de99 /home ext4 defaults 0 0

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

/dev/disk/by-uuid/49115910-73ca-41ef-a5d8-183147b5de99 /home ext4 defaults,usrquota,grpquota 0 0

Cuando terminemos de hacer los cambios anteriores, salimos del editor pulsando las teclas Ctrl + X.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-007

Al hacerlo, el editor nos preguntará si queremos guardar los cambios que hemos realizado.

Para contestar afirmativamente, pulsamos la tecla Y.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-008

A continuación, nos da la oportunidad de cambiar el nombre del archivo, para no perder su valor anterior.

Como nosotros queremos sobrescribirlo, pulsamos la tecla Intro.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-009

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

Si no obtenemos ningún error, es indicativo de que el comando ha funcionado correctamente.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-010

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 en lugar de montar el volumen has reiniciado el equipo, aquí recibirás un error, pero sólo significa que las cuotas ya se habían activado.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-011

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.

En nuestro caso, como nuestro directorio activo es nuestra carpeta raíz (/home/usuario), tenemos que mostrar el nivel superior (..) Por lo tanto, escribiremos algo así:

ls ../

Al pulsar la la tecla Intro comprobamos que los archivos se han creado correctamente.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-012

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

Escribimos el comando y pulsamos la tecla Intro.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-013

Si hubiésemos querido asignar valores a todo un grupo, bastaría haber escrito 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.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-014

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.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-015

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

Como antes, escribimos el comando y pulsamos la tecla Intro.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-016

Cuando se muestra el contenido del archivo, comprobamos que el valor predeterminado es idéntico para bloques e i-nodos.

En este caso, son 7 días.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-017

Para cambiar el valor del periodo actuaremos como estableciendo las cuotas. Incluso podemos asignar valores diferentes para ambos datos.

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

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-018

Aunque aquí no ocurre, en algunas configuraciones, el comando edquota cambia 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.

    Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-019

    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.

    Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-020

    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.

    Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-021

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

El sistema informa de que se ha excedido la cuota.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-022

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

De nuevo, escribimos el comando y pulsamos la tecla Intro.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-023

Ahora podríamos, por ejemplo, realizar la copia que hemos intentado más arriba…

…y funcionaría sin problemas.

Instalar-y-configurar-cuotas-de-disco-en-Ubuntu-Server-20-04-LTS-024

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.