9.6. Cuotas de disco

Uno de los problemas más inmediatos que puede tener un administrdor de red cuando debe administrar un número considerable de usuarios es el uso racional de los dispositivos de almacenamiento.

Si no se ponen límites, cada usuario tenderá a almacenar una cantidad considerable de información y, probablemente, buena parte de ella no esté relacionada con su actividad laboral. La consecuencia inmediata es que se desborda la previsión de necesidades para la red, sobre todo cuando establecemos un almacenamiento de datos centralizado.

Por otra parte, un usuario malintencionado podría impedir el uso normal del sistema informático símplemente saturando la capacidad de su almacenamiento de red.

En este contexto, cualquier administrador tendrá dos inquietudes: poder consultar el espacio ocupado por los usuarios de forma individual y poder establecer límites a la capacidad máxima de almacenamiento que puedan utilizar los usuarios.

En Linux, el administrador puede establecer límites de forma individual a cada usuario o puede hacerlo para todo un grupo. Además, existen dos enfoques diferentes en el momento de establecer cuotas:

  • Limitar el número de bloques de disco, con lo que se restringe el tamaño máximo que se puede ocupar.
  • Limitar el número de i-nodos, que restringe el número máximo de archivos que pueden crearse. Un i-nodo guarda las características de un objeto del sistema de archivos (un archivo, un directorio, etc,). Por lo tanto, limitando su número limitamos la cantidad máxima de objetos.

Además, cuando un administrador establece cuotas, puede fijar dos tipos de límites:

  • Rígido (hard): El sistema operativo impedirá que el límite sea sobrepasado.
  • Flexible (soft): El sistema operativo avisará cuando el límite sea sobrepasado.

Instalar y configurar las cuotas de disco

Los pasos que deberemos seguir para hacer uso de las cuotas de disco en Ubuntu 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 claro el objetivo, comencemos…

Instalar los paquetes necesarios.

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

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.

1

Como hemos dicho más arriba, Ubuntu sí incluye soporte para cuotas

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

sudo apt-get install quota quotatool

2

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.

3

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

4

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=24e18f86-beac-4f34-96a2-b6de5d33da71 /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=24e18f86-beac-4f34-96a2-b6de5d33da71 /home           ext4    defaults,usrquota,grpquota        0       2

5

Cuando acabemos, saldremos 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 puedes, sencillamente, reiniciar el sistema.

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

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

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.

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.

1

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

2

También podemos comprobar que los archivos de cuotas (aquota.user y aquota.group) se han creado correctamente.

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.

1

Al ejecutar edquota, la terminal 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.
  • El tiempo que el usuario puede exceder un límite flexible suele llamarse periodo de gracia.

    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.

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

2

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

1

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.

2

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 las cuotas de disco

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

    1

    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

    2

    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, 6 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.

    3

    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.

4

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.

1

Como podemos comprobar, se han excedido tanto el límite flexible como el límite rígido.

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

sudo quotaon /home

Anterior

Contenido

Siguiente