lunes, 13 de agosto de 2012

Establecimiento de cuotas de disco para usuarios (quota)


Las cuotas son utilizadas para limitar a usuarios o grupos de éstos el consumo de espacio en disco. Sin las cuotas, uno o más usuarios podrían subir archivos al servidor y ocupar todo el espacio libre dentro de su partición, una vez que tal espacio afectado esté lleno, otros usuarios ya no podrán accesar al disco. De hecho, ésta es también una de las razones por la que se aconseja hacer varias particiones del disco duro y montar diferentes directorios en ellas. Por ejemplo, si se cuenta sólo con una partición para el directorio raiz "/" y no se tuviera cuotas, un usuario podría saturar su directorio de usuario y al mismo tiempo, la partición completa para el sistema Al llegar a este punto, el sistema se vuelve inestable e incluso, podría resultar inaccesible para todo mundo incluído el superusuario.

Las cuotras pueden ser impuestas por inodos o por bloques de discos. Debido a que cada archivo del sistema requiere de un inodo, en caso de limitar con este criterio, lo que realmente se hace es controlar el número de archivos que un usuario puede alojar en su cuenta. Por otro lado, los bloques de discos se encuentran definidos por su tamaño, cada bloque de disco corresponde a un 1KB, entonces por ejemplo si se limitan 100.000 bloques, se estaría limitando 100 Mb. Así, al utilizar este último criterio lo que se hace es restringir la cantidad de espacio en disco al usuario.

Para poder utilizar cuotas, se requiere que el kernel del sistema las soporte. Para comprobar si el kernel del sistema actual soporta o no quotas, ejecutar la siguiente instrucción:
# cat /boot/config-`uname -r` |grep CONFIG_QUOTA
El sistema arrojará la siguiente respuesta:
CONFIG_QUOTA=y
CONFIG_QUOTACTL=y
CONFIG_QUOTA_NETLINK_INTERFACE=y


El "=y" indica que el kernel del sistema actual está configurado para soportar cuotas. En el caso de obtener una respuesta "=n", se debe reconfigurar el kernel y añadir este soporte.


En distribuciones como Debian y sus derivados, se debe instalar el paquete quota:

# apt-get install quota

El siguiente paso consiste en activar las cuotas en el archivo /etc/fstab. Este archivo es el que guarda la información sobre los dispositivos a montar y los respectivos puntos de montaje y en él se indican ciertas otras opciones (en la columna options), entre ellas activar las cuotas para usuario (usrquota) o para grupo (grpquota). Entonces, se procede a editar dicho archivo:

# nano /etc/fstab

Y agregar ,usrquota,grpquota seguido del último parámetro de la columna options en la partición que se desea establecer soporte para cuotas. Por ejemplo:

/dev/sda2 /home ext3 defaults,usrquota,grpquota 0 2

Cabe señalar que en el caso de que no se tenga una partición especial para /home, se debe añadir el usrquota o grpquota en el directorio raiz /.

Ahora, debemos remontar nuestra partición (o bien reiniciar el sistema), para ello basta un
# mount -o remount /home

Seguido de esto, crear el archivo aquota.user (o aquota.group) antes de poder activar las cuotas. Se lo puede hacer de la siguiente manera:

# quotacheck -fcugm /home

De este modo los archivos aquota.user y aquota.group son creados en el directorio configurado. Ahora es hora de especificar las cuotas, para ello se hace uso de la instrucción edquota, con lo que se abrirá un editor de texto y aparecerán los parámetros de quota del usuario indicado:

# edquota user1

Disk quotas for user user1 (uid 1001):
  Filesystem         blocks       soft       hard     inodes     soft     hard
  /dev/sda3          20000       25000       30000        20        0        0
Donde:

  • blocks : Indica la cantidad de bloques (recordando que cada bloque equivale a un 1 Kb) utilizados por el usuario en su carpeta /home.
  • soft : Este parámetro debe establecerce en bloques, que a la vez, es el que indica cuando se lanze una advertencia al usuario para indicarle que se está acercando al límite de cuota de disco establecido en hard.
  • hard : Cómo se indico anteriormente, este parámetro es el que establece (en bloques igualmente) el límite del usuario.
  • inodes : Este parámetro es el que indica cuantos inodes (recordando que un inodes corresponde a un archivo) tiene el usuario en su espacio asignado.

Una vez configurado los parámetros deseados, se puede ver un reporte de las cuotas asignadas a todos los usuarios de la siguiente manera:

# repquota -u /

*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days 
                        Block limits                File limits 
User            used    soft    hard  grace    used  soft  hard  grace 
---------------------------------------------------------------------- 
root      --  660364       0       0          20462     0     0       
user1     --   20000   25000   30000             20     0     0       
user2     --   15599       0       0   15     0     0

Otra forma útil de establecer una cuota es con la herramienta quotatool como se muestra a continuación (previa instalación de quotatool):

# quotatool -u user1 -bq 30M -l '30Mb' /

Si se desea duplicar la configuración de la cuota de un usuario a otro, basta con ejecutar la siguiente instrucción:

# edquota -up user1 user2

Para verificar:

# repquota -u /

*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days 
                        Block limits                File limits 
User            used    soft    hard  grace    used  soft  hard  grace 
---------------------------------------------------------------------- 
root      --  660364       0       0          20462     0     0       
user1     --   20000   25000   30000             20     0     0       
user2     --   15599   25000   30000   15     0     0


No hay comentarios:

Publicar un comentario