Establecer cuotas de disco a usuarios en Debian
Vamos a ver como establecer cuotas de disco a usuarios, y grupos de usuarios, en Debian 11. Desde grandes empresas a incluso aulas, pueden requerir de este sistema, si el almacenamiento es compartido.
Sumario
- Que es un sistema de cuotas
- Implementación
- Activación del sistema de cuotas
- Creación de cuotas
- Configuración de cuotas para un usuario
- edquota
- Comprobar las cuotas de todos los usuarios
- Activación y desactivación de cuotas
Qué es un sistema de cuotas
Cuando múltiples usuarios comparten un sistema de almacenamiento, con el tiempo, se van realizando instalaciones y guardando todo tipo de datos, lo que hace necesario implementar un sistema de cuotas de uso de disco, para usuarios o grupos, y así evitar que algunos de ellos monopolicen este espacio, llenando el disco y causando problemas a otros usuarios.
El almacenamiento en disco se puede limitar mediante la implementación de cuotas de disco. Estas cuotas las podemos configurar para usuarios individuales o para grupos de usuarios. Las podemos establecer indicando el tamaño (número de bloques) o determinando el número de ficheros que pueden ser creados (inodos). Como los inodos contienen la información de los ficheros «metadatos», lo podemos utilizar para establecer el número de ficheros que cada usuario puede crear.
Implementación
Para implementar este sistema nos tenemos que asegurar de que el núcleo del sistema operativo es compatible (compilado con la opción CONFIG_QUOTA). En el caso de Debian lo tenemos disponible.
sudo dmesg | grep quotas

Encontramos el «software» de administración de cuotas en el paquete Debian «quota». Para instalarlo ejecuta
sudo apt update sudo apt install quota

Y comprobamos la versión
quota --version

El siguiente paso es configurar el sistema de ficheros que queramos para establecer cuotas.
Activación del sistema de cuotas
Para activar el sistema de cuotas editamos el fichero de configuración «/etc/fstab» (file systems table), donde indicamos las opciones de todos los sistemas de ficheros que ha de montar en el arranque.
sudo nano /etc/fstab
Lo más normal, y lo recomendado, es aplicar las cuotas a «/home», aunque también podemos optar por crear un nuevo directorio como, por ejemplo, «/datos», o aplicarlo a cualquier otro sistema de ficheros, incluido el directorio raiz «/».
En este caso lo aplicaré a «/home». Busco en «fstab», la linea que contiene el punto de montaje que quiero y añado los argumentos que indican al sistema que el volumen podrá tener cuotas, tanto para usuarios, como para grupos: «usrquota» y «grpquota».
# /home was on /dev/sda6 during installation UUID=ae926a12-d731-4d33-b5a2-e156bbee3725 /home ext4 defaults 0 2
al que añadiremos los argumentos y quedará como sigue
# /home was on /dev/sda6 during installation UUID=ae926a12-d731-4d33-b5a2-e156bbee3725 /home ext4 defaults,usrquota,grpquota 0 2
La configuración anterior nos permitirá habilitar cuotas, tanto a un usuario «usrquota» como a un grupo de usuarios «grpquota» en el sistema de ficheros elegido. Podemos utilizar uno, otro o ambos a la vez. Fíjate que entre las opciones no hay espacios «defaults,usrquota,grpquota», si los pones no funcionará.

Solo nos falta montar el sistema de ficheros modificado
sudo mount -o remount /home
Verificamos las opciones con que se ha montado el volumen consultando «/proc/mounts»
cat /proc/mounts | grep ' /home '

Al reiniciar el equipo se actualizarán las cuotas cuando no exista actividad en el disco, condición necesaria para poder contabilizar apropiadamente el espacio en disco ya utilizado.
Creación de cuotas
Ahora que ya tenemos el sistema de ficheros «/home» configurado para soportar cuotas de disco, utilizamos la herramienta «quotacheck» diseñada para crear, verificar o modificar el control de las cuotas.
sudo quotacheck -ugm /home
Las opciones disponibles para el comando son:
- -u – user, verifica soporte de cuotas para usuarios.
- -g – group, verifica soporte de cuotas para grupos.
- -m – no-remount, evita que el sistema se vuelva a montar como de solo lectura. Se utiliza si el sistema de ficheros está montado y en uso.
- -v – verbose, muestra el progreso por la salida estandar.
- -a – all, Verifica todos los sistemas de ficheros montados localmente con cuotas activadas.
Este comando crea los ficheros «/aquota.user» y «/aquota.group», que contienen información sobre los límites y el uso del sistema de ficheros. Deben existir antes de activar la supervisión de cuotas.
ls /home

Activamos el sistema de cuotas,
sudo quotaon -v /home # o sudo quotaon -a

