Cómo establecer cuotas de sistema de archivos en Debian 10

Introducción

Las cuotas se usan para limitar la cantidad de espacio en disco que un usuario o grupo puede usar en un sistema de archivos. Sin tales límites, un usuario podría llenar el disco de la máquina y causar problemas a otros usuarios y servicios.

En este tutorial instalaremos herramientas de línea de comandos para crear e inspeccionar cuotas de disco, luego estableceremos una cuota para un usuario de ejemplo.

Prerrequisitos

Este tutorial asume que estás conectado a un servidor Debian 10, con un usuario no sudo habilitado para sudo, como se describe en la Configuración básica de un servidor con Debian 10.

Las técnicas en este tutorial generalmente deberían funcionar en distribuciones de Linux que no sean Debian, pero pueden requerir alguna adaptación.

Paso 1 – Instalación de las herramientas de cuota (quota)

Para establecer y verificar las cuotas, primero necesitamos instalar las herramientas de línea de comandos de cuotas usando apt. Actualizaremos nuestra lista de paquetes, luego instalaremos el paquete:

Puedes verificar que las herramientas estén instaladas ejecutando el comando quota y solicitando su información de versión:

Está bien si tu salida muestra un número de versión ligeramente diferente.

A continuación, actualizaremos las opciones mount de nuestro sistema de archivos para habilitar las cuotas en nuestro sistema de archivos root.

Paso 2 – Actualizar las opciones de montaje del sistema de archivos

Para activar las cuotas en un sistema de archivos en particular, necesitamos montarlo con algunas opciones relacionadas con las cuotas especificadas. Hacemos esto actualizando la entrada del sistema de archivos en el archivo de configuración /etc/fstab.

Debes abrir ese archivo en tu editor de texto favorito:

El contenido del archivo será similar al siguiente:

Este archivo fstab es de un servidor virtual. En una computadora de escritorio o portátil, probablemente se verá un poco diferente el archivo fstab.

Empero, en la mayoría de los casos vas a tener una /el root del sistema de archivos que representa la totalidad de tu espacio de disco.

Actualiza la línea que apunta al sistema de archivos root agregando las siguientes opciones:

Agregarás las nuevas opciones al final de las opciones existentes, asegurándote de separarlas todas con una coma y sin espacios. El cambio anterior nos permitirá habilitar las cuotas de usuario (usrquota) y de grupo (grpquota) en el sistema de archivos. Si solo necesitas una u otra, puedes omitir la opción no utilizada.

Tienes que volver a montar el sistema de archivos para que las nuevas opciones surtan efecto:

Nota:

Asegúrate de que no haya espacios entre las opciones enumeradas en tu archivo /etc/fstab. Si colocas un espacio después de la coma (,), verás un error como el siguiente:

Si ves este mensaje después de ejecutar el comando mount anterior, vuelve a abrir el archivo fstab, corrige los errores y repite el comando mount antes de continuar.

Podemos verificar que las nuevas opciones se utilizaron para montar el sistema de archivos observando el archivo /proc/mounts. Aquí, usamos grep para mostrar solo la entrada del sistema de archivos root en ese archivo:

Ten en cuenta las dos opciones que especificamos. Ahora que hemos instalado nuestras herramientas y actualizado las opciones de nuestro sistema de archivos, podemos activar el sistema de cuotas.

Paso 3 – Habilitación de cuotas

Antes de finalmente activar el sistema de cuotas, necesitamos ejecutar manualmente el comando quotacheck una vez:

Este comando crea los archivos /aquota.user/aquota.group. Estos archivos contienen información sobre los límites y el uso del sistema de archivos, y deben existir antes de activar el monitoreo de cuotas. Los parámetros quotacheck que hemos usado son:

  • u: especifica que se debe crear un archivo de cuota basado en el usuario
  • g: indica que se debe crear un archivo de cuota basado en grupos
  • m: deshabilita el montaje del sistema de archivos como de solo lectura mientras se realiza el recuento inicial de cuotas. Remontar el sistema de archivos como de solo lectura dará resultados más precisos en caso de que un usuario guarde activamente archivos durante el proceso, pero no sea necesario durante esta configuración inicial.

Si no necesitas habilitar cuotas basadas en usuarios o grupos, puedes dejar de lado la opción quotacheck correspondiente.

Podemos verificar que se crearon los archivos apropiados listando el directorio root:

Si no incluiste las opciones ug en el comando quotacheck, faltará el archivo correspondiente. Ahora estamos listos para activar el sistema de cuotas:

Nuestro servidor ahora está monitoreando y aplicando cuotas, ¡pero aún no hemos establecido ninguna! A continuación, estableceremos una cuota de disco para un solo usuario.

Paso 4 – Configuración de cuotas para un usuario

Hay algunas formas en que podemos establecer cuotas para usuarios o grupos. Aquí, veremos cómo establecer cuotas con los comandos edquotasetquota.

Uso de edquota para establecer una cuota de usuario

Usamos el comando edquota que significa edit quotas. Editaremos la cuota de usuario de ejemplo cesar:

La opción –u especifica que esta es una usercuota que estaremos editando. Si deseas editar la cuota de un grupo, usa la opción –g en su lugar.

Esto abrirá un archivo en el editor de texto predeterminado, similar a cómo crontab –e abre un archivo temporal para que lo edites. El archivo se verá similar a esto:

Esto listará el nombre de usuario y uid, los sistemas de archivos que tienen cuotas habilitadas, y el uso y los límites basados ​​en bloque e inodo.

Establecer una cuota basada en inodo limitaría cuántos archivos y directorios puede crear un usuario, independientemente de la cantidad de espacio en disco que use.

La mayoría de las personas querrán cuotas basadas en bloques, que limitan específicamente el uso de espacio en disco. Esto es lo que configuraremos.

