Quotas de Disco en Linux


En esta ocasión les mostrare como implementar Quotas  de Disco en Linux, esta implementación es muy útil cuando queremos que un usuario no se sobre pase de un límite de almacenamiento especificado, debido a que en nuestras organizaciones pueden haber usuarios que no sean consientes o no tengan la cultura de guardar en sus cuentas la información necesaria y no almacenar tanta basura en sus cuentas que lo que hacen es saturar el disco duro del servidor.


El objetivo de esta entrada es que aprendamos a administrar de una manera organizada el almacenamiento por usuarios que alojamos en nuestros discos duros, al final de este post los usuarios no podrán almacenar en su cuenta un tamaño máximo al que les especificaremos en la Quota, pero hablemos ahora un poco acerca de la Teoría.

¿Qué son las Quotas de Disco? 

Como lo hemos venido diciendo las Quotas de Disco es una implementación que se hace para darle un límite de almacenamiento a un usuario especifico, también se puede especificar una Quota para un directorio en especial, esta implementación nos permite administrar y darle orden al almacenamiento que se haga en nuestra unidad de almacenamiento o Disco Duro. 
"En informática, una cuota de disco es un límite establecido por el administrador del sistema que restringe ciertos aspectos del uso del sistema de archivos en los sistemas operativos modernos. El objetivo de la utilización de las cuotas de disco es limitar la asignación de espacio en el disco duro de una manera razonable." Wikipedia

Implementación

Bueno entrando en materia con la implementacion de esta funcion, lo primero que voy hacer es crear un volumen logico utilizando LVM donde voy a implementar las Quotas por usuarios y tambien por grupos.


Como pueden ver el volumen lo cree solo de 600 MB debemos tener en cuenta esto para no asignar una Quota que sobre pase la capacidad de la partición, Ahora lo que hare será montar la partición en un directorio dentro del Sistema, en esta caso voy a utilizar el directorio /home para esto voy a agregar una línea en el archivo /etc/fstap para que cuando inicie el sistema suba automáticamente esta partición.


Si ven bien la línea resaltada en color Rojo verán que la partición va a ser montada con unas opciones especiales las cuales son, ursquota y grpquota esto lo hacemos para que la partición soporte Quotas de Usuario y Quotas de Grupo.

Ahora lo que haremos es montar la partición en el directorio /home,  para esto utilizamos el comando mount -a para montar todo lo que haya en el archivo /etc/fstap.



Como se muestra en la imagen anterior la particion se monto con las opciones que especificamos anteriormente, ahora ya tenemos una particion con soporte para Quotas verifiquemos que la particion si fue montada correctamente.


Ahora lo que haremos es chequear el soporte de las quotas para esta particion.


Para chequear la partición para verificar que si soporte Quotas utilizamos el comando Quotacheck lo podemos lanzar sin ningún parámetro o le podemos especificar que es lo que queremos chequear, en mi caso yo lo lance con las opciones -ugmv.

u = Quota de usuario
g = Quota de Grupo
m = No-remount, evita que no se monte la partición como solo lectura.
a = Esta opción la podemos utilizar para chequear todas las particiones que soporten Quotas.

Luego de haber hecho el chequeo lance el comando quotaon /home para encender las Quotas en esta particion, para verificar que las quotas si se hayan encendido en la particion listamos los archivos en el directorio que hemos montado el volumen en esta caso ls -l /home y deberan haber dos archivos con el nombre de aquota.group y aquota.user dependiendo la version de quota que tengas en tu maquina.

Ahora lo que resta es especificar la quota para cada usuario, primero creare los usuarios en el sistema en este caso tendre 10 usuarios.


Para la creacion de estos usuarios utilice un script para automatizar el proceso, ahora que ya tenemos los usuarios procedamos a modificar la Quota por cada uno de ellos, para esto utilizamos el comando edquota
de la siguiente manera.

edquota -u
edquota -g

Esta es la sintaxis del comando, lo que va hacer es abrir un editor de texto donde podremos especificar la quota maxima de almacenamiento para cada usuario o para un grupo dependiendo la opcion que usemos.



Como ven en la imagen hay dos campos resaltados en color Rojo ya que hay dos formas de espesificar la Quota, una es por Bloques y la otra por Inodos.