Configuración de cuotas para un usuario
El sistema de cuotas nos permite establecer los limites de dos formas:
- Estableciendo dos límites, llamados «blando» y «duro», que hacen referencia al número de bloques consumidos. Si el sistema de ficheros se creó con un tamaño de bloque de 1 kibibyte, los 1024 bytes disponibles de cada bloque, solo se pueden asignar a un fichero.
- Estableciendo dos límites «blando» y «duro», que hacen referencia al número de inodos utilizados. Cada fichero ocupa al menos un inodo para almacenar información sobre el mismo (permisos, propietario, último acceso, etc.), por tanto, es un límite en el número de ficheros de usuario.
Y para establecer estas cuotas tenemos el comando que vemos a continuación, «edquota».
edquota
Con este comando editamos las cuotas. Por ejemplo
sudo edquota -u javier # o sudo quota javier
Con la opción «-u», indicamos que se edite una cuota de usuario, si usáramos «-g» sería una cuota de grupo. Obtenemos la siguiente salida
Disk quotas for user javier (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda6 21556 0 0 320 0 0

Aquí veremos el nombre de usuario y uid, los sistemas de ficheros que tienen cuotas habilitadas, y los bloques e inodos usados por el usuario. Si establecemos la cuota por inodos, limitamos el número de ficheros que puede crear un usuario independientemente del espacio de disco usado. Lo más habitual será establecer las cuotas por bloques. En Debian, normalmente, un bloque equivale a 1 kilobyte. Vemos como hacerlo.
En la captura anterior vemos que el usuario «javier» está usando 21556 bloques o 21556 KB en el sistema de ficheros «/dev/sda6» y en este caso los limites «blando» y «duro» están desactivados (valor 0).
Ahora podemos modificar los límites establecidos. Cuando un usuario excede el límite blando superando la cuota, no se le impide el consumo de más espacio (bloques o inodos), se le otorga, de forma predeterminada, siete días para limpiar y recuperar el uso por debajo del límite. Si no lo hace, se tratará como un límite duro al terminar dicho plazo. Se puede modificar el periodo de gracia con el comando «edquota -t».
Con el límite duro, toda posibilidad de creación de nuevos bloques o inodos se detiene inmediatamente. El resultado es el mismo que cuando tenemos un disco completamente lleno, las escrituras fallarán, los ficheros temporales no se podrán crear y el usuario comenzará a ver advertencias y errores mientras realiza tareas comunes.
Vamos a darle otros valores para tener una cuota de bloque con un límite blando de 100 MB y un límite duro de 110 MB.
Disk quotas for user javier (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sda6 21556 100 110 320 0 0

Guardamos y cerramos el fichero. Y comprobamos la nueva cuota ejecutando
sudo quota -vs javier

Si queremos permitir que los usuarios puedan ver el estado de sus cuotas sin privilegios de «sudo», tendremos que dar permisos a los ficheros o crear un grupo y darle los permisos. Luego tendremos que incluir a los usuarios que queramos en el grupo creado. Aquí puedes consultar más información sobre permisos.
Comprobar las cuotas de todos los usuarios
Para el administrador del sistema es muy sencillo comprobar el estado de las cuotas de todos los usuarios. Para ello disponemos del comando «repquota».
sudo repquota -s /home o sudo repquota -a
En mi caso, obtenemos la salida
javier@javier-weblinus:~$ sudo repquota -s /home *** Report for user quotas on device /dev/sda6 Block grace time: 7days; Inode grace time: 7days Space limits quotaon -aug File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20K 0K 0K 2 0 0 javier +- 21556K 100K 110K 6days 320 0 0 javier@javier-weblinus:~$

Con la opción «-s», le pedimos que la salida sea en datos legibles para los humanos. Pueden aparecer usuarios del sistema que, lógicamente, no tendrán cuotas establecidas.
En la captura anterior vemos el tiempo de gracia establecido (7 días), y en la columna «grace», mostraría cuánto tiempo les queda para volver por debajo del límite, a los usuarios que hayan rebasado el límite blando.
La marca «–» que vemos después del nombre del usuario es una forma rápida de indicar si se han superado los límites. Si el usuario ha superado el límite blando aparece el símbolo «+» en lugar de «-». El primer «-» representa el limite de bloque, y el segundo, el límite de inodo. La marca «–» que vemos después del nombre del usuario es una forma rápida de indicar si se han superado los límites.
Si queremos definir una cuota automáticamente para usuarios nuevos, tenemos que configurar un usuario patrón con «edquota», e indicar el nombre de usuario en la variable «QUOTAUSER» en el fichero «/etc/adduser.conf». Cada vez que creemos un usuario con «adduser», se le aplicará esa configuración.
Activación y desactivación de cuotas
Para desactivar las cuotas en el sistema de ficheros se utiliza el comando,
sudo quotaoff -aug
donde «-u» permite desactivar las cuotas de usuario, y «-g» permite desactivar las cuotas de grupo. Si no se indica ninguna opción, por defecto, se desactivarán las cuotas de usuario.
Para activar nuevamente las cuotas, se utiliza el comando «quotaon» con las mismas opciones.
sudo quotaon -aug
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.