Las cuotas de disco limitan cuánto espacio y cuántos archivos puede ocupar cada usuario o grupo en un sistema de archivos. Son útiles en servidores compartidos por varios usuarios, como un servidor SFTP, un hosting con varias cuentas o un servidor de archivos, donde un solo usuario no debería poder llenar el disco de todos. En este tutorial activarás las cuotas en un sistema de archivos ext4 de Ubuntu 24.04, asignarás límites a usuarios y grupos, comprobarás que se aplican y aprenderás a revisar el uso.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - Un sistema de archivos ext4 donde aplicar las cuotas. En los ejemplos se usa la raíz
/, que es donde están los directorios personales en una instalación estándar. Si prefieres aplicarlas a un disco de datos, sustituye/por su punto de montaje (por ejemplo/datos). - Acceso a la consola del proveedor por si fuera necesario recuperar el arranque tras editar
/etc/fstab.
Algunos conceptos que usarás en toda la guía:
| Término | Significado |
|---|---|
| Límite de bloques | Espacio máximo, expresado en bloques de 1 KiB (o con sufijos M, G). |
| Límite de inodos | Número máximo de archivos y directorios. |
| Límite blando (soft) | Puede superarse temporalmente, durante el periodo de gracia. |
| Límite duro (hard) | No puede superarse nunca: la escritura falla con Disk quota exceeded. |
| Periodo de gracia | Tiempo durante el que se tolera superar el límite blando. Al agotarse, el límite blando pasa a comportarse como duro. |
Paso 1: Instalar las herramientas de cuotas
Instala el paquete quota, que incluye quotacheck, quotaon, setquota, edquota y repquota:
sudo apt update
sudo apt install quota
Comprueba la versión instalada:
quota --version
Quota utilities version 4.06.
Paso 2: Comprobar los módulos del kernel
El formato de cuotas que usarás necesita los módulos quota_v2 y quota_tree. Comprueba que existen para el kernel en ejecución:
find /lib/modules/$(uname -r) -type f -name 'quota_v*.ko*'
/lib/modules/6.8.0-45-generic/kernel/fs/quota/quota_v2.ko.zst
/lib/modules/6.8.0-45-generic/kernel/fs/quota/quota_v1.ko.zst
Si el comando no devuelve nada, los módulos están en el paquete de módulos extra de tu kernel. Instálalo y reinicia para asegurarte de que el kernel y los módulos coinciden:
sudo apt install linux-modules-extra-$(uname -r)
sudo reboot
Paso 3: Activar las opciones de cuota en fstab
Las cuotas se activan por sistema de archivos con las opciones de montaje usrquota (cuotas de usuario) y grpquota (cuotas de grupo). Haz una copia de /etc/fstab y ábrelo:
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
Localiza la línea del sistema de archivos y añade las dos opciones a las que ya tiene, separadas por comas. En una imagen cloud de Ubuntu la línea de la raíz quedaría así:
LABEL=cloudimg-rootfs / ext4 discard,errors=remount-ro,usrquota,grpquota 0 1
No cambies el resto de campos. Valida el archivo y vuelve a montar el sistema de archivos para aplicar las opciones sin reiniciar:
sudo findmnt --verify
sudo systemctl daemon-reload
sudo mount -o remount /
Comprueba que las opciones están activas:
findmnt -no OPTIONS /
rw,relatime,discard,errors=remount-ro,usrquota,grpquota
Paso 4: Crear los archivos de cuota y activarlas
quotacheck recorre el sistema de archivos, calcula el uso actual de cada usuario y grupo y crea los archivos aquota.user y aquota.group en la raíz del sistema de archivos:
sudo quotacheck -ugm /
Las opciones son -u para usuarios, -g para grupos y -m para no intentar volver a montar el sistema de archivos en solo lectura, algo imposible en la raíz. En discos grandes puede tardar unos minutos. Comprueba que se crearon los archivos:
ls -l /aquota.*
-rw------- 1 root root 7168 sep 25 11:02 /aquota.group
-rw------- 1 root root 7168 sep 25 11:02 /aquota.user
Activa las cuotas:
sudo quotaon -v /
/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on
Al arrancar, el servicio quota.service del paquete quota vuelve a activarlas automáticamente para todos los sistemas de archivos con estas opciones en fstab. Puedes consultar el estado en cualquier momento con:
sudo quotaon -pa
Paso 5: Asignar una cuota a un usuario
setquota fija los límites en una sola línea, con el formato setquota -u usuario bloques_blando bloques_duro inodos_blando inodos_duro sistema_de_archivos. Un 0 significa sin límite. Crea un usuario de prueba y dale 1 GB de límite blando y 1,2 GB de límite duro, sin límite de archivos:
sudo adduser --disabled-password --gecos "" usuario_prueba
sudo setquota -u usuario_prueba 1G 1200M 0 0 /
Consulta la cuota del usuario. La opción -s muestra las cifras en unidades legibles:
sudo quota -vs usuario_prueba
Disk quotas for user usuario_prueba (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/vda1 28K 1024M 1200M 7 0 0
Si prefieres editar los límites de forma interactiva, sudo edquota -u usuario_prueba abre un editor con la misma información; ahí los bloques se expresan en KiB.
Paso 6: Comprobar que la cuota se aplica
Como el usuario de prueba, intenta crear un archivo mayor que su límite duro:
sudo -u usuario_prueba fallocate -l 1500M /home/usuario_prueba/grande.bin
fallocate: fallocate failed: Disk quota exceeded
Crea ahora un archivo que supere el límite blando sin llegar al duro:
sudo -u usuario_prueba fallocate -l 1100M /home/usuario_prueba/medio.bin
sudo quota -vs usuario_prueba
Disk quotas for user usuario_prueba (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/vda1 1101M* 1024M 1200M 6days 8 0 0
El asterisco indica que se ha superado el límite blando, y la columna grace muestra el tiempo que queda antes de que se bloquee la escritura. Borra el archivo de prueba:
sudo rm /home/usuario_prueba/medio.bin
Paso 7: Asignar cuotas de grupo y ajustar el periodo de gracia
Las cuotas de grupo suman el uso de todos los archivos que pertenecen a ese grupo, independientemente de su propietario. Para limitar el grupo desarrollo (créalo antes con sudo groupadd desarrollo si no existe) a 10 GB blandos y 12 GB duros, con un máximo de 200 000 archivos:
sudo setquota -g desarrollo 10G 12G 180000 200000 /
sudo quota -vsg desarrollo
El periodo de gracia por defecto es de 7 días y es común a todo el sistema de archivos. Para cambiarlo, usa setquota -t con los segundos para bloques e inodos. Este ejemplo lo fija en 3 días (259 200 segundos) para usuarios y para grupos:
sudo setquota -t -u 259200 259200 /
sudo setquota -t -g 259200 259200 /
Para aplicar a muchos usuarios la misma cuota, configura uno como plantilla y copia sus límites a otros usuarios existentes con edquota -p:
sudo edquota -p usuario_prueba -u ana luis marta
Paso 8: Revisar el uso de las cuotas
repquota muestra un informe con todos los usuarios que tienen uso o límites en el sistema de archivos:
sudo repquota -s /
*** Report for user quotas on device /dev/vda1
Block grace time: 3days; Inode grace time: 3days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 11.2G 0K 0K 98k 0 0
usuario_prueba -- 28K 1024M 1200M 7 0 0
Los dos guiones tras el nombre indican el estado de los límites de espacio y de archivos: - significa dentro del límite y + que se ha superado el blando. Añade -g para ver las cuotas de grupo. Cada usuario puede consultar la suya sin sudo ejecutando quota -s.
Solución de problemas
quotaon: using //aquota.user on /dev/vda1 [/]: No such process o Quota format not supported in kernel: faltan los módulos quota_v2. Repite el paso 2 e instala linux-modules-extra para tu kernel.
quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option: las opciones usrquota,grpquota no están activas. Comprueba findmnt -no OPTIONS / y vuelve a montar con sudo mount -o remount /.
Las cuotas no se aplican tras un reinicio: comprueba que las opciones siguen en /etc/fstab y el estado del servicio con systemctl status quota. Actívalas manualmente con sudo quotaon -v /.
Un usuario no puede escribir con espacio disponible: puede haber alcanzado el límite de inodos. Revisa la columna files en sudo quota -vs usuario.
Las cifras no cuadran con el uso real: si el sistema se apagó de forma incorrecta, recalcula el uso desactivando las cuotas, ejecutando de nuevo quotacheck y reactivándolas: sudo quotaoff -v /, sudo quotacheck -ugm / y sudo quotaon -v /.
Conclusión
Has activado las cuotas de usuario y de grupo en un sistema de archivos ext4 de Ubuntu 24.04, has asignado límites blandos y duros, has comprobado que se aplican y sabes revisar el uso con repquota. Como siguientes pasos, puedes establecer una cuota base para cada usuario nuevo copiándola desde un usuario plantilla, aplicar cuotas a un disco de datos dedicado en lugar de la raíz, o incluir repquota en un informe periódico para detectar usuarios que se acercan a su límite.