Por Bloques:
Un bloque corresponde  a 1KB osea que si un archivo pesa 1KB habra 1 bloque utilizado y la Quota se aplicara por la cantidad de Bloques que sean permitidos alamacenar por el ususario, por ejemplo si tienes un archivo que pese 2048 Bytes que equivalen a 2KB tendrias dos Bloques utilizados en ese archivo, en mi caso voy hacer la formula para saber cuanta es mi quota de almacenamiento en MB dependiendo los Bloques que especifique.

Total Bloques = 102400
1 Bloque = 1 KB
1 KB =  0.0009765625 MB
Formula: 102400 Bloques * 0.0009765625 MB = 100 MB

Miremos en consola si es verdadera esto.


Como pueden ver la quota para el usuario1 es de 100 MB.


Por Inodo:

"Un inodo o inode en inglés (Index Node) es un número que actúa como apuntador para el sistema de archivos de Linux y le indica en que bloques específicos del disco duro se encuentran los datos de un archivo. También el inodo en su referencia guarda información sobre permisos, propietario, atributos, etc. Se podría ver en una analogía simple que un inodo es como un número de serie único para cada archivo del sistema y a través de este número el sistema recupera sus datos (bloques) y sus atributos (permisos, propietario, fechas, etc.)" LinuxTotal

Com podemos haber leido un inodo es una direccion unica que apunta a un archivo en especial, entonces si limitamos la cantidad de Inodos estamos limitando la cantidad de Archivos que puede almacenar un usuario.
Ejemplo:

El usuario2 tendra como quota limite 10 Inodos, como se muestra acontinuacion.


Ahora voy a entrar como el usuario2 y creare 9 archivos por que recuaerden que en cada direcorio hay dos subdirectorios que no se pueden borrar que son ( . .bash_history ) para crear estos archivos voy a usar el comando For que me ayudara a autmatizar la creacion de estos archivos .txt, al lanzar este comando me debera aparecer error al crear el archivo 9.txt ya que se sobre pasa la Quota de Inodos.


Como ven solo me dejo crear 8 de los 9 archivos y luego me saco un error donde me dice que la Quota se excedió, si miramos ahora cuantos archivos quedaron en este directorio con el usuario2 como propietario veremos que habran solo 10.


En la imagen se muestra que hay 12 archivos pero hay que descontar 2 de ellos que son los que aparecen resaltados en rojo.

Una ves entendido esto les explico sobre los parametros Soft y Hard que aparecen al momento de configurar la Quota,

El parametro Soft: quiere decir "Sueve" es un limitante para la Quota que te advierte que ya estas llegando al limite y te da un tiempo para que reduzcas la Quota borrando archivos, esta valor de tiempo se puede configurar con el comando edquota -t y en caso de que pase el tiempo establecido y no hayas reducido la quota ya no podras almacenar mas informacion con ese usuario.


El parametro Hard: Hard significa "Duro" es el limite de la quota, a diferencia de Soft esta opcion no te permite seguir almacenando mas informacion, lo que se especifique en esta opcion sera la cantidad maxima que puedas almacenar con ese usuario.

Ahora les mostrare algo que puede ser muy util cuando tenemos muchos usuarios y queremos que todos tengan el mismo prototipo de Quota o tenga la misma cantidad de almacenamiento que los demas, para esto usamos la opcion -p del comando edquota pero primero debemos haber configurado la quota de un usuario anteriormente, les mostrare como se realiza. 

Primero voy hacer la demostracion con un solo usuario.


Como ven la configuracion de la Quota para el usuario1 se reflejo en la configuracion del usuario2, Ahora voy a lanzar un script que me copie el prototipo de la quota de usuario1 para los demas usuarios.

Creo que esta opcion les ayudara de mucho a automatizar la configuracion de muchos mas usuarios, imaginensen si tuvieran 100 usuarios esto les puede reducir el tiempo de ir usuario por usuario haciendo esto.

Espero esta informacion les haya servido, si tienen dudas con gusto se las respondere.

Sitios de Interes:






Mapear un directorio desde fstap