Nota:

El concepto de bloque está mal especificado y puede cambiar dependiendo de muchos factores, incluida la herramienta de línea de comandos que los informa. En el contexto de establecer cuotas en Debian, es bastante seguro asumir que 1 bloque equivale a 1 kilobyte de espacio en disco.

En la lista anterior, nuestro usuario cesar está utilizando 24 bloques, o 24 KB de espacio en el disco /dev/vda1. Los límites soft y hard están inhabilitados con un valor 0.

Cada tipo de cuota te permite establecer tanto un límite flexible como un límite rígido. Cuando un usuario excede el límite flexible, está por encima de la cuota, pero no se les impide de inmediato que consuman más espacio o inodos.

En cambio, se da un margen de maniobra: el usuario tiene, por defecto, siete días para recuperar el uso de su disco por debajo del límite flexible. Al final del período de gracia de siete días, si el usuario aún supera el límite flexible, se lo tratará como un límite estricto.

Un límite rígido es menos indulgente: toda creación de nuevos bloques o inodos se detiene inmediatamente cuando se alcanza el límite duro especificado.

Esto se comporta como si el disco estuviera completamente sin espacio: las escrituras fallarán, no se podrán crear archivos temporales y el usuario comenzará a ver advertencias y errores mientras realiza tareas comunes.

Actualizaremos a nuestro usuario cesar para que tenga una cuota de bloque con un límite flexible de 100 MB y un límite rígido de 110 MB:

Debes guardar y cerrar el archivo. Para verificar la nueva cuota podemos usar el comando quota:

El comando genera nuestro estado actual de cuota y muestra que nuestra cuota es 100M mientras que nuestro límite es 110M. Esto corresponde a los límites flexible y rígido, respectivamente.

Nota:

Si deseas que tus usuarios puedan verificar sus propias cuotas sin tener acceso sudo, deberás darles permiso para leer los archivos de cuotas que creamos en el Paso 4. Una forma de hacerlo sería hacer un grupo users, haz que el grupo users pueda leer esos archivos y luego asegúrate de que todos tus usuarios también estén ubicados en el grupo.

Para obtener más información sobre los permisos de Linux, incluida la propiedad de usuarios y grupos, debes leer la Introducción a los permisos de Linux.

Uso de setquota para establecer una cuota de usuario

A diferencia edquota, con setquota actualizaremos la información de cuota de nuestro usuario en un solo comando, sin un paso de edición interactivo.

Especificaremos el nombre de usuario y los límites flexibles y rígido para las cuotas basadas en bloques e inodos, y finalmente el sistema de archivos para aplicar la cuota a:

El comando anterior duplicará los límites de cuota basados ​​en bloques de cesar a 200 megabytes y 220 megabytes. Los 0 0 son límites flexibles y rígidos basados ​​en inodo indican que permanecen sin establecer. Esto es necesario incluso si no establecemos cuotas basadas en inodo.

Una vez más, utiliza el comando quota para verificar nuestro trabajo:

Ahora que hemos establecido algunas cuotas, veamos cómo generar un informe de cuotas.

Paso 5 – Generación de informes de cuotas

Para generar un informe sobre el uso actual de la cuota para todos los usuarios en un sistema de archivos en particular, debes usar el comando repquota:

En este caso, estamos generando un informe para el sistema de archivos /root. El comando –s le dice repquota que use números legibles por humanos cuando sea posible.

Hay algunos usuarios del sistema en la lista, que probablemente no tienen cuotas establecidas de forma predeterminada. Nuestro usuario cesar aparece en la parte inferior, con las cantidades utilizadas y los límites flexibles y rígidos.

También ten en cuenta la salida Block grace time: 7days y la columna grace. Si nuestro usuario superó el límite flexible, la columna grace mostrará cuánto tiempo les queda para volver a estar por debajo del límite.

En el siguiente paso actualizaremos los períodos de gracia (grace) para nuestro sistema de cuotas.

Paso 6 – Configuración de un período de gracia para excedentes

Podemos configurar el período de tiempo en el que un usuario puede flotar por encima del límite flexible. Usamos el comando setquota para hacerlo:

El comando anterior establece los tiempos de gracia de bloqueo e inodo en 864000 segundos, o 10 días. Esta configuración se aplica a todos los usuarios, y ambos valores deben proporcionarse incluso si no utilizas ambos tipos de cuota (bloque vs. inodo).

Ten en cuenta que los valores deben especificarse en segundos.

Ejecuta nuevamente repquota para verificar que los cambios surtieron efecto:

Los cambios deben reflejarse inmediatamente en la salida repquota.

Conclusión

En este tutorial instalamos la herramienta de línea de comandos quota, configuramos una cuota basada en bloques para un usuario y generamos un informe sobre el uso de cuotas de nuestro sistema de archivos.

Apéndice: Mensajes de error comunes relacionados con cuotas

Los siguientes son algunos errores comunes que puedes ver al configurar y manipular las cuotas del sistema de archivos.

Este es un error que puedes ver si intentaste activar las cuotas (usando quotaon) antes de ejecutar el comando inicial quotacheck.

El comando quotacheck crea los archivos aquotaquota necesarios para activar el sistema de cuotas. Debes revisar el paso 3 para más información.

Este es el error que verás si ejecuta quota y tu usuario actual no tiene permiso para leer los archivos de cuota para su sistema de archivos.

Tú (o el administrador de tu sistema) deberá ajustar los permisos del archivo de manera adecuada, o utilizarlo cuando sudo ejecute comandos que requieren acceso al archivo de cuota.

Para obtener más información sobre los permisos de Linux, incluida la propiedad de usuarios y grupos, debes leer la Introducción a los permisos de Linux.