Next Previous Contents

5.1 Las diskquotas

La utilidad quota permite especificar dos tipos de límites de espacio dentro de los filesystems, por usuario y/o por grupos de usuarios. Y dentro de estos dos tipos, por un lado el número máximo de inodes, y por otro lado el número máximo de blocks. Esta característica me permitirá controlar el espacio consumido (Web, FTP, etc.) de cada uno de los usuarios del sistema.

Doy por supuesto que se ha activado previamente la opción del kernel referente al tratamiento de quotas.

Modificación del init script

Antes de empezar a configurar esta utilidad hay que tener muy claro a qué filesystems se aplicará este control. La mayoría de HOWTOs referentes a su configuración presuponen que el lector aplicará la quota al root filesystem. Ahora bien, en mi caso no ha sido así porque el contenido del root filesystem está únicamente destinado al propio sistema. Es decir, que los únicos filesystems con tratamiento de quota serán de otros dispositivos.

Debido a esta diferencia importante, es necesario avisar al sistema que durante el arranque haga un mount de los filesystems externos antes de ejecutar el programa /sbin/quotacheck. Para poder hacer esto, se tendrá que modificar un único init script, el llamado /etc/rc.d/rc.sysinit, aplicándole las siguientes modificaciones:

Hay que comentar las siguientes líneas:

#       elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
#               echo "Checking filesystem quotas"
#               /sbin/quotacheck -v -R -a

Y copiarlas un poco más abajo, justo después de donde dice mount -a -t nonfs, variando un poco su contenido:

if [ -x /sbin/quotacheck ]; then
    echo "Checking filesystem quotas"
    /sbin/quotacheck -avug -R
fi
if [ -x /sbin/quotaon ]; then
    echo "Turning on user and group quotas for local filesystems"
    /sbin/quotaon -avug
fi

La opción "-R" indica que no es necesario que haga un scan del root filesystem.

Modificación del fichero /etc/fstab

Dentro de mi servidor sólo hay dos tipos de usuarios que deben ser tratados con esta utilidad. Por un lado las empresas o grupos corporativos y por otro lado los usuarios particulares. Siguiendo este esquema tuve que crear dos filesystems:

Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/sda1            2974519     801  2819898      0%   /mnt/empresas
/dev/sda2            1321269      96  1252897      0%   /mnt/usuarios

Como puede observarse los dos filesystems forman la totalidad del primer disco duro SCSI.

Para cada filesystem donde se quiera un tratamiento de quotas tanto para los usuarios como para los grupos, se deberá añadir los parámetros usrquota y grpquota.

# <device>    <mountpoint>   <fstype> <options> <dump> <fsckorder>
/dev/sda1     /mnt/empresas   ext2     defaults,usrquota,grpquota 0 2
/dev/sda2     /mnt/usuarios   ext2     defaults,usrquota,grpquota 0 2

También se puede utilizar el programa fstool dentro del Control Panel para realizar estas modificaciones.

A continuación será necesario crear dentro del directorio base de cada filesystem modificado, los dos ficheros correspondientes a los parámetros que se han dado anteriormente. Es necesario tener en cuenta que el propietario de ambos ficheros debe ser el usuario root y sólo él debe tener los permisos de lectura y de escritura.

A continuación se detallan todos estos pasos:

touch /mnt/empresas/quota.user
touch /mnt/empresas/quota.group
chmod 600 /mnt/empresas/quota.user /mnt/empresas/quota.group

touch /mnt/usuarios/quota.user
touch /mnt/usuarios/quota.group
chmod 600 /mnt/usuarios/quota.user /mnt/usuarios/quota.group

Finalmente ya sólo queda hacer un reboot del sistema, per refrescar los cambios efectuados.

Assignación de quota a los grupos

Ahora sólo quedará establecer un uso máximo de espacio para los grupos de los usuarios. Esta asignación se realiza mediante el programa /usr/sbin/edquota.

Pienso asignar un espacio de uso máximo de 10MB para las empresas dentro del filesystem llamado /mnt/empresas. El primer paso es ejecutar el editor de quotes con el parámetro "-g", indicando que el tratamiento a efectuar será sólo para el grupo en cuestión:

edquota -g empresas

Este programa ejecutará el editor vi (o el editor especificado en la variable de entorno $EDITOR). El resultado es el siguiente:

Quotas for group empresas:
/dev/sda1: blocks in use: 40, limits (soft = 10240, hard = 10240)
        inodes in use: 22, limits (soft = 0, hard = 0)
/dev/sda2: blocks in use: 0, limits (soft = 1, hard = 1)
        inodes in use: 0, limits (soft = 0, hard = 0)
~
~
~

Tal y como se puede comprobar, el programa muestra los dos filesystems donde hay tratamiento de quota. A mi sólo me interesa asignar quota al filesystem donde residirán todas las empresas.

El programa requiere que las unidades de asignación sean en blocks. Sabiendo que quiero asignar 10MB de espacio máximo inicial a las empresas, sólo deberé multiplicar estos 10MB por 1024 y así obtendré los blocks. Por lo que hace al número de inodes no acostumbro a ponerle ningún límite. Prefiero hacer un control mediante los blocks.

Los parámetros blocks in use y inodes in use, se refieren al espacio en blocks que el grupo lleva consumido actualmente y al número actual de ficheros creados respectivamente. Son parámetros puramente informativos.

Los dos parámetros importantes son el Soft Limit y el Hard Limit. Con estos dos se puede especificar un límite inicial y un límite final respectivamente.

El parámetro Soft Limit indica la cantidad máxima de blocks o de inodes para el grupo en cuestión. Cuando este parámetro se combina con el que se llama Grace Period, actúa com una frontera donde a partir de ahí mostrará mensajes de atención, notificando que el usuario está sobrepasando su espacio de uso.

El parámetro Hard Limit especifica el límite absoluto de uso de espacio para el grupo en cuestión. Sin embargo, este parámetro sólo funciona cuando se utiliza la opción Grace Period.

La configuración del Grace Period para los grupos puede realizarse mediante la orden:

edquota -gt

Por defecto el sistema establece un Grace Period de 7 días. Puesto que no doy ningún margen entre el Soft Limit y el Hard Limit, no tendrá tiempo de actuar.

Assignación de quota a los usuarios

Por lo referente a los usuarios, pienso asignar un espacio de uso máximo de 3MB dentro del filesystem llamado /mnt/usuarios. El primer paso es ejecutar el editor de quotes con el parámetro "-u", indicando que el tratamiento a efectuar será sólo para el usuario en cuestión:

edquota -u mikaku

Todo el resto de pasos son los mismos que en el tratamiento de los grupos. De todas maneras cabe decir que, el tratamiento para un usuario individual sólo será realizado en caso de que el usuario requiera una ampliación de su espacio de uso exclusivo.

Logs e informes diarios

Para poder estar al corriente del espacio de uso por parte de los usuarios del sistema, hay una utilidad que facilita esta tarea. El programa /sbin/quotacheck realiza un scan en cada filesystem donde hay un tratamiento de quota, a fin de refrescar los registros de los ficheros quota.user y quota.group con el uso actual.

Tal y como he explicado anteriormente, este programa ya se ha incluido en uno de los init scripts, o sea que este proceso ya se ejecutará cada vez que se haga un boot al ordenador. Ahora bien, puesto que este ordenador tiene previsto estar en marcha las 24 horas de los 365 días del año, las quotes no se verían nunca refrescadas con los datos actuales.

Para solucionar este problema y realizar un scan periódicamente, se hace necesaria la inserción de la siguiente línea en el fichero /etc/crontab.

# Scan diario de las quotas
00 05 * * *    root /sbin/quotacheck -aug

Aquí se especifica que cada día a las 05:00h realice un scan de los filesystems especificados dentro del fichero /etc/fstab. Si se le añade el parámetro "-v" (de verbose), el cron enviará un mail al usuario root con la salida generada por el programa.

Para obtener un log diario del estado actual de las quotes, se recomienda que se heche un vistazo al capítulo que trata sobre la impresión de los logs diarios.


Next Previous Contents