Hola a todos, en esta ocacion les mostrare como mapear un directorio desde el carchivo /etc/fstap, hacer esto en muchos casos es muy conveniente ya que puedes trabajar desde el directorio donde te sientas mas agusto.
Primero les mostrare lo que hay en el directorio destino que al principio no debe haber nada por que lo voy a crear desde cero.


Ahora miren lo que hay en el directorio origen.


Como pueden ver son dos directorios totalmente diferentes uno esta vacio y el otro contiene una lista de subdirectorios, ahora lo que vamos hacer es que cada que se inicie el sistema el directorio /home se mapee al directorio /srv/home, esto lo hacemos de la siguiente forma desde el archivo /etc/fstap.


Como pueden ver lo unico que hice en este archivo fue agregar la ultima linea que esta resaltada con rojo y especifique en esta linea cual era el directorio que queria mapear y donde lo queria mapear, para que esta funcion sirva debemos especificar las opciones de montaje que en este caso la opcion es bind para poder mapear el contenido de este directorio a otro, Ahora miren el resultado despues de montar las particiones especificadas en el archivo /etc/fstap.




Con el comando mount -a monto las particiones del archivo y luego lo que hice fue listar el directorio donde mepie el contenido del directorio /home.

Ahora les mostrare como mapeamos un directorio por red, es lo mismo que conectar una unidad de red lo primero que debemos hacer es tener acceso al servidor donde esta la unidad que queremos conectar, en este caso la el servicio es samba.



Luego de tener acceso al servidor ahora vamos a la maquina y en el archivo /etc/fstap especificamos lo siguiente.


Agregamos la linea que esta resaltada en color Rojo y como ven solo es necesario especificar la ruta del directorio en el servidor y luego decirle donde queremos montarlo, despues de esto el tipo de sistema de archivos que en este caso es CIFS para trabajar con SAMBA y por ultimo las opciones con que vamos a montar esta unidad como es necesario autenticarnos en las opciones debe aparecer el nombre de usuario y la contraseña.

Ahora montamos las particiones que estan en el archivo fstap y deberiamos conectarnos al servidor por medio de esta unidad que conectamos en el archivo.



Y como ven ahi estan los mismo archivos que vimos al comienzo cuando ingresamos al servidor por medio grafico.
Espero que esta informacion les haya servido para afianzar sus conocimientos acerca de linux.

Contenidos de interes:

Scripts con While y For

Hola a todos, en esta entrada les hablare sobre como podemos reducir el tiempo en la ejecucion de algunas tareas desde la consola de comando de Linux, en este caso utilizaremos BASH como interprete de comandos desde la consola.


Un Script es una programa que se crea con el fin de automatizar un conjunto de tareas, en este caso en particular utilizare el script para crear un listado de usuarios en el sistema, si nos ponemos a pensar la creacion de 5 o 10 usuarios en linux es algo relativamente facil, pero cuando el caso es de crear 1000 usuarios en el sistema se complica mucho la ejecucion de 1000 comandos para crear usuario por usuario.
En este ejemplo les explicare como podemos crear con un solo comando todo un listado de usuarios en el sistema.
Lo primero que debemos hacer es tener claro cuales son los usuarios que vamos a crear, yo tengo los usuarios listados en un archivo.


Luego de tener el archivo con los usuarios lo que haremos es utilizar el comando While, lo que hace este  comando es cojer los campos de una o varias columnas y moestrarlos como resultado, por ejemplo en la imagen anterior tengo solo una columna entonces solo tendre que crear una variable que me llame esa columna.


Ahora este ejemplo lo hare llamando dos columnas de una archivo que tiene 4 columnas, seria algo como esto, primero les muestro el archivo y luego el comando.

Noten que en la imagen resalto los campos mas importante del comando que vendrian siendo los parametros que extraigo del archivo, como hay 4 campos en el archivo entonces  pongo 4 variables en el comando (a, b, c, d) y luego ejecuto la accion que quiero en este caso es el comando echo , ahora les mostrare como creamos los usuarios del archivo user.


Ahora voy a realizar la creacion de varios usuarios con el comando for, es algo parecido a lo anterior en el punto de vista de la sintaxis del comando, pero hay que especificar los usuarios dentro del script el comando for lo que nos permite hacer es realizar una accion repetitivas veces.


Espero que les haya servido esta informacion, recuerden que es mucho mas facil automatizar tareas que hacerlas una por una puedes reducir tiempo con esto.

Sitios de interes:

Implementacion de LVM

En esta ocasion les comentare como solucione un problema que puede ser muy comun en el campo laboral o en casa, estaba trabajando normal en uno de los servidores que administro y me salio una advertencia de que el volumen en el que trabajo ya no tenia espacio para almacenar datos en el, menos mal mi sistema lo implemente con LVM ya que podia agregar un nuevo volumen y copiar mi informacion alli o podria extender el volumen que se habia agotado para seguir almacenando informacion en el, personalmente y por conveniencia elegi la primera opcion debido a que en este servidor hay un servicio de archivos compartidos y necesitaba compartir un recurso donde los usuarios guadarian mucha informacion por esta razon elegi crear un nuevo volumen.


Voy aprovechar esta ocacion para mostrarles como podemos implementar desde cero LVM ( Logical Volume Manager ) que es una opcion muy util para implementar en nuestros equipos.

¿ Que es LVM ?
Sus siglas en ingles son Logical Volume Manager, es una funcion del kernel de linux que nos permite administrar los discos, por medio de LVM podemos aumentar o disminuir VL o VG cosa que no podemos hacer con los volumenes fisicos.

¿ Como funciona ? 
La base del LVM son los PV ( Volumenes Fisicos ) que son las particiones del disco con sistema LVM, con estos volumenes fisicos se crean los VG ( Grupos De Volumenes ) estos volumenes son los que nos proporcionan la cantidad de espacio que podemos asignar a todos los volumenes logicos que queramos crear y por ultimo estan lo LV ( Volumenes Logicos ) que son los volumens con los que trabajamos a la final, son a los que le implementamos el sistema de archivos y los podemos ver como dispositivos montados en un punto por ejemplo /home.

 Esta imagen lo puede explicar mejor.


Como se muestra en la imagen hay tres particiones fisicas que trabajan con sistema LVM y hacen parte de los volumenes Fisicos PV, este conjunto de PV componen el Grupo de Volumenes que a su ves soporta a dos Volumenes Logicos LV que son los que veria el usuario final como /home o /var etc.

Creacion de LVM

Lo primero que debemos tener en cuenta es contar con un disco disponible para utilizarlo como LVM, luego lo particionamos dejando esa particion con toda la capacidad del disco.



En mi caso tengo un disco ( /dev/sdd ) de 1G para hacerles la prueba de como configurar LVM y en realidad esta es mi maquina donde pruebo todo antes de aplicarlo en el servidor que esta en produccion.



Ahora ya tenemos creada la particion sdd1 con 1G de espacio, lo que haremos ahora es crear el PV con esa particion o si ustedes tienen mas particiones para asignarlas cono LVM pueden hacer lo mismo.



Desde ahora ya tenemos un PV de 1G y lo que procederemos hacer es crear un VG para asignar desde ahi el espacio que queremos a nuestros Volumenes Logicos LV.



Como pueden ver ya tenemos un VG de 1G y desde este VG configuraremos todos los LV que queremos tener en nuestro sistema, les mostrare a continuacion como crear un LV partiendo del VG que ya hemos creado.



Lo que hice fue crear una particion de 500M que se llamo lv-home y esas 500M las tome del VG llamado lvm-storage. Entonces en el VG quedaron disponible 500M mas para otras futuras particiones o volumenes que quiera crear.

Ahora falta darle un formato a este volumen para poder montarlo en algun punto dentro del sistema.


Como ven en la imagen el formato que le di a la particion o volumen logico fue EXT3 ya ustedes deciden que formato eligen dependiendo a sus necesidades, Ahora ya tenemos un volumen llamado lv-home que podemos montar en algun punto del sistema de archivos.


En mi caso el punto que elegi para montar este nuevo volumen fue /home, otra forma con la cual pueden montar el volumen lv-home puede ser agregando una linea al archivo /etc/fstap y sera muy util para qe se monte la particion automaticamente cuando inicies tu equipo. 

 
Espero que les haya servido esta informacion que les comparto y si tienen alguna duda me pueden dejar un comentario o escribirmen al e-mail: jmadrigal@vcb.com.co o twitter: @jmadrigal07 

Enlaces de interes:

PhpMyadmin en centos

En esta entrada les explicare como instalar la aplicación phpmyadmin bajo el sistema operativo centos 5.6, El problema es que en ubuntu es muy sencillo instalar este administrador de la base de datos Mysql solo es apt-get install phpmyadmin y luego dirigirnos a la web y buscar la aplicación http://127.0.0.1/phpmyadmin, bueno en centos hay que hacer un par de cositas adicionales que les mostrare a continuación.


Lo primero que debemos hacer es lo normal instalar el servidor web, la base de datos Mysql y el soporte PHP.

Instalación de paquetes Necesarios:

yum install mysql mysql-server
yum install php php-mysql php-gd
yum install httpd 

Y en mi caso me gusta que el servicio mysqld se inicie automáticamente cuando el sistema se inicie en los niveles 2345 para esto ejecuto este comando.

chkconfig --level 2345 mysqld on

Luego inicio los servicos

/etc/init.d/mysqld restart    # Reinicio la base de datos
/etc/init.d/httpd restart       # Reinicio el servidor Web Apache

Ahora debo cambiar el password de la base de datos que por defecto no trae ninguno, para esto ejecuto el siguiente comando.

mysqladmin -u root password TUPASSWD

Después de esto nos dirigimos al DocumentRoot de nuestro servidor web que en este caso es /var/www/html y desde aquí descargaremos el paquete phpmyadmin en la ultima versión 3.4.3.1 con el siguiente comando.

wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.3.1/phpMyAdmin-3.4.3.1-english.tar.gz

Nota: si quieren ver las versiones actuales

Ahora lo que haremos es descomprimir el paquete de esta manera.

tar xvfz phpMyAdmin-3.4.3.1-english.tar.gz 

y nos quedara el directorio phpMyAdmin-3.4.3.1-english descomprimido, lo que se suela hacer por comodidad es mover el directorio para cambiarle el nombre y que no sea tan extenso y complicado de digitar.

mv phpMyAdmin-3.4.3.1-english phpmyadmin

Ahora dentro de la carpeta phpmyadmin copiaremos el siguiente archivo y despues procederemos a modificarlo.

cp config.sample.inc.php config.inc.php

con tu editorde texto preferido modificas el archivo.

vim config.inc.php

y debe quedar algo parecido a esta imagen, solo cambias lo opción cookie por http. 



Guardas el archivo y por ultimo reinicias el servicio y despues podras ingresar a administrar la base de datos mysql por medio del entorno grafico que nos facilita la herramienta PhpMyadmin.

 /etc/init.d/httpd restart    # Reinicio El servidor Web

Ahora voy al siguiente sitio de mi servidor web que es donde esta alojado el PhpMyadmin, http://ip_servidor/phpmyadmin.




Espero que esta información les haya servido.

Sitios de interés:



Direcciones IPv6 ULA

En esta entrada les hablare sobre las direcciones IPv6 ULA, Las direcciones ULA (Unicast  Local Address) Son direcciones únicas en una red local o intranet, es decir que estas direcciones son el parecido al bloque de direcciones privadas en la versión cuatro del protocolo IP (IPv4) este tipo de direcciones estan sobre un bloque que las identifica el cual comienza por fc00::/7 este bloque es el que le da identidad a la direccion, estas direcciones se definen en la RFC 4193.



El formato de una dirección unica enrutable en IPv6 es el siguiente; Primero contiene un campo donde se sitúa el identificador de enrutamiento y consta de 48 bits, luego sigue el campo que identifica la subred (subnet id) este campo esta constituido por 16 bits y los siguientes 64 bits de la dirección los abarca el identificador de interfaz que por estándar se trabaja con el OUI-64 osea que los 64 bits de este campo se completan con la dirección MAC de cada interfaz del equipo como lo habíamos visto en la entrada anterior.


En la imagen se pueden guiar para entender un poco mejor como se constituye las direcciones IPv6 de alcance global, digo de alcance global por que las direcciones ULA se pueden enrutar de una red a otras pero como aclare anteriormente no se pueden ver desde Internet, pero las podemos utilizar para una  PYME (Pequeñas o medianas empresas) osea una organización o una red privada que solo necesite conexión local entre subredes.

Ahora les mostrare prácticamente como funcionan las direcciones ULA, primero les daré a conocer la problemática y luego procederemos a solucionarla.

La problemática que me he planteado para esta ocasión es la siguiente, Tengo dos subredes una es fc01:0:0:1::/64 y la otra es fc01:0:0:2::/64 y en la subred fc01:0:0:1::/64 tengo una aplicación Web que debe ser accesible desde la subred fc01:0:0:2::/64.


La simulación que haré sera esta; el equipo que enrutará las dos redes sera un servidor centos en donde habilitare el enrutamiento IPv6 y configure dos tarjetas de red  por donde comunicare las dos redes.

El primer paso que haré es habilitar el enrutamiento, en sistemas GNU/linux en este caso centos para habilitar el enrutamiento solo basta con agregar un bit que es el que indica si una interfaz puede enrutar o no (1=Enrutamiento habilitado; 0=Enrutamiento deshabilitado) en este caso elegiré todas las interfaces para que sean enrutables. 


Luego de esto debo configurar las direcciones IP en las interfaces, en este caso la interfaz eth0 sera la direccion fc01:0:0:1::1/64 y la eth1 es la IP fc01:0:0:2::1/64.


Ahora configuro la eth1



Ahora me voy a configurar el cliente en la red fc01:0:0:1::/64 y le asigno una dirección dentro de la red que he especificado.



Ahora pruebo si hay conectividad con el equipo enrutador, recuerden que por ser este un protocolo IP nuevo debe trabajar con nuevos protocolos como por ejemplo Ping6.


Como pueden ver en la imagen anterior el ping6 fue satisfactorio, eso quiere decir que hay conexión con el enrutador; Observen que ahora con este tipo de direcciones no hay necesidad de especificar la interfaz por donde es alcanzable el destino ya que estas direcciones se pueden enrutar en cambio las direcciones IPv6 de Link-Local no son enrutables.

Bueno ahora falta configurar el cliente en la red fc01:0:0:2::/64 los pasos son practicamente los mismo que los que hicimos anteriormente.


Bueno ahora ya estan configuradas las dos redes tratare de dar ping de una red a otra para ver si hay conectividad entre ellas.


Como pueden ver el ping fue erróneo, Este error se debe a que los clientes aun no saben a quien preguntarle sobre una subred que no conocen para esto debemos configurar una puerta de enlace o una ruta para que el cliente le pregunte al enrutador por la red que no conoce.

Nota: Aclaro que este paso hay que hacerlo ya que la configuración de la dirección fue manual, pero casi nunca se va a ver este caso ya que hay protocolos de asignación automatica de direcciones DHCP que te da los parámetros necesarios para el cliente, entre ellos el servidor de nombres de dominio DNS y una puerta de enlace predeterminada. 

Configuracion de rutas estaticas.

Cliente 1:



Lo que hicimos con este comando fue decirle al equipo que cuando un paquete vaya hacia la dirección fc01:0:0:2::/64 lo envíe por la interfaz eth0 donde se comunicará con el enrutador.

Cliente 2:



Ahora volvamos a probar el ping6 entre redes, con esta configuración ya nos debería dejar pasar los paquetes de una red a otra. 


Como pueden observar en la imagen anterior ambas maquinas en diferentes redes se pueden conectar, Esto se debe por que hay un intermediario que esta encaminando los paquetes en la mitad de las dos redes.

Ahora El resultado final del reto que nos hicimos al comienzo de este Post.

Bueno para hacer esta prueba final configure otro cliente en la red fc01:0:0:2::/64 ya que la maquina con la que estaba haciendo las pruebas anteriores no tiene entorno grafico y no queria mostrarles el contenido de la pagina desde consola. Les mostrare la configuración de la direccion en la maquina nueva y luego el resultado final accediendo a la pagina.





Hemos llegado al final de este post, espero que todo lo que vimos les haya servido si tienen inquietudes acerca de este tema me pueden dejar un comentario o me pueden contactar en

twitter: @jmadrigal07
E-mail: jmadrigalm@misena.edu.co

Sitios de interes:














 

Geek By The System Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger