sábado, 15 de diciembre de 2012

Windows 2008 R2 x64: Task Scheduler con batches.

 Hola, ya vimos en uno de mis blogs como configurar un batch para sacar los respaldos de SQL Server 2008 y configuramos el "Task Scheduler" de Windows 2008 sin problemas, ya que el usuario que lo hizo era el admin de la maquina e instale la bd en el folder default.

  Entonces, el no tuvo problemas para ejecutar el batch, pero que pasa cuando:

1) Se instala la BD en otra particion.
2) El usuario que ejecuta el server es admin local.

 Bien, si tratamos de ejecutar el batch manualmente recordar que debe ser "Como Administrador" de lo contrario "cmd" no lo ejecutara, cuando hacemos esto todo funciona de maravilla. 

  Pero que pasa cuando configuramos "Task Scheduler"? no funciona cuando el usuario por asi decirlo llamado 'sqls' no tiene el permiso "Full Rights" en el folder raiz, que significa esto?

  Bien yo instale el SQL-Server 2008 normal pero la BD las mande a otra particion llamada "D:" , ahi dentro hice un folder llamado "Backups", o sea
"D:\Backups" y dentro guarde mis batches, el que genera los respaldos "Full" y "Differenciales".

  Repito, si yo los probaba en la consola funcionan, el problema era cuando los trataba de ejecutar atraves del "Task Scheduler" no corrian, estuve leyendo en varios foros que muchos pasaban por el mismo problema, en mi caso el truco era que tenia que darle a el folder "Backups" todos los permisos a el usuario que estaba usando para ejecutar el servidor (sqls).

  Ya que en ese folder "Backups" estaban los batches y ahi mismo se iban los respaldos generados.

  Y este usuario aparte debe formar parte del grupo de "Administradores". Listo.

miércoles, 28 de noviembre de 2012

Centos 5x: apcupsd y tarjeta powerchute PCNET.


   Esta vez me toco trabajar con una tarjeta APC9616 con apcupsd en Centos 5, la razon de esto es por que uno de mis servidores no acepto un APC BackupUPS 450 por USB.

   Este servidor tiene corriendo Xen para virtualizar Windows XP, pero tuve que enviar el puerto USB a la maquina virtual ya que ahi estamos corriendo un software que tiene HASP USB KEY.

   Quiero pensar que Xen rehusa a entragarle el USB a el host del Xen, bueno ni modo.

  Entonces me vi en la tarea de poner a trabajar uno de mis 2 UPS modelo viejo pero con pila nueva, el modelo es el SmartUPS 1400.

   Pero no queria hacer uso del puerto serial, por ello me vi en la necesidad de trabajar sobre una tarjeta que ya habia visto que hablaban de ella en el maillist de apcupsd.

   La conseguimos barata y empece a trabajar sobre ella.

   Les voy a dar la informacion basica para ponerla a trabajar.

   De arranque esta configurada para tomar IP de nuestro DHCP, asi que no hubo problemas para esto.

   De ahi esta tiene habilitado un servidor web para administracion, se puede usar tambien via telnet, pero esto por el momento no me ha sido necesario.

   El usuario/password por default es:

apc/apc.

   Simple, apuntan su navegador a el IP que haya tomado la tarjeta y listo.

   De ahi sigue configurar el password que los clientes remotos deben usar para contactar esta interface, no es el mismo que usamos para entrar via web eee Ojo.

   Creo que el limite son 15 caracteres, en mi caso coloque hasta 15.

   Para esto se van a el menu principal que dice UPS, a mano izquierda aparece el submenu PowerChute, tiene 2 opciones:

a) configuration
   Aqui borran la clave que tiene, que de todos modos no se puede ver y colocan la suya "Apply".

b) clients
   Aqui dan de alta los IP's de los  clientes que desean contactar a el UPS en mi caso el IP del equipo que tiene corriendo apcupsd "Apply".

   Hay mas configuraciones pero no he tenido necesidad de usarlas.

   Vamonos sobre apcupsd, la configuracion esta muy clara desde el manual:

## apcupsd.conf v1.1 ##
UPSCABLE ether
UPSTYPE pcnet
LOCKFILE /var/lock
DEVICE 192.168.2.69:apc:mipassword 
UPSCLASS standalone
UPSMODE disable
 

   Ya los parametros de apagado se los dejo a su criterio. DEVICE es el IP que tomo la tarjeta 
PCNET,ya con esto listo es cosa de ejecutar el demonio:
 

service apcupsd start
 

Ahora vamos a ver el estatus:

root# apcaccess

APC      : 001,052,1325
DATE     : 2012-11-28 13:09:14 -0800  
HOSTNAME : mbx-delllaptop
VERSION  : 3.14.10 (13 September 2011) redhat
UPSNAME  : mbx-delllaptop
CABLE    : Ethernet Link
DRIVER   : PCNET UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2012-11-28 13:09:10 -0800  
MODEL    : SMART-UPS 1400
STATUS   : ONLINE 
LINEV    : 122.8 Volts
LOADPCT  :   0.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT : 227.0 Minutes
MBATTCHG : 15 Percent
MINTIMEL : 5 Minutes
MAXTIME  : 0 Seconds
MAXLINEV : 123.5 Volts
MINLINEV : 121.5 Volts
OUTPUTV  : 122.2 Volts
SENSE    : High
DWAKE    : 000 Seconds
DSHUTD   : 020 Seconds
DLOWBATT : 02 Minutes
LOTRANS  : 103.0 Volts
HITRANS  : 132.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 26.1 C Internal
ALARMDEL : 5 seconds
BATTV    : 27.5 Volts
LINEFREQ : 60.0 Hz
LASTXFER : Automatic or explicit self test
NUMXFERS : 1
XONBATT  : 2012-11-28 13:16:16 -0800  
TONBATT  : 0 seconds
CUMONBATT: 15 seconds
XOFFBATT : 2012-11-28 13:16:31 -0800  
LASTSTEST: 2012-11-28 13:16:16 -0800  
SELFTEST : NO
STESTI   : 336
STATFLAG : 0x07000008 Status Flag
REG1     : 0x00 Register 1
REG2     : 0x00 Register 2
REG3     : 0x00 Register 3
MANDATE  : 03/17/99
SERIALNO : NUIMERODESERIE
BATTDATE : 03/17/99
NOMOUTV  : 115 Volts
NOMBATTV :  24.0 Volts
EXTBATTS : 0
FIRMWARE : 70.11.D
END APC  : 2012-11-28 13:40:09 -0800 
 
   Como podran ver estos parametros son los que buscamos:

STATUS   : ONLINE 
BCHARGE  : 100.0 Percent
TIMELEFT : 227.0 Minutes

   Apcupsd esta listo para controlar nuestros equipos, ya otros equipos pueden contactar 
a apcupsd para autoapagarse.
 
   Ahora vamos a ver un cliente windows, la configuracion seria bien sencilla:
 
UPSCABLE ether

UPSTYPE net

DEVICE 192.168.2.64

SCRIPTDIR c:\apcupsd\etc\apcupsd

PWRFAILDIR c:\apcupsd\etc\apcupsd

NOLOGINDIR c:\apcupsd\etc\apcupsd

ONBATTERYDELAY 20

BATTERYLEVEL 15

MINUTES 5

TIMEOUT 0

ANNOY 300

ANNOYDELAY 60

NOLOGON disable

KILLDELAY 0

NETSERVER on

NISIP 0.0.0.0

NISPORT 3551

EVENTSFILE c:\apcupsd\etc\apcupsd\apcupsd.events

EVENTSFILEMAX 10

UPSCLASS standalone

UPSMODE disable

STATTIME 0

STATFILE c:\apcupsd\etc\apcupsd\apcupsd.status

LOGSTATS off

DATATIME 0 

   Cuando arranquen el servicio sin problemas van a poder proteger sus clientes,
cualquier otro ya sea windows, Linux, Unix no deben tener problemas.
   Espero les sirva de algo, saludos!!
 

sábado, 18 de agosto de 2012

Pfsense 2: Squid Proxy y Envio de Parametros Automaticos WPAD.

Una persona que pregunto que si podia remplazar un equipo inhalambrico con pfsense, yo le dije que dependia de si el equipo tenia alguna funcion en especial, el me comento que no, que solo es un acceso para la visita, pero que si deseaba que se tuvieran que autenticar.

Su principal problema era que sentia que sus empleados estaban abusando de ese servicio y ya saben, uno le da clave y este empieza a repartirla a medio mundo, y deseaba saber cuanto tiempo duran, cuanto consumen y donde se la pasan.

Yo le dije que si podria hacerlo, asi que empece mi tarea, tenia yo 6 objetivos:
  1. Que el cambio fuera sencillo y los empleados no notaran mucho el remplazo de equipo.
  2. Usar las mismas credenciales de acceso.
  3. Usar un equipo de bajo consumo de energia, de esos que no hacen ruido o sea sin abanicos y compactos. 
  4. No usar cache de squid.
  5. No bloquear nada.
  6. Que todos pasen por squid y nadie se lo pueda brincar.
Ya con esto en mente, opte por un equipo que tengo tiempo usando de la marca Neoware modelo CA10 le cual tiene las siguientes caracteristicas:
  • CPU 800Mhz.
  • 512RAM DDR400
  • Slot para montar una adaptador de memoria CF y ahi cargar el OS.
  • 1 Slot PCI para poder agregar cualquier tarjeta de PCI(De Red).
  • 4 Puertos USB
  • 1 Puerto Paralelo
  • 2 Puertos Seriales
  • 1 VGA
  • 1 NIC Integrado VIA
  • 1 NIC 3com en la ranura PCI
  • 1 Memoria CF 4GB con pfsense 2.0.1 nano-vga version 4GB.
Aqui esta un imagen del equipo:
Figura 1: Neoware CA10 con Pfsense Nano.
Como observaran, voy a usar la version nano, por cierto estos equipos los estoy ofreciendo en mercadolibre.com.mx si lo buscan como pfsense daran con el.

Ahora regresando a el tema, ya tengo el equipo y pfsense cargado, que necesito configurar?

  • squid
  • sarg
Estos dos paquetes ya hemos visto en el blog como configurarlos ya no voy a tocar estos temas, aclarando que siempre he sido un seguidor de squid modo no-transparente y aqui es lo mismo, nadie se va a brincar el proxy.

Lo que voy agregar es:

  • Usar usuarios locales
  • WPAD para que los navegadores obtengan los parametros del proxy sin intervencion.
Ahora si hago todo desde el GUI, ya no tengo que manipular la configuracion de squid desde la consola, para los usuarios existe una pestaña en los parametros de squid donde hacer esto, ver siguiente imagen:
Figura 2: Creacion de usuarios locales.
Ya tenemos las credenciales de acceso igual como las tiene el sistema que ellos estan manejando, sigue por ahi como configurar WPAD para que los navegadores busquen a el proxy y obtengan los parametros sin la intervencion humana.

Siguiendo el doc: http://doc.pfsense.org/index.php/WPAD_Autoconfigure_for_Squid

Dice que debemos crear 1 archivo llamado: wpad.dat en la raiz del folder root de un servidor web, que en mi caso es la misma caja de pfsense y ahi esta squid mas facil, pero su caso puede ser otro, entoces mi configuración seria:

function FindProxyForURL(url,host)
{
if (isPlainHostName(host)) { return .DIRECT.; }
if (isInNet(host, .192.168.0.0., .255.255.255.0.)) { return .DIRECT.; }
return "PROXY 192.168.50.1:3128";
}

Rapido podremos suponer que squid corre en la maquina con IP 192.168.50.1 y el puerto es el conocido 3128.

Ahi viene como se puede brincar la intranet para que no pase por el Proxy.

Tambien dice que debemos copear ese mismo archivo en otros con los nombres:
  • wpad.da
  • proxy.pac
Les quiero aclarar que yo no he usado esos archivos y mis clientes han logrado obtener la info automatica excepto el navegador opera, leyendo un poco este aun no tiene la funciona de autodescubrir proxies.

De ahi dice el manual que debemos apoyarnos de dns forwarder ya que debemos crear un registro en la seccion "Host Overrides" quedaria asi:
Figura 3: Registro en DNS Forwarder.
Ahora viene la parte del firewall, claro que tambien entra en juego pero estas reglas son sencillas, son 3:

Permitir a la LAN consultar el DNS de pfsense TCP/UDP.
Permitir a la LAN llegar a el puerto 3128 de squid de pfsense TCP.
Permitir a la LAN salir a el puerto FTP si lo llegaran a necesitar TCP.

Es todo, no puedo ser mas abierto por que se supone que la conexion la estan usando para que los clientes puedan accesar a Internet solamente, nada mas, por ello no requiero mas puertos, a lo mejor va a salir algunos en especifico pero hasta el momento no ha pasado nada.

Parece que tenemos todo en su lugar, vamos revisando:
  • Squid configurado y operando.
  • Sarg configurado y operando los scripts de cron.
  • DNS Forwarder configurado.
Prueba de fuego con nuestros navegadores, los configuramos segun el manual:

Windows XP Pro sp3:
Firefox: Si Funciona.
Iexplore: Si Funciona.
Safari: Si Funciona.
Opera: No Funciona, no tiene opcion de busqueda automatica hasta hoy.

Windows 2003:
Firefox: Si Funciona.
Iexplore: Si Funciona.
Safari: Si Funciona.
Opera: No Funciona, no tiene opcion de busqueda automatica hasta hoy.


Windows 7:
Firefox: Si Funciona.
Iexplore: Si Funciona.
Safari: Si Funciona.

Windows Server 2008:
Firefox: Si Funciona.
Iexplore: Si Funciona.
Safari: Si Funciona.


Deseaba probar mi caja Linux pero desgraciadamente fallo el disco, asi que luego pruebo y les informo.

Los updates de Windows sin problemas.


Posibles problemas:


Si estan trabajando sobre esto y cuando prueben y no les aparezca la ventana de autentificacion les recomiendo renovar su IP, este asunto me paso cuando hice los cambios en el DNS forwarder, al renovar mi IP empezo a funcionar sin problemas.

Este equipo entra a trabajar la proxima semana, asi que estaremos monitoreando su funcionamiento, saludos!!!

2012-08-25
Problemas con ciertas tabletas: Pues cabe la sorpresa para enterarme por mi propios ojos que por ejemplo tenemos una tableta de asus con adroid version 4.0.3 y resulta que no tiene soporte para proxy, mucho menos para deteccion automatica, he leido al respecto como muchos equipos y creo que todos tienen este problema, por que google tomo esta decision tan estupida de no agregarle una caracteristica tan basica que es soporte de proxy?

Resumen no puedo usarlo con esta implementacion de pfsense, tengo que buscar el IP crear un alias y agregar una regla que permita la navegacion libre.

Tenemos otro smartphone de motorola con android 2.x, este al menos tiene la opcion de ponerle manualmente el proxy y funciona con el esta implementacion.

Hasto donde he leido la familia de IOS(Apple) desde que salieron tiene este soporte, aun flata probar y ver si es correcto, solo me toco ver uno donde si aparecia la opcion de configuracion.

Si alguien tiene info al respecto espero pueda proporcionarla, saludos!!!

2012-08-27
Si estan trabajando y ya han modificado mucho su pfsense a el punto que ya sus navegadores no pueden obtener los parametros del proxy de manera automatica, les recomiendo que ejecuten el ccleaner en los equipos windows para limpiar todo el cache de sus navegadores.

viernes, 3 de agosto de 2012

Pfsense 2: OpenVPN a FreeBSD/Linux via Shared Key

Buenos dias.

Me llego la inquietud de una persona, que me preguntaba como podria conectar una VPN via OpenVPN de Pfsense a Linux?

Me puse a pensar un poco y me dije si ya hemos levantado tipo Site2Site entre Pfsense, RoadWarrior con clientes Windows, que diferencia hay con clientes tipo Linux/FreeBSD.

Tengo mi dominio y ahi tengo una VPN, no tipo shared por que se me hacen muy fragiles, pero al final de cuenta la puedo usar para llevar a cabo esta pequeña tarea.

Haya tengo FreeBSD 8.x con openvpn 2.2.2, ahora pfsense 2.0.1 tiene la version 2.2.0 entonces no hay tanta diferencia de versiones debe funcionar.

La configuracion de este tipo "Shared Key" es de las mas sencilla, ya que solo hay una llave compartida por todas las partes y esto la hace realmente simple, si alguien tiene esa llave puede entablar comunicacion sin problemas.

Para generar la llave se puede hacer desde Pfsense o atraves de Linux/FreeBSD, desde este ultimo puede ser algo tan sencillo como ejecutar:

openvpn --genkey --secret shared.key

Pero podemos ponerle algunos parametros hacer la llave de encriptacion mas grande que es lo mas recomendable 2048, 4096, etc.

Recordar que al aumentar el tamaño tanto la encriptada como desencriptada y la compresion le lleva mas tiempo a el CPU entonces nuestro equipo de computo va a ser masacrado, por ello es conveniente al estar configurando estos parametros hacer pruebas, ya que le podemos poner una llave de 8192 bits y los equipos encargados de la VPN son pc's PIII 500Mhz 512RAM disco IDE 5400RPM, estos sin van resentir nuestra avaricia de seguridad y mas si vamos a entablar comunicacion con varios puntos.

Volviendo a el caso, ya tenemos nuestra llave(shared.key) creada la cual yo la hice en mi caja FreeBSD y la almacene en:

/usr/local/etc/openvpn/keys

Es momento de configurar ese lado de la conexión, mi archivo de configuración quedaria asi:


local W.X.Y.Z
port 1194
proto udp
dev tun
secret /usr/local/etc/openvpn/keys/shared.key
ifconfig 10.8.0.1 10.8.0.2
push "route 192.168.40.0 255.255.255.0"
route 192.168.50.0 255.255.255.0
keepalive 10 120
cipher AES-192-CBC   # AES
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
verb 0
daemon

NOTA: verb 0 para no arroje tanto log, pueden subirlo a mas cuando esten empezando por si hay errores poder leer los logs para ver si damos con el problema, una vez entablada y probada la conexion lo bajan a 0 para que no haya nada y salvar accesos a el disco y CPU, si hay problema lo vuelven a subir y de nuevo repiten el ciclo.

Recordar que siempre debemos mandar la red que estamos protegiendo, este FreeBSD es mi firewall para la red:

192.168.40.0/24

Por ello el parametro:

push "route 192.168.40.0 255.255.255.0"

Y mi otro punto que seria el Pfsense que protege la red:

192.168.50.0/24

route 192.168.50.0 255.255.255.0

Estos parametros al momento de entablar la comunicacion el 1ro envia esas ruta a el cliente remoto y el 2do agrega la ruta a el mismo, de lo contrario va a ver enlace pero de ahi no vamos a pasar.

Una vez hecho esto de lado de FreeBSD ya ven que estos sistemas controlan muchos demonios atraves del archivo /etc/rc.conf, ahi voy a poner que siempre que arranque el sistema cargue OpenVPN:


openvpn_enable="YES"
openvpn_if="tap"


Ya con esto listo, arrancamos ese punto:

/usr/local/etc/rc.d/openvpn start

Observemos las rutas que aparecen:

Figura 1: Ruta hacie el otro punto.
Como podran observar en la figura 1, aparece la ruta que dice que toda comunicacion hacia la red
192.168.50./24 se va ir por el gw 10.8.0.2 que es la conexion virtual que se crea con el otro punto una vez entablada la comunicacion.

Ahora vamos del lado de Pfsense, haya es atraves del GUI mas sencillo aun, y tenemos esta configuracion:

Figura 2: Configuracion de Pfsense Shared-Key.
Figura 3: Configuracion terminada.
Figura 4: Nuestro dashboard con la conexion establecida.
Figura 5: Ruta creada para el otro punto.
Reglas del Firewall.

Ya solo es cuestion de abrir sus reglas si es que son paranoicos y solo estan dejando salir/entrar lo que necesitan, entonces en su LAN deben crear lo necesario, alias de los servidores remotos, servicios, yo creo alias a los servidores/servicios remotos y solo dejo pasar lo que necesito no mas.

Del otro lado tambien, por ejemplo en FreeBSD solo tengo 2 reglas que voy a permitir:


pass in quick on $ovpn_if proto tcp from $SiteA to $web port http label "VPN Web Server Access"
pass in quick on $ovpn_if proto tcp from $SiteA to $spam port 3306 label "VPN MySQL Server Access"

$SiteA = Red remota que tiene Pfsense detras.

Es todo lo que voy a permitir, entonces esas mismas reglas debe haber algo que permita llegar a estos equipos y servicios y viceversa.

Como ultimo comentario, si tenemos un puño de servidores remotos a los cuales nos vamos a conectar atraves de Pfsense solo recordar que por cada uno debemos llevar a cabo la configuracion, entonces si tenemos 5 remotos, vamos a tener que crear 5 configuraciones, no necesitamos tener una NIC por cada tunel requerido, recordar que lo que manda es el par: IP-remoto:puerto, entoces nuestro pfsense va a tener 5 conexiones en el puerto 1194 por asi decirlo pero a distinto IP.

Bien es todo por hoy, espero les sirva este pequeño doc sobre pfsense y OpenVPN.

domingo, 29 de julio de 2012

Pfsense 2: Uptimes de clientes.

Como andan 2 equipos operando, vamos viendo sus uptimes:

Figura 1: Equipo 1.
Figura 2: Equipo 2.
Asi andan 2 de mis equipos, el 1ro ya tiene mas de 3 meses que no se reinicia, el 2do hace poco tuve que apagarlo por mantenimiento a las lineas electricas, pero ya lleva 2 meses sin parar que bueno solo que esta semana le toca actualizaese, saludos!!!

Pfsense 2:Squig logs y limites de la version nano.

Ya despues de haber tenido operando algunos equipos de pfsense v 2.x Nano, nos encontramos con unos detalles como estos:


pid 9466 (squid), uid 62 inumber 12 on /var: filesystem full
pid 9466 (squid), uid 62: exited on signal 6
pid 30806 (squid), uid 62 inumber 11 on /var: filesystem full
pid 30806 (squid), uid 62 inumber 12 on /var: filesystem full
pid 30806 (squid), uid 62: exited on signal 6
pid 31495 (squid), uid 62 inumber 11 on /var: filesystem full
pid 31495 (squid), uid 62 inumber 12 on /var: filesystem full
pid 31495 (squid), uid 62: exited on signal 6
pid 32215 (squid), uid 62 inumber 11 on /var: filesystem full
pid 32215 (squid), uid 62 inumber 12 on /var: filesystem full
pid 32215 (squid), uid 62: exited on signal 6
pid 32977 (squid), uid 62 inumber 11 on /var: filesystem full
pid 32977 (squid), uid 62 inumber 12 on /var: filesystem full
pid 32977 (squid), uid 62: exited on signal 6
pid 33551 (squid), uid 62 inumber 11 on /var: filesystem full
pid 33551 (squid), uid 62 inumber 12 on /var: filesystem full
pid 33551 (squid), uid 62: exited on signal 6
pid 58670 (squid), uid 62 inumber 11 on /var: filesystem full
pid 58670 (squid), uid 62 inumber 12 on /var: filesystem full
pid 58670 (squid), uid 62: exited on signal 6
pid 62870 (squid), uid 62 inumber 11 on /var: filesystem full
pid 62870 (squid), uid 62 inumber 12 on /var: filesystem full
pid 62870 (squid), uid 62: exited on signal 6
pid 10023 (squid), uid 62 inumber 11 on /var: filesystem full
pid 10023 (squid), uid 62 inumber 12 on /var: filesystem full
pid 10023 (squid), uid 62: exited on signal 6
pid 13814 (squid), uid 62 inumber 11 on /var: filesystem full
pid 13814 (squid), uid 62 inumber 12 on /var: filesystem full
pid 13814 (squid), uid 62: exited on signal 6
pid 14288 (squid), uid 62 inumber 11 on /var: filesystem full

Ahi caray, bueno el unico que puede provocar esto es squid, yo anteriormente tenia la idea de mantener 1 mes de logs(access.log) por si algo ocurria, pero al paso del tiempo lo que mas importaba era que Sarg lograra mostrar reportes de acceso, y lo ha esto haciendo sin problemas:

Figura 1: Reportes de Squid via Sarg.
Entonces, cual es la finalidad de mantener tantos logs?

Analizando un poco esto y entendiendo que la version Nano tiene limites por su tipo de arquitectura, algunos de ellos son:

a) /var es una particion en memoria, cada que se reinicia el sistema se crea de 0(dirian los gueros, from scratch) y ya tiene una tamaño definido cuando se compila, para cambiarlo deberiamos meternos a el codigo y hacer el cambio pero tomando en cuenta que todos los equipos tipo empotrados tienen distintas caracteristicas y una de ellos es la memoria.

Entonces si hacemos esto y creamos un /var de 128MB y nuestro equipo carece de memoria entonces ya tenemos problemas, por eso los desarrolladores optaron por ser realistas y decidieron darle un valor que con 256MB pueden correr un sistema sin tanto problema.

Figura 2: Tamaño de particiones.
La figura 2 muestra las particiones que son de tipo memoria y sus tamanos por default. Apartir de este momento vamos a cambiar la manera de rotar los logs, ya que teniamos un script que lo hacia.

Como podran ver tambien /tmp es tipo de memoria y se crea la momento de arrancar el sistema.

Nuestro script era este:


#1tomamos la variable para marcar nuestro log como el dia del mes
dia=`date '+%d'`
#2 nos movemos a el folder de logs de squid
cd /var/squid/logs/
#3 mandamos el contenido de access.log a el archivo nuevo de nombre $date.log
/bin/cat ./access.log > ./$dia.log
#4 vaciamos el contenido de access.log
/bin/echo -n '' > ./access.log
#5 confirmamos los permisos del archivo access.log
/usr/sbin/chown proxy:proxy ./access.log
#6 reconfiguramos squid
/usr/local/sbin/squid -k reconfigure
#7 comprimimos el archivo de log creado.
/usr/bin/gzip ./$dia.log

Este lo vamos a cambiar por este:


#1 nos movemos a el folder de logs de squid
cd /var/squid/logs/
#2 respaldamos el di de hoy solamente
/bin/cat ./access.log > ./access.bak
#3 vaciamos el contenido de access.log
/bin/echo -n '' > ./access.log
#4 confirmamos los permisos del archivo access.log
/usr/sbin/chown proxy:proxy ./access.log
#5 reconfiguramos squid
/usr/local/sbin/squid -k reconfigure
#6 comprimimos el archivo de log creado.
/usr/bin/gzip ./access.bak

Ya solo vamos a guardar 1 dia solamente, se va a ejecutar a la misma hora, y no vamos a tener tantos logs, de todos modos hasta el momento como mencione, sarg ha estado funcionando sin problemas, ya no es necesario tener tanta informacion inutil.

Solo vamos a tener:

  • access.log
  • access.bak
  • cache.log
Ya por ultimo seria cuestion de ver como controlar los reportes de sarg ya que tarde o temprano tambien van a llenar el disco, pero esa es otra historia, saludos!!!



sábado, 28 de julio de 2012

Windows: Respaldando SQL Server 2008 R2.

Esta vez vamos a tocar los respaldos de sql server, yo estoy trabajando sobre la version 2008 R2. Muy pocas veces me he metido con esta BD, pero como nos llego deseo conocer de ella, los respaldos de cualquier BD son de las tareas aparte de importantes de alta prioridad.

No quiero decir que las demas tareas de sistemas no lo sean pero estas tienen prioridad, todo lo que hagan debe tener su valor de prioridad.

SQL server tiene opcion de crear batches y ahi dentro uno armar su klabacero, quiero mencionar que el script que use lo tome de una persona, ahorita que lo vean ahi viene su nombre, yo solo lo adapte a mis necesidades.

Un detalle que le encontre a el script es que cuando se ejecuta el script diferencial(ahorita entramos en detalles) con la BD master truena con ella pero continua con las demas.

Cuando vi esto en el log rapidamiente me fui a googlear y por ahi localice docs de Redmont que nos dice que la BD master solo permite backups FULL, si no creen traten con "Server Management Studio" y traten de hacerlo, no los deja. 

Desconozco si en las versiones anteriores es diferente, pero no hay problema por que es una BD que pocas veces se modifica, si su caso es diferente entonces van a tener que crear un batch que la respalde diario.

Tipos de Respaldos, estoy trabajando sobre 2 solamente:

Full: Crea un respaldo completo.
Diferencial: Crea un respaldo con los datos que cambiaron en base a el ultimo respaldo.

Configuracion de Directorio de Respaldos:

A mi no me gusta usar el directorio que usa SQL Server, yo prefiero usar uno especifico para respaldos, yo en esta ocacion voy a crear un folder en el disco C: llamado Backups, quedaria asi la ruta:

C:\Backups

Agenda de Respaldos:

Vamos a usar el mismo Task Scheduler de Windows, en esta version si cambia pero la interface, los parametros continuan, vamos a confiurar asi mis respaldos:

Full: Lun, Miercoles, Viernes, Sabado.
Diferenciales: Martes, Miercoles, Jueves

Como mi servidor de produccion esta dentro de un dominio bajo Linux con samba+Ldap entonces mi autentificacion es atraves de Windows, es importante saber el nombre del equipo donde esta operando, en mi caso se llama:

WIN-U4I7H5GMO2U

Es la version SQL 2008 R2 Express mi instancia asi se llama:

sqlexpress

Esto pronto van a ver donde se va a usar.

Parece que ya tenemos la info que necesitamos, vamos a empezar por ver los scripts de respaldo, empezando por el Full.

Full Script: sql-bak-full.sql.

Contenido:

-- SQL Server backup routine to backup all databases
-- Jed S. Walker, 2011/10/03
-- to automate via job scheduler
--  sqlcmd -S theSQLserver\theWeather -i C:\SQLSERVERBACKUP\scripts\backup_db_all.sql -o C:\SQLSERVERBACKUP\backup_db_all.log
--Customize by: pmoreno at bajaopensolutions dot com 2012-07-25


PRINT '=>Setup base variables'
DECLARE @today VARchar(20)
DECLARE @dbname nvarchar(255)
DECLARE @backupname nvarchar(255)
DECLARE @backuploc nvarchar(255)
SET @backuploc = 'C:\Backups\'  
PRINT @backuploc
--SET @today = CONVERT(CHAR(8), GETDATE(), 112)
SET @today = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20), GETDATE(), 126),'-',''),':',''),'.','')
PRINT @today


---- backup all online databases
-- first get all databases to be backed up
DECLARE @dbList TABLE
( dbid INT,
  dbname NVARCHAR(256)
)
INSERT  INTO @dbList ( dbid, dbname )
SELECT  dbid, name
FROM    master.dbo.sysdatabases
WHERE   ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
ORDER BY dbid


------ Starting backup, one by one
DECLARE @maxid int;
DECLARE @curid int;
SELECT @curid = MIN(dbid)-1, @maxid = MAX(dbid) from @dbList;


PRINT '=> Perform backups'
WHILE @curid != @maxid
  BEGIN
    SELECT  TOP(1)
            @curid = dbid,
            @dbname = dbname
    FROM    @dbList
    WHERE   dbid > @curid;
    PRINT 'Debug: curid= ' + str(@curid) + ' maxid=' + str(@maxid)
    SET @backupname = @backuploc + @dbname + '_' + @today + '.bakF'
    PRINT N'=> Backup: ' + @dbname + ' to ' + @backupname
    BACKUP DATABASE @dbname TO DISK = @backupname with NOFORMAT, NOREWIND, INIT, SKIP, CHECKSUM, STOP_ON_ERROR
  END


PRINT ''
PRINT '=>Done with backups'


NOTA: Ahi viene el autor original.

Marque en Bold una instruccion esa indica que la BD tempdb no nos interesa, segun la doc de Sql Server no es critica esa BD.

Este script lo almaceno en el mismo directorio donde se van los respaldos C:\Backups.

Ahora viene el Diferencial:

Diff Script: sql-bak-diff.sql.
Contenido:


-- SQL Server backup routine to backup all databases Differential
-- Jed S. Walker, 2011/10/03
-- to automate via job scheduler
--   sqlcmd -S theSQLserver\theWeather -i C:\SQLSERVERBACKUP\scripts\backup_db_all.sql -o C:\SQLSERVERBACKUP\backup_db_all.log
-- Customize by pmoreno at bajaopensolutions dot com 2012-07-25




PRINT '=>Setup base variables'
DECLARE @today VARchar(20)
DECLARE @dbname nvarchar(255)
DECLARE @backupname nvarchar(255)
DECLARE @backuploc nvarchar(255)
SET @backuploc = 'C:\Backups\'  
PRINT @backuploc
--SET @today = CONVERT(CHAR(8), GETDATE(), 112)
SET @today = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20), GETDATE(), 126),'-',''),':',''),'.','')
PRINT @today


---- backup all online databases
-- first get all databases to be backed up
DECLARE @dbList TABLE
( dbid INT,
  dbname NVARCHAR(256)
)
INSERT  INTO @dbList ( dbid, dbname )
SELECT  dbid, name
FROM    master.dbo.sysdatabases
WHERE   ( name NOT IN ( 'tempdb','master' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
ORDER BY dbid


------ Starting backup, one by one
DECLARE @maxid int;
DECLARE @curid int;
SELECT @curid = MIN(dbid)-1, @maxid = MAX(dbid) from @dbList;


PRINT '=> Perform backups'
WHILE @curid != @maxid
  BEGIN
    SELECT  TOP(1)
            @curid = dbid,
            @dbname = dbname
    FROM    @dbList
    WHERE   dbid > @curid;
    PRINT 'Debug: curid= ' + str(@curid) + ' maxid=' + str(@maxid)
    SET @backupname = @backuploc + @dbname + '_' + @today + '.bakD'
    PRINT N'=> Backup: ' + @dbname + ' to ' + @backupname
    BACKUP DATABASE @dbname TO DISK = @backupname with DIFFERENTIAL, NOFORMAT, NOREWIND, INIT, SKIP, CHECKSUM, STOP_ON_ERROR
  END


PRINT ''
PRINT '=>Done with backups'

Ahora en bold les muestro como estoy agregando la BD master por lo que les mencione arriba hacerca de esta BD, no deseo crear respaldos diferenciales a ella por eso la marco en esa instruccion.

Ya tenemos nuestros sctripts sigue los batches que los van a ejecutar, estos son mas sencillos, aqui estan:

Batch Full: sql-backup-full.bat
Contenido:

sqlcmd -S WIN-U4I7H5GMO2U\sqlexpress -E  -i C:\Backups\sql-bak-full.sql -o C:\Backups\backupF.log

-S Nombre de instancia.
-E Usar conexion segura.
-i archivo de entrada
-o Archivo de salida (logs).

Batch Diff: sql-backup-diff.bat
Contenido:


sqlcmd -S WIN-U4I7H5GMO2U\sqlexpress -E  -i C:\Backups\sql-bak-diff.sql -o C:\Backups\backupD.log

Ahi pueden notar las diferencias, si las notan verdad?

Si desean probarlos antes de continuar es muy facil, solo abren su consola cmd en modo Administrador(es windows :-(...) se van a el directorio donde estan sus bacthes y scripts, en mi caso esta en el mismo lugar todos C:\Backups.

Ya dentro, solo ejecutan:

C:\Backups\sql-backup-full.bat

C:\Backups\sql-backup-diff.bat

Si no hay errores no van a recibir nada de salida, todo se va ir a los logs indicados en con el parametro -o.

Ahora vamos a llevar a cabo la programacion de la ejecucion de estos scripts, para esto abrimos nuestro Task Scheduler, esto es mas grafico y facil de hacer, vamos viendo los pasos:

Figura 1: Abrir el Task Scheduler.
Dentro del TS(Task Scheduler) creamos una tarea nueva.

Figura 2: Ingresamos datos basicos.
Vamos usar solo las pestañas: General, Triggers, Actions, las demas no.


Figura 3: Indicamos cuando deseamos la ejecucion.
Para que se vea la ejecucion estoy indicando el dia de hoy a las 6:11PM sabado, ustedes ya que lo vayan a llevar a produccion lo configuran a su manera.

Figura 4: Indicamos aqui la ruta del batch.
Sigan el wizard para indicarle donde esta el batch.

Figura 5: Configuracion Final.
Ya terminamos ahora es cuestion de esperar y ver si se lleva a cabo la tarae cuando se indica. Ya paso la hora indicada vamos a ver nuestro directorio a ver si se ejecuto:

Figura 6: Respaldos creados.
Como podran ver parece que funciono, ya solo es cuestion de terminar el Diff, si ya les funciono el Full, el diff ya es pan comido.

Ya solo quedaria probarlos, pero esa es otra historia que sigue despues de hacer creado sus respaldos.

Saludos.

lunes, 23 de julio de 2012

Windows 2008: SQL Server herramientas de desempeno SQLIO.

Como veran tambien le meto maquinas a servidores windows, tengo que montar un sql-server 2008 y no queda mas que correrlo sobre windows 2008 R2.

Como es un servidor de bd, me gustaria saber como esta mi sistema de archivos, y mas que va a ser virtual con Xen 4.1.

Existen varias herramientas que nos ayudan a darle carrilla a el disco duro, una de ellas es sqlio, se baja directamente de Microsoft:

sqlio-link.

Esta herramienta funciona de la consola, no es una version GUI, asi que pierdanle el miedo a la consola, con MS-DOS asi se hacian las cosas.

Todo esto lo estamos haciendo en base a la pagina:

sqlio-tutorial-link

Mi VM donde estoy probando eso tiene las siguientes caracteristicas:

OS: Windows 2008 R2 x64
RAM: 2048
Espacio disponible: 6GB.
Cores=2.

Empezamos:


a) abrir el notepad como administrador
b) abrir el archivo de nombre param que se localiza donde esta instalado el sqlio: c:\Program Files (x86)\sqlio\
c) Editarlo y incrementar el tamano mas que lo se tiene en RAM, en mi caso lo deje en 3072 quedaria asi:

c:\testfile.dat 2 0x0 3072

d) Salvar archivo.
e) Crear el archivo para las pruebas, no se preocupen por los resultados, aqui deseamos crear el archivo para las pruebas siguientes, entonces en la consola se van a el directorio donde quedo instalado el sqlio y ejecutan lo siguiente:

sqlio -kW -s10 -fsequential -t8 -o8 -b8 -LS -Fparam.txt timeout /T 10

Esto va a tardar ya que estamos creando el archivo, al final vamos a tener nuestro archivo del tamano deseado:

Figura 1: Creando archivo con sqlio.
Una vez terminado tenemos lo siguiente en nuestro disco "C", no es necesario que sea el C puede ser cualquier directorio y es altamente recomendable que sea el disco donde vayan a instalar SQL Server.

Figura 2: Archivo creado para pruebas.
f) Listo.

Ya tenemos nuestro archivo para ahora si llevar a cabo nuestras pruebas que van a masacrar el disco, esto le va a poner mano dura a el disco duro, recomendacion no lo hagan con el sistema de produccion, mucho menos durante las hors laborales, debe ser cuando el servidor no se este usando y en dado caso agendarlo y avisar con tiempo a los departamento afectados.

Ahora vamos a crear un batch donde vamos a meter los siguientes comandos repetidos solo vamos a cambiar uno de ellos pero vamos a ejecutar la misma tarea repetidamente asi que un batch se presta bien.

Abran el notepad(como administrador) y agreguen estos comandos:

Pueden ser tantos ustedes crean convenientes, la idea es probar distintos valores y saber donde nuestro sistema de archivos le favorece:

sqlio -kW -t2 -s60 -o1 -frandom -b8 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b8 -BH -LS
C:\TestFile.dat
 

sqlio -kW -t2 -s60 -o1 -frandom -b16 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b16 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b32 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b64 -BH -LS
C:\TestFile.dat

Que se llame: frandon-w.bat

Y ahora otro que lleve esto:

sqlio -kW -t2 -s60 -o1 -fsequential -b8 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b8 -BH -LS 
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -fsequential -b8 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -fsequential -b16 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60  -o1 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o2 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o4 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o8 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o16 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o64 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o128 -fsequential -b32 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o4 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o8 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o16 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o32 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o64 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o128 -fsequential -b64 -BH -LS
C:\TestFile.dat

Este que se llame: fseq-w.bat

k=Probar lectura(R)/Escritura(W).
t=Hilos.
o=Peticiones al mismo tiempo.
s= Tiempo de prueba.
b=Tamano de los paquetes deseados multiplos de 2.
f= tipo de accesos secuencial(sequential) o aleatorio(random)

Ya en un servidor debemos jugar con mas valores, ustedes empiecen a crear sus pruebas, como mas hilos (t4,t8)

Le ventaja de este batch es que podemos sacar los resultados a un archivo de texto cuando se ejecute y vamos a hacerlo asi:

trandon-w.bat > trandom.txt

Y el resultado lo podemos analizar con detalle ya que termine.

Figura 3. Resultados de SQLIO.
 Como podran ver los datos mas importantes son:

IOS= Entradas/Saludos x segundo.
MB/s = Megabytes x  Segundo.

Revisen su archivo y vean donde esos datos son altos de sus sistema de archivos, en mi caso es bajo por que es mi maquina de oficina y aqui tengo Ubuntu GUI, virtualbox, etx ejecutandose.

Pero en otra equipo tengo valores mas altos, ejecuten las demas pruebas  tendran un panorama de como anda su sistema de archivos, empezar a buscar donde ajustar, mas memoria, otro disco, mas cores, ajustar Windows 2008, en fin esto es solo para checar el pulso del sistema de archivos, voy a seguir agregando mas herramientas y luego ver como darle ajustes a el servidor, saludos!!!

domingo, 22 de julio de 2012

Centos 5.x: Herramientas de desempeño de disco y elevadores

Ahora vamos a ver como esta eso de los famosos elevadores, cuando esta armando maquinas virtuales algo muy importante es que tu sistema de archivos sea lo mas rapido posible para poder soportar la carga que las  vm(Virtual Machine=Maquinas Virtuales) le van a dar.

Aqui no voy a meterme con las vm, ya que estamos hablando solo del host donde se van a montar la vm, lo que voy a tocar son correrle ciertas utlilerias a mi disco y usando los 4 elevadores que son los que controlan los accesos a nuestros discos duros para saber si estamos con el elevador correcto.

Va a ver mucha info hacerca de los elevadores, pero vamos viendo como se comportan cada uno, tampoco voy a cambiar sus parametros, asi como los carga les vamos a correr las siguientes herramientas:

  • bonnie
  • bonnie++
  • dd
  • hdparm

Para empezar y ademas vamos a ver si los parametros extras que podemos agregarle a nuestras particiones cuando las montamos afecta el desempeno como:

  • noatime
  • nodiratime
  • data=writeback (peligrosa)

Estas tareas son muy tediosas, asi que si lo repiten haganlo cuando tengan tiempo.

Otra cosa, como en mi caso voy a trabajar con Xen voy a ver si si host tiene mejor desempeno con 2 cores, que con 1, xen dice que el host requiere solo 1 core, pero vamos a ver que dicen las pruebas.

Nuestras particiones son estas:


mount
/dev/mapper/VolGroup00-ROOT on / type ext3 (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/mapper/VolGroup00-VAR on /var type ext3 (rw)
/dev/mapper/VolGroup00-TMP on /tmp type ext3 (rw)
/dev/mapper/VolGroup00-OPT on /opt type ext3 (rw)
/dev/mapper/VolGroup00-USR on /usr type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)


Como podran ver es la instalacion comun, utilizando el elevador por defecto: cfq.


Entonces vamos a empezar con esta configuracion:


Core = 1
Memoria: 1024MB=1GB
DDR3 1333 No ECC.

Hemos deshablitado servicios que no necesito, solo los necesarios para que Xen funcione.

Vamos a atacar la particion donde tengo mis vm's /opt, vamos a empezar.

NOTA: Que su equipo no este en produccion y sobre todo que no esta ejecutando ningun servicio como apache, mysql, etc.

==Caso A==

Bonnie: Bonnie por default creo un archivo de 100MB lo cual no es conveniente ya que dice el manual que no estamos en realidad atacando el disco si no la memoria, por ello vamos a ejecutar el comando asi:

bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun

-d = directorio temporal donde crear el archivo
-s = Tamaño del archivo, regla doble de memoria.
-m= Nombre de la maquina.

Vamos a ejecutar la tarea 3 veces continuas para sacar un promedio.

Ejecucion
(1)

Bonnie 1.5: File '/opt/bonnie//Bonnie.3091', size: 2147483648, volumes: 1
Writing with putc()...
[root@localhost opt]# bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /                                                                                                                    opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun                                                                                                                     


Bonnie 1.5: File '/opt/bonnie/Bonnie.3093', size: 2147483648, volumes: 1
Writing with putc()...         done:  63964 kiB/s  85.9 %CPU
Rewriting...                   done:  35605 kiB/s   2.2 %CPU
Writing intelligently...       done:  78111 kiB/s  23.5 %CPU
Reading with getc()...         done:  53584 kiB/s  60.3 %CPU
Reading intelligently...       done:  81520 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.161ms, eff 3.964ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63964 85.9 78111 23.5 35605  2.2 53584 60.3 81520  0.4  240.4  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1


(2)



Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1
Writing with putc()...         done:  65973 kiB/s  88.3 %CPU
Rewriting...                   done:  34359 kiB/s   2.2 %CPU
Writing intelligently...       done:  76424 kiB/s  24.4 %CPU
Reading with getc()...         done:  39146 kiB/s  71.7 %CPU
Reading intelligently...       done:  81498 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.095ms, eff 3.898ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 65973 88.3 76424 24.4 34359  2.2 39146 71.7 81498  0.5  244.2  0.0

(3)

Bonnie 1.5: File '/opt/bonnie/Bonnie.3123', size: 2147483648, volumes: 1
Writing with putc()...         done:  66193 kiB/s  88.4 %CPU
Rewriting...                   done:  36434 kiB/s   2.2 %CPU
Writing intelligently...       done:  77621 kiB/s  23.3 %CPU
Reading with getc()...         done:  57385 kiB/s  63.7 %CPU
Reading intelligently...       done:  75734 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.239ms, eff 4.027ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 66193 88.4 77621 23.3 36434  2.2 57385 63.7 75734  0.4  235.9  0.0

Promedios
Writing:(63964+65973+66193)/3=65376=66MB/s
Writing Intelligently:(78111+76424+77621)/3=77385=77MB/s
Rewriting:(35605+34359+36434)/3=35466=36MB/s
Reading with getc:(53584+39146+57385)/3=50038=50MB/s
Reading Intelligently:(81520+81498+75734)3=79584=80MB/s

Bonnie++: Es una version mejorada de bonnie, tiene mas parametros, vamos a usar estos:

bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon1.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon2.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon3.html

NOTA: Vamos a mandar la salida a HTML.

-d = igual que bonnie
-s = Tamaño del archivo a crear
-n = bonnie -m
-r  = ram que tenemos, se supone que el detecta, pero mejor se lo digo.
-x =  cuantas pasadas van a ejecutar
-u = usuario que lo va a ejecutar.

Resultados
Figura 1: Corrida 1.
Figuar 2: Corrida 2.
Figura 3: Corrida 3.
Ya tenemos los datos de buscabamos, viendolos podran notar que son algo parecidos a los de bonnie. 

dd: Herramienta basica, genera archivos en forma secuencial pero tambien nos da informacion de como es el desempeño de nuestro disco duro.

Parametros:
dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096

Vamos a crear 1 archivo de 4GB de nombre Test.img dentro de la particion /opt, asi de simple.

Ejecucion
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 52.9619 seconds, 81.1 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.7946 seconds, 88.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.0801 seconds, 91.2 MB/s

hdparm: Otra herramiento basica, con esta podemos probar el cache de nuestro disco duro, y deben correr tambien la tarea mas de una vez, parametros:

-t=lecturas del disco.
-T=lectura de cache.

Ejecucion
/dev/sda:
 Timing cached reads:   11752 MB in  1.99 seconds = 5892.22 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.24 MB/sec

/dev/sda:
 Timing cached reads:   11892 MB in  1.99 seconds = 5962.68 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.23 MB/sec

/dev/sda:
 Timing cached reads:   11828 MB in  1.99 seconds = 5930.86 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.09 MB/sec

Notaran que cuando ejecuta la lecturas del cache, su led de disco no prende, es por que esta trabajando directamente el cache del disco duro.

Ya tenemos los primeros numeros, ahora viene la misma corrida pero vamos a empezar a modificar nuestra configuracion, vamos empezando por agregar los siguientes parametros a nuestros montajes:

/dev/VolGroup00/ROOT    /               ext3    defaults,noatime        1 1
/dev/VolGroup00/VAR     /var            ext3    defaults,noatime     1 2
/dev/VolGroup00/TMP     /tmp            ext3    defaults        1 2
/dev/VolGroup00/OPT     /opt            ext3    defaults,noatime     1 2
/dev/VolGroup00/USR     /usr            ext3    defaults,noatime        1 2

Reiniciamos y repetimos los mismos comandos...

Solo estamos agregando el parametro "noatime", que segun el libro si no lo especificamos seria "atime", que dice que por cada acceso a los inodos actualiza el tiempo de acceso, y segun los expertos mas vale que no lo haga y mas en sistemas que tienen constante acceso a el disco, yo hasta la fecha no he encontrado algun software que haga uso de esta informarcion por ello siempre la deshabilito con "noatime".

Empezamos de nuevo:

===Caso B===
Bonnie:

Bonnie 1.5: File '/opt/bonnie/Bonnie.3063', size: 2147483648, volumes: 1
Writing with putc()...         done:  71408 kiB/s  93.7 %CPU
Rewriting...                   done:  38015 kiB/s   1.9 %CPU
Writing intelligently...       done:  90543 kiB/s  25.0 %CPU
Reading with getc()...         done:  64227 kiB/s  71.3 %CPU
Reading intelligently...       done:  90323 kiB/s   0.3 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.007ms, eff 3.830ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 71408 93.7 90543 25.0 38015  1.9 64227 71.3 90323  0.3  249.6  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3078', size: 2147483648, volumes: 1
Writing with putc()...         done:  63999 kiB/s  88.4 %CPU
Rewriting...                   done:  38327 kiB/s   2.3 %CPU
Writing intelligently...       done:  90461 kiB/s  27.3 %CPU
Reading with getc()...         done:  60798 kiB/s  67.7 %CPU
Reading intelligently...       done:  88156 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.922ms, eff 3.740ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63999 88.4 90461 27.3 38327  2.3 60798 67.7 88156  0.5  255.0  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3092', size: 2147483648, volumes: 1
Writing with putc()...         done:  67461 kiB/s  90.3 %CPU
Rewriting...                   done:  38401 kiB/s   1.9 %CPU
Writing intelligently...       done:  87783 kiB/s  26.4 %CPU
Reading with getc()...         done:  67832 kiB/s  74.8 %CPU
Reading intelligently...       done:  82805 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.751ms, eff 3.557ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 67461 90.3 87783 26.4 38401  1.9 67832 74.8 82805  0.5  266.6  0.0


Comparen los valos con el caso A, hemos ganado desempeño el algunos puntos se incremento nuestro desempeño con este cambio. Ahora vamos a ver la siguiente prueba.

Bonnie++: Resultados.

Figura 4: Corrida 1.
Figura 5: Corrida 2.
Figura 6: Corrida 3.
dd: Resultados.


4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 51.8139 seconds, 82.9 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.2685 seconds, 89.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.1664 seconds, 91.1 MB/s

hdparm: Lo muestro pero esto ya es mas cuestion del disco duro.


/dev/sda:
 Timing cached reads:   11772 MB in  1.99 seconds = 5902.72 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.22 MB/sec


/dev/sda:
 Timing cached reads:   11976 MB in  1.99 seconds = 6005.53 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.33 MB/sec


/dev/sda:
 Timing cached reads:   11824 MB in  1.99 seconds = 5928.42 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.05 MB/sec


Ya pueden hacer comparaciones.

Ahora viene la opcion de agregarle el 2do core...