Configuración del sistema de cuotas en Linux

José F. Gómez Díez

8-Feb-1998
Autor: José Francisco Gómez Díez http://www.geocities.com/Eureka/6263/ Internet E-Mail: jfg@mad.servicom.es FidoNet NetMail: 2:341/12.32@fidonet.org Versión 1.0 Febrero 1998 

1. Introducción

Este documento es una guia rapida de como instalar y configurar el sistema de cuotas en Linux.

El motivo que me ha llevado a realizar este documento ha sido la falta de información con la que yo me encontre en su momento cuando fui a configurar el sistema de cuotas en mi sistema y como agradecimiento a todos los que me ayudaron y como una aportación gratuita a toda la comunidad de Linux.

Si encuentra algún error, o simplemente desea hacer algun tipo de aportación a este documento, no dude en ponerse en contacto conmigo. Estare encantado de hacerlo.

Mi más sincero agradecimiento a Juan José Amor (mi maestro del Linux) por todas sus explicaciones y a todos los componentes de la lista de corrreo de SLUG (l-linux), sin cuya ayuda no hubiera podido conseguirlo.

2. Copyright

Distribución y copia a libre de este documento total y/o parcialmente por cualquier medio ya sea de forma impresa o electrónica, con la unica condición de que se cite al autor del mismo incluyendo de forma completa este Copyright en todas las copias, tanto totales como parciales.

Cualquier modificiación de este documento debe ser aprobada por el autor del mismo por escrito antes de su distribución.

3. Disclaimer

Garantias: Ninguna

Para cualquier consulta o duda acerca del contenido de este documento os podeis dirigir al autor del mismo: jfg@mad.servicom.es

4. Requerimientos

5. Proceso de instalación y configuración

Entra al sistema con el usuario root

Comprueba que el paquetes de quotas se encuentra instalado en el kernel. Esto puede comprobarse, mirando en el arranque de Linux con el comando:

# dmesg | grep quotas

 VFS: Diskquotas version dquot_5.6.0 initialized

Si no sale este mensaje eso significa que el kernel no esta preparado para soportar el sistema de Diskquotas. Sera necesario primeramente recompilar el kernel de Linux. Para más detalles de como compilar el kernel puedes consultar el Kernel-HOWTO disponible en las páginas de

Una vez ya verficado que el kernel tiene instalado las Diskquotas, podemos continuar. Pon el sistema en monousuario, esto te evitara algunos problemas con los filesystems.

# shutdown now

Una vez que el sistema haya rearrancado de nuevo, edita el fichero /etc/fstab y en la particion o particiones que quieras quota pones la directiva usrquota o grpquota (la primera establece quotas a nivel de cada usuario y la segunda para cada grupo)

El siguiente ejemplo establece el sistema de cuotas para la particion /home (/dev/hda7):

/dev/hda7    /home       ext2    defaults,usrquota 1 2

Ejecuta el comando:

/sbin/quotachek -av

Este comando recopila información de las particiones donde se hayas definido el sistema de cuotas. La salida de este comando debe de ser similar a la siguiente:

 Scanning /dev/hda7 [/home] done
 Checked 112 directories and 1052 files
 Using quotafile /home/quota.user
 Updating in-core user quotas

la ejecución de este comando además habra creado un fichero quota.user o quota.grp en la particion o particiones afectada(s), en mi caso genero un fichero en /home llamado quota.user

# ls -la /home/quota.user

 -rw-------   1 root     root        16224 Feb 04 14:47 quota.user

Ya tienes activa el sistema de cuotas!!! :-), la proxima vez que arranques tu sistema se activaran automaticamente en todas las particiones que hayas definido, ya no sera necesario volver a ejecutar manualmente este comando ya que el sistema lo hara de forma automatica al chequear y montar cada uno de los sistemas de ficheros desde el fichero /etc/rc.d/rc.sysinit. El siguiente paso pues, es .. definir la cuotas para cada usuario. Para ello hay dos metodos:

  1. La primera es editar la quota de cada usuario. Por ejemplo para editar la cuota del usuario jfg, ejecutas desde el usuario root el comando:
           # edquota -u jfg
    
    Nota: Se recomienda que para para ejecutar este comando tener defindo como editor del sistema el vi, para ello solo hay definir la siguiente variable del sistema.
       :bash/sh   =>  export EDITOR=vi
       :tcsh/csh  =>  setenv EDITOR vi     
    
    Esto arrancara un vi, con un texto inicial similar al siguiente:
        Quotas for user jfg:
         /dev/hda7: blocks in use: 18542, limits (soft = 0, hard = 0)
                 inodes in use: 1139, limits (soft = 0, hard = 0)
    
    Como puedes comprobar por salida generada por el comando edquota, el sistema de cuotas de Linux me permite limitar el número de bloques y el número de i-nodos (ficheros y directorios) que un usuario puede tener. Los valores a modificar son los limites que estan puestos entre parentesis que ahora valen 0, ahi puedes poner lo que quieras (son KBytes). Por ejemplo para limitar la quota de disco del usuario jfg a 1 Mb pondria lo siguiente:
          Quotas for user jfg:
           /dev/hda7: blocks in use: 18542, limits (soft = 1024, hard = 1024)
                  inodes in use: 1139, limits (soft = 0, hard = 0)
    
    El limite soft es un limite salvable, es decir, el sistema avisa al usuario se esta pasando de la cuota asignada para ese usuario y el limite hard es un limite insalvable, es decir, el sistema ya no le permite escribir nada al usuario al haber obrepasado la cuota asignada. Por ejemplo, si quiero imponer una cuota al usuario jfg una cuota de 3072 con un limite de soft de 2560 (o sea, 3 Mb de cuota y avisos a partir de 2,5 Mb escribiria lo siguiente:
          Quotas for user jfg:
            /dev/hda7: blocks in use: 18542, limits (soft = 2560, hard = 3072)
                   inodes in use: 1139, limits (soft = 0, hard = 0)
    
    Para el tema de los i-nodos lo mejor es poner un limite bastante grande o si no el usuario no podria trabajar con muchos ficheros pequeños. La idea es repartir el número de i-nodos totales en la partición, entre el número de usuarios. Para conocer los i-nodos que hay, puedes ejecutar el comando:
          # df -i /home
    
           Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
           /dev/hda7             51584    1180   50404     2%  /home
    
  2. La segunda opción (quizas más sencilla) para establecer el sistema de cuotas por usuarios es tener un usuario "prototipo", con la cuota correspondiente ajustada, y luego asignarsela al resto de los usuarios de tu sistema con el siguiente comando del sistema operativo:
        # edquota -u -p prototipo usuario
    
    Siendo prototipo el usuario generico y usuario el usuario al que le quieres asignar la cuota.

Con esto habras finalizado la configurado el sistema de cuotas en Linux. Resetea el sistema para volver de nuevo al sistema multiusuario.

    # shutdown -r now

Para visualizar el estado de las cuotas de tu sistema puedes ejecutar el siguiente comando:

      # repquota -a      

                            Block limits               File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    root      --      17       0       0              3     0     0       
    ftp       --       1       0       0              1     0     0       
    jfg       --   19043     2560   3072           1146     0     0       
    

6. Para concluir

Si alguien tiene alguna duda o consulta que hacerme sobre el contenido de este documento, puede mandarme un mensaje a mi dirección de e-mail: jfg@mad.servicom.es. Espero vuestros comentarios

Saludos, Jose.