martes, 26 de marzo de 2013

Mysql Tuning para principiantes


Hoy vamos a ver un script de tuning para Mysql, ideal para administradores principiantes o que no dispongan de mucho tiempo para adentrarse en los parámetros de configuración de Mysql. Lo podemos descargar directamente de github en la siguiente web:


Al ejecutarlo nos pedirá un usuario con permisos globales y un password. Comprobará el estado del servidor indicándonos los parámetros a modificar, para obtener un rendimiento optimo. Tiene cuatro secciones principales:
  1. Estadísticas Generales; comprueba si es la última versión del script, si la versión de mysql está soportada, si el sistema operativo es de 64 bits. 
  2. Estadísticas del motor de almacenamiento. MySAM, InnoDB, etc. 
  3. Recomendaciones de seguridad. Comprueba usuarios locales, usuarios anónimos  password en blanco, usuarios remotos, etc. 
  4. Métricas de rendimiento. Aquí es donde usando las tablas de estadísticas y rendimiento del servidor nos va a mostrar el estado del motor. Desde cuando está funcionando, bytes enviados y recibidos. El tanto por ciento de aciertos de las diferentes caches/buffers, etc.

Primera Execución

Haremos una primera ejecución para ver el estado del servidor:

>> MySQLTuner 1.2.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.95
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------

[--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 3G (Tables: 20)
[--] Data in InnoDB tables: 5M (Tables: 209)
[!!] BDB is enabled but isn't being used
[!!] Total fragmented tables: 3

-------- Security Recommendations -------------------------------------------
[!!] User '@localhost' has no password set.
[!!] User '@server.mydomain.com' has no password set.
[!!] User 'root@127.0.0.1' has no password set.
[!!] User 'root@server.mydomain' has no password set.

-------- Performance Metrics -------------------------------------------------

[--] Up for: 13d 0h 39m 23s (4M q [3.579 qps], 499K conn, TX: 841M, RX: 7B)
[--] Reads / Writes: 55% / 45%
[--] Total buffers: 34.0M global + 2.7M per thread (100 max threads)
[OK] Maximum possible memory usage: 309.0M (7% of installed RAM)
[OK] Slow queries: 0% (40/4M)
[OK] Highest usage of available connections: 21% (21/100)
[!!] Key buffer size / total MyISAM indexes: 8.0M/4.9G
[!!] Key buffer hit rate: 92.0% (1B cached / 99M reads)
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (49 temp sorts / 48K sorts)
[OK] Temporary tables created on disk: 10% (3K on disk / 30K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 10K opened)
[OK] Open file limit used: 6% (70/1K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[OK] InnoDB data size / buffer pool: 5.9M/8.0M

-------- Recommendations -----------------------------------------------------

General recommendations:
Add skip-bdb to MySQL configuration to disable BDB
Run OPTIMIZE TABLE to defragment tables for better performance
Enable the slow query log to troubleshoot bad queries
Set thread_cache_size to 4 as a starting value
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
key_buffer_size (> 4.9G)
query_cache_size (>= 8M)
thread_cache_size (start at 4)
table_cache (> 64)

Tuning

  • Lo primero que haremos es borrar los usuarios anónimos y poner passwords a los usuarios locales.
  • Añadiremos skip-bdb en el fichero /etc/my.cnf para des-habilitar el motor de bases de datos de Berkley, ya que no se usa.

# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb

  • Recomienda realizar un  OPTIMIZE TABLE para desfragmentar tables para un mejor rendimiento. En este caso la tabla que esta más fragmentada es "data_bin" de la base de datos "centreon_storage". Es una tabla grande y que recoge datos de rendimiento de los servidores. Realizaremos su optimización de forma periódica.
  • Activaremos el "slow query log" para poder ver posibles consultas mal realizadas o lentas. Añadiremos en my.cnf:
log-slow-queries=/var/log/mysql/slow.log

Y crearemos los directorios y ficheros con los permisos correspondientes:
mkdir -p /var/log/mysql/
touch /var/log/mysql/slow.log
chmod 660 /var/log/mysql/slow.log
chown mysql:mysql /var/log/mysql/slow.log
  • Configuraremos la variable "thread_cache_size" a 4 como valor de inicio.
  • Incrementaremos de forma gradual los limites de caches y buffers:
key_buffer_size = 1024M
query_cache_size = 16M
thread_cache_size = 16M
table_cache = 128M
join_buffer_size = 8M

Reiniciamos Mysqld i volvemos a ejecutar el script para ver como se reflejan los cambios.

Estado final


>> MySQLTuner 1.2.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password:

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.95-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 3G (Tables: 20)
[--] Data in InnoDB tables: 5M (Tables: 209)
[!!] Total fragmented tables: 1

-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 3h 35m 32s (93K q [7.259 qps], 6K conn, TX: 68M, RX: 15M)
[--] Reads / Writes: 30% / 70%
[--] Total buffers: 1.0G global + 10.6M per thread (100 max threads)
[OK] Maximum possible memory usage: 2.1G (53% of installed RAM)
[OK] Slow queries: 0% (0/93K)
[OK] Highest usage of available connections: 21% (21/100)
[OK] Key buffer size / total MyISAM indexes: 1.0G/4.8G
[OK] Key buffer hit rate: 100.0% (7M cached / 591 reads)
[OK] Query cache efficiency: 86.1% (30K cached / 35K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 515 sorts)
[OK] Temporary tables created on disk: 1% (29 on disk / 2K total)
[OK] Thread cache hit rate: 99% (21 created / 6K connections)
[OK] Table cache hit rate: 81% (255 open / 313 opened)
[OK] Open file limit used: 0% (76/65K)
[OK] Table locks acquired immediately: 100% (18K immediate / 18K locks)
[OK] InnoDB data size / buffer pool: 5.9M/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance

Se puede observar de forma global que los resultados han mejorado de forma considerable. Las tablas de rendimiento se vacían cada vez que se reinicia mysql, por eso es bueno ejecutar el script de tuning pasado una semana, de está forma las estadísticas de rendimiento y uso nos darán unos valores más reales. 


viernes, 22 de marzo de 2013

Cambio de IP de las System Controller E4900


Hoy vamos a ver como cambiar las IP de las dos System Controller de un Sun Fire E4900. Deberemos modificar la IP de forma remota, reiniciar y posteriormente cambiar la VLAN. El motivo es el de aislar la red de consolas de la red de servicio. Esperamos que con esto se solucione un problema que tienen las system controller, al parecer y según Oracle de forma extraoficial; "Se han encontrado que las consolas en redes con mucho tráfico acaban dejando de responder por ssh". Al parecer es nuestro caso. Actualmente la System Controller Slave no repsonde y de forma periódica debemos de reiniciarlas. 

Pasos a seguir

  1. Reboot de la Slave System Controller
  2. Conectar a la Slave System Controller
  3. Cambiar la IP y red de la Slave System Controller
  4. Cambiar la VLAN de la Slave System Controller
  5. Hacer un cambio de Slave to Main.
  6. Conectar a la Main System Controller
  7. Cambiar la IP y red de la Main System Controller
  8. Cambiar la VLAN de la Main System Controller
  9. Hacer un cambio de Slave to Main.

Cambiar IP de la Slave System Controller

server_sc0:sc> showplatform
The system controller is configured to be on a network.
Network settings: static
Hostname: server_sc0
IP Address: 192.168.0.3
Netmask: 255.255.255.0
Gateway: 192.168.0.1
DNS Domain:
Primary DNS Server:
Secondary DNS Server:
Connection type: ssh
Idle connection timeout : No timeout
SNTP server:
SC POST diag Level: min
SC Failover: enabled but not active.
Persistent log option is not available in user mode.

server_sc0:sc> setupplatform -p network
Network Configuration
---------------------
Is the system controller on a network? [yes]:
Use DHCP or static network settings? [static]:
Hostname [hostname]: server_sc0
IP Address [xx.x.xx.xx]: 10.11.10.3
Netmask [xxx.xxx.xxx.x]: 255.255.0.0
Gateway [xx.x.xx.x]: 10.11.10.101
DNS Domain [xxxx.xxx.xxx]: blank
Primary DNS Server [xxx.xxx.xxx.xx]: blank
Secondary DNS Server [xxx.xxx.xx.x]: blank
To enable remote access to the system controller, select "ssh" or
"telnet."
Connection type (ssh, telnet, none) [none]: ssh
Rebooting the SC is required for changes in the above network
settings to take effect.
Idle connection timeout (in minutes; 0 means no timeout) [0]: 10

server_sc0:sc>reboot

Esperar 5 minutos.

Cambiar la VLAN.

Hacer ping a la nueva IP y conectarse.
server_sc0:sc>showfailover -v
server_sc0:sc>setfailover on
server_sc0:sc>showfailover -v

Hacer un failover de forma manual.
server_sc0:sc>setfailover force
server_sc0:sc>showfailover -v

Comprobar que sc0 es la SC Main.

Cambiar la IP de la Main System Console

server_sc1:SC> showplatform
Domain Solaris Nodename Domain Status Keyswitch
-------- ------------------ ----------------------- -------------
A server Active - Solaris on
B - Powered Off standby
C - Powered Off off
D - Powered Off off

Only domain A is enabled in partition0.
The system controller is configured to be on a network.
Network settings: static
Hostname: server_sc1
IP Address: 192.168.0.4
Netmask: 255.255.255.0
Gateway: 192.168.0.1
DNS Domain:
Primary DNS Server:
Secondary DNS Server:
Connection type: ssh
Idle connection timeout : No timeout
Loghost for Platform:
Log Facility for Platform: local0
SNTP server:
SNMP Agent: enabled
Chassis Description: Sun Fire E4900
Chassis Contact:
Chassis Location:
Trap Hosts:
Public Community String: public
Private Community String: public
ACL for Domain A: SB0 SB2 SB4 IB6 IB8
ACL for Domain B: SB0 SB2 SB4 IB6 IB8
ACL for Domain C: SB0 SB2 SB4 IB6 IB8
ACL for Domain D: SB0 SB2 SB4 IB6 IB8
Chassis HostID: ABCEFG
PROC RTUs installed: 1
PROC Headroom Quantity: 4
PROC RTUs reserved for domain A: 5
PROC RTUs reserved for domain B: 0
PROC RTUs reserved for domain C: 0
PROC RTUs reserved for domain D: 0
SC POST diag Level: min
SC Failover: disabled
Logical Hostname:

Chassis is in single partition mode.
UltraSPARC IV+ is supported in partition 0

Frame: 0003ba:6bea48 (Tue Jan 15 14:11:28 CET 2013)
Fail LED:Off Service LED:Off
Frame Fan Trays
Left Tray Right Tray
State: OK OK
Power LED: On On
Fault LED: Off Off
Service LED: Off Off
Speed: Slow Slow
Temperature: Normal Normal
Power: OK OK
Fan 0: OK OK
Fan 1: OK OK
Fan 2: OK OK
Frame RTS
Rear/Left - OK, Connected to the System
Rear/Right - OK
Front/Left - Not Present
Front/Right - Not Present

Persistent log option is not available in user mode.


server_sc1:SC> setupplatform -p network
Network Configuration
---------------------
Is the system controller on a network? [yes]:
Use DHCP or static network settings? [static]:
Hostname [hostname]: server_sc1
IP Address [xx.x.xx.xx]: 10.11.10.4
Netmask [xxx.xxx.xxx.x]: 255.255.0.0
Gateway [xx.x.xx.x]: 10.11.10.101
DNS Domain [xxxx.xxx.xxx]: blank
Primary DNS Server [xxx.xxx.xxx.xx]: blank
Secondary DNS Server [xxx.xxx.xx.x]: blank
To enable remote access to the system controller, select "ssh" or
"telnet."
Connection type (ssh, telnet, none) [none]: ssh
Rebooting the SC is required for changes in the above network
settings to take effect.
Idle connection timeout (in minutes; 0 means no timeout) [0]: 10

server_sc1:SC>reboot

Cambiar la VLAN.

Esperar 5 minutos.

Hacer ping y volver a conectar.
server_sc0:sc>showfailover -v
server_sc0:sc>setfailover on
server_sc0:sc>showfailover -v

Cambiar el /etc/hosts del servidor.

Saludos!!


jueves, 21 de marzo de 2013

Monitorización de VMWARE con Centreon/Nagios

Buenos días,

 hoy vamos a ver como monitorizar nuestro servidores de vmware desde Centreon o Nagios. El mejor sitio para empezar a buscar scripts i recursos de monitorización de Nagios es "Nagios Exchange". Tanto usando la búsqueda como navegando por sus categorías nos podemos encontrar una gran cantidad de scripts para casi todos nuestros dispositivos, servidores o servicios.

Recordar que cualquier script de Nagios es plenamente compatible con Centreon.

De Vmware hay unos cuantos con buenas referencias. Yo personalmente he usado el siguiente ya que me parece maduro y con ciertas garantías. Ha sido desarrollado por el equipo "OP5". Se encargan de realizan un producto de monitorización profesional propio y dan cierta sensación de seguridad.

Una vez descargado el script, al leer el README podemos ver que hay que hacer unos preparativos previos antes de su instalación. El pilar básico de funcionamiento es el "vSphere SDK for Perl", es un software de desarrollo en PERL hecho por vmware para poder consultar las API de sus productos. Para poder descargarlo tenemos que tener un usuario y password en www.vmware.com, el registro es gratuito.

El link directo de descarga es el siguiente:

Descargaremos la versión 5.1
VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz

Un punto fuerte de la instalación es que está todo bien documentado por parte de vmware. La documentación la podéis encontrar aquí.

Nuestro servidor de Centreon corre con RHEL 5.9, así que los requisitos de instalación son los siguientes:


Después hay una serie de módulos que la propia instalación descarga de los repositorios oficiales de redhat o los descarga de Perl mediante CPAN. El tema de los requerimientos de perl a veces es un poco tedioso, ya que hay paquetes en el repositorio y  otros que solo se encuentran por CPAN. Algunas veces nos podemos encontrar que se han de mezclar ambos para que nuestro software funcione. 
Mi recomendación es instalarlos o desde el repositorio de redhat o desde el Perl CPAN perno no mezclar ya que podría darnos problemas en el fututo. En este caso no hay otra opción que ir complementando ambas fuentes de paquetes.

Paquetes/módulos de Perl requeridos:

Crypt-SSLeay-0.55 (0.55-0.9.7 or 0.55-0.9.8)   
IO-Compress-Base-2.037   
Compress-Zlib-2.037   
IO-Compress-Zlib-2.037
Compress-Raw-Zlib-2.037   
Archive-Zip-1.28   
Data-Dumper-2.121   
XML-LibXML-1.63   
libwww-perl-5.805   
LWP-Protocol-https-6.02   
XML-LibXML-Common-0.13   
XML-NamespaceSupport-1.09   
XML-SAX-0.16   
Data-Dump-1.15   
URI-1.37
UUID-0.03
SOAP-Lite-0.710.08
HTML-Parser-3.60
version-0.78
Class-MethodMaker-2.10
Una vez se ha conseguido cumplir con los requerimientos, realizaremos la instalación de SDK:

# tar -xvf VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz
# cd vmware-vsphere-cli-distrib/
#./vmware-install.pl

Aceptaremos la EULA (End User Licencese Agreement) y dejaremos que instalé paquetes y dependencias. Al acabar habrá dejado el modulo de perl en su directorio correspondiente.

Para ver que realmente el modulo de perl exista lo podemos hacer con el siguiente comando:

# perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' |grep VMware
/usr/lib/perl5/5.8.8/VMware/VIM2Stub.pm
/usr/lib/perl5/5.8.8/VMware/VILib.pm
/usr/lib/perl5/5.8.8/VMware/VICredStore.pm
.
.
.
.

Solo nos queda copiar el script de Nagios Exchange en nuestro directorio de plugins de Nagios y probarlo:

#cp check_vmware_api.pl /usr/lib64/nagios/plugins
# cd /usr/lib64/nagios/plugins
#./check_vmware_api.pl
Usage: check_vmware_api.pl -D <data_center> | -H <host_name> [ -C <cluster_name> ] [ -N <vm_name> ]
    -u <user> -p <pass> | -f <authfile>
    -l <command> [ -s <subcommand> ] [ -T <timeshift> ] [ -i <interval> ]
    [ -x <black_list> ] [ -o <additional_options> ]
    [ -t <timeout> ] [ -w <warn_range> ] [ -c <crit_range> ]
    [ -V ] [ -h ]

Missing argument: command

Vamos a probar de lanzar alguna consulta a nuestro servidor de VCENTER para ver si todo funciona.
#./check_vmware_api.pl -D vcenter -C MY_CLUSTER -u myuser -p mypassword -l runtime list
CHECK_VMWARE_API.PL CRITICAL - Server version unavailable at 'https://vcenter:443/sdk/vimService.wsdl' at /usr/lib/perl5/5.8.8/VMware/VICommon.pm line 545

Si nos aparece esté error pueden ser dos cosas. Las consultas se realizan con SOAP, XML y HTTPS. Recordar desactivar la variable de "https_proxy" del sistemas, ya que la consulta es en nuestra red y no queremos que pase por el proxy.

#unset https_proxy

Y por otra banda añadir al script de Nagios Exchange la siguiente línea, justo después del la línea del interprete perl:

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

Evitará verificar el certificado SSL.

Lo volvemos a probar:
#./check_vmware_api.pl -D vcenter -C MY_CLUSTER -u myuser -p mypassword -l runtime list
CHECK_VMWARE_API.PL OK - 450/499 VMs up, overall status=green, no config issues | vmcount=450units;;
Funciona perfectamente. Para más delante miraremos de añadir los chequeos en Nagios/Centreon de los host/hipervisores, cluster, virtual center y máquinas virtuales.


Saludos!!



martes, 19 de marzo de 2013

Buscando ficheros grandes en Linux

Hola a todos,

 una de las alarmas más comunes en los servidores es la de falta de espacio en disco. Normalmente suele ser un log de alguna aplicación que se ha descontrolado, generalmente se puede solventar de foma rapida truncando el fichero y dejando que se vuelva a generar. Eso si, guardando los ultimos 7 dias de log.

Para ampliar el chuletario, yo siempre utilizo esté comando situandome en el filesystem en cuestión.

find . -xdev -size +1024M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

Un find que busca en "." el FS actual, para ello se usa el comando "-xdev" que limita la busqueda al filesystem actual, +1024M son ficheros de más de este tamaño. Posteriormente ejecuta un listado con los comandos a gusto del consumidor, para finalmente quedarnos con las columnas 5 i 9 que son el nombre del fichero i el tamaño. El resultado sería algo tal que así:

ricard@mycomputer:~$ find . -xdev -size +1024M -exec ls -lh {} \; | awk '{ print $5 ": " $9 }' |sort
2.9G: ./Downloads/backup-lamp-prd/backup.sql.tar
2.9G: ./isos/rhel-server-6.2-i386-dvd.iso
2.9G: ./isos/rhel-server-6.3-i386-dvd.iso
3.0G: ./isos/rhel-server-5.6-i386-dvd.iso
3.1G: ./isos/BT5R3-GNOME-64.iso
3.3G: ./isos/rhel-server-5.8-i386-dvd.iso
3.4G: ./isos/rhel-server-6.2-x86_64-dvd.iso
3.5G: ./isos/rhel-server-6.3-x86_64-dvd.iso
3.9G: ./isos/rhel-server-5.8-x86_64-dvd.iso
7.4G: ./Downloads/backup.sql
Si añadimos al final un sort, nos quedará ordenado de menor a mayor.

Espero que os sea de utilidad.

Saludos.

lunes, 18 de marzo de 2013

RHEL: Agregar servidor a RHN

Hola a todos,

 hoy vamos a ver como agregar un servidor Red Hat Enterprise Linux (RHEL) a la Red Hat Network (RHN), desde está red de Red Hat podremos instalar/des-instalar/actualizar los paquetes de los servidores. Es el principal paso a realizar una vez instalado el servidor. Para ello se necesita que el servidor disponga de una licencia válida activa en la RHN

Todas las acciones la realizaremos usando el comando "yum".

Si es necesario un proxy para su salida a Internet se recomienda configurar las variables de entorno en el fichero /etc/profile:

ftp_proxy=http://yourproxy.yourdomain.com:80 http_proxy=http://yourproxy.yourdomain.com:80 https_proxy=http://yourproxy.yourdomain.com:80

El fichero /etc/profile cargará las variables a todos los usuarios que hagan login en el sistema.

Registraremos el servidor. Cambiar el parámetro "proxy" por vuestro proxy de salida a Internet:

# rhn_register --proxy=http://yourproxy.yourdomain.com:80



En la siguiente pantalla seleccionaremos "Next".







Pondremos nuestro usuario y password de Red Hat Network y "Next".







Nos indicará el nombre del perfil del servidor y si queremos enviar la información de hardware y red. 

Seleccionaremos "Next".







Enviaremos el catalogo de paquetes instalados. Seleccionamos "Next".







Enviamos la información a la RHN. Seleccionamos "Next".










Finalmente "OK".







Y "Finish".






Si no disponemos de licencias o si no hay canales disponibles saldrá un mensaje de advertencia indicándolo.



El servidor ya está registrado, lo podemos probar haciendo un búsqueda de un paquete:


#yum search
nmap Loaded plugins: downloadonly, rhnplugin, security ============================================ Matched: nmap =============================================
nmap.i386 : Network exploration tool and security scanner nmap-frontend.i386 : Gtk+ frontend for nmap

De momento esto es todo, más adelante instalaremos paquetes y actualizaremos el sistema.
Saludos!!


miércoles, 13 de marzo de 2013

Instalación y configuración de logwatch

Logwatch es una herramienta que de forma diaria envia un correo resumen, de los cambios que se han realizado en los servidores. Se recorre los logs más comunes messages, last, df -h, espacio, etc.

Para su instalación:
# yum install logwatch
Una vez instalado hay que configurar  el servidor de correo. En nuestro caso usaremos postfix. Lo primero en /etc/aliases cambiaremos root por nuestra dirección de correo a enviar correos:

# vi /etc/aliases

# Person who should get root's mail
root: root@mydomain.com

En el fichero de configuración de postfix /etc/postfix/main.cf añadiremos los siguientes campos:

myhostname = myhostname.mydomain.com
mydomain = mydomain.com
mynetworks_style = subnet
relayhost = 192.168.1.3

Reiniciamos postfix:

#service postfix restart

Ejecutamos logwatch.

#logwatch

Podemos ver como sale el correo en /var/log/maillog

#tail -f /var/log/maillog
Mar 12 10:11:11 myserver postfix/smtp[20048]: 7E2361E4: to=<root@mydomain.com>, orig_to=<root>, relay=192.168.1.3[192.168.1.3]:25, delay=0.14, delays=0/0.07/0/0.06, dsn=2.6.0, status=sent (250 2.6.0  <20130312091111.7AE81177@mydomain.com> Queued mail for delivery)
Mar 12 10:11:11 myserver postfix/qmgr[19702]: 7E2361E4: removed
Lo que recibiremos en el correo es lo siguiente:

 ################### Logwatch 7.4.0 (03/01/11) ####################
        Processing Initiated: Tue Mar 12 10:39:18 2013
        Date Range Processed: yesterday
                              ( 2013-Mar-11 )
                              Period is day.
        Detail Level of Output: 0
        Type of Output/Format: stdout / text
        Logfiles for Host: myhost.mydomain.com
 ##################################################################

 --------------------- dpkg status changes Begin ------------------------
 Upgraded:
    firefox 19.0+build1-0ubuntu0.12.04.2 => 19.0.2+build1-0ubuntu0.12.04.1
    firefox-globalmenu 19.0+build1-0ubuntu0.12.04.2 => 19.0.2+build1-0ubuntu0.12.04.1
    firefox-gnome-support 19.0+build1-0ubuntu0.12.04.2 => 19.0.2+build1-0ubuntu0.12.04.1
    firefox-locale-en 19.0+build1-0ubuntu0.12.04.2 => 19.0.2+build1-0ubuntu0.12.04.1

 ---------------------- dpkg status changes End -------------------------

 --------------------- httpd Begin ------------------------

 Requests with error response codes
    404 Not Found
       /rhel63/repodata/repomd.xml: 7 Time(s)

 ---------------------- httpd End -------------------------

 --------------------- Kernel Begin ------------------------

 WARNING:  Kernel Errors Present
    ACPI Error: Method parse/ex ...:  3 Time(s)
    ACPI Error: [CAPD] Namespac ...:  3 Time(s)
    ACPI: Marking method _OSC as Serialized because of AE_ALREADY_EXISTS error ...:  1 Time(s)
    EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro ...:  1 Time(s)
    EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts: errors=remount-ro ...:  1 Time(s)

 ---------------------- Kernel End -------------------------

 --------------------- pam_unix Begin ------------------------
 lightdm:
    Unknown Entries:
       session closed for user lightdm: 1 Time(s)
       session opened for user lightdm by (uid=0): 1 Time(s)
       session opened for user ricard by (uid=0): 1 Time(s)

 sudo:
    Sessions Opened:
       ricard -> root: 2 Time(s)


 ---------------------- pam_unix End -------------------------

 --------------------- Connections (secure-log) Begin ------------------------

 **Unmatched Entries**
    dbus: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.27" (uid=104 pid=1933 comm="/usr/lib/indicator-datetime/indicator-datetime-ser") interface="org.freedesktop.DBus.Properties" member="GetAll" error name="(unset)" requested_reply="0" destination=":1.18" (uid=0 pid=1665 comm="/usr/sbin/console-kit-daemon --no-daemon "): 1 Time(s)
    dbus: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.35" (uid=104 pid=1977 comm="/usr/lib/indicator-datetime/indicator-datetime-ser") interface="org.freedesktop.DBus.Properties" member="GetAll" error name="(unset)" requested_reply="0" destination=":1.18" (uid=0 pid=1665 comm="/usr/sbin/console-kit-daemon --no-daemon "): 1 Time(s)
    dbus: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.59" (uid=1000 pid=2261 comm="/usr/lib/indicator-datetime/indicator-datetime-ser") interface="org.freedesktop.DBus.Properties" member="GetAll" error name="(unset)" requested_reply="0" destination=":1.18" (uid=0 pid=1665 comm="/usr/sbin/console-kit-daemon --no-daemon "): 1 Time(s)
    gnome-keyring-daemon: couldn't allocate secure memory to keep passwords and or keys from being written to the disk: 1 Time(s)
    gnome-keyring-daemon: unsupported key algorithm in certificate: 1.2.840.10045.2.1: 1 Time(s)
    gnome-screensaver-dialog: gkr-pam: unlocked login keyring: 10 Time(s)
    lightdm: pam_ck_connector(lightdm:session): nox11 mode, ignoring PAM_TTY :0: 2 Time(s)
    lightdm: pam_succeed_if(lightdm:auth): requirement "user ingroup nopasswdlogin" not met by user "ricard": 1 Time(s)
    polkitd(authority=local): Registered Authentication Agent for unix-session:/org/freedesktop/ConsoleKit/Session2 (system bus name :1.47 [/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1], object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8): 1 Time(s)
    polkitd(authority=local): Unregistered Authentication Agent for unix-session:/org/freedesktop/ConsoleKit/Session2 (system bus name :1.47, object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus): 1 Time(s)

 ---------------------- Connections (secure-log) End -------------------------

 --------------------- Sudo (secure-log) Begin ------------------------

 ricard => root
 --------------
 /bin/bash                      -   2 Time(s).

 ---------------------- Sudo (secure-log) End -------------------------

 --------------------- Disk Space Begin ------------------------
 Filesystem      Size  Used Avail Use% Mounted on
 /dev/sda1        20G  5.4G   13G  30% /
 udev            1.5G  4.0K  1.5G   1% /dev
 /dev/sda3       124G  107G   11G  92% /home

 /dev/sda3 => 92% Used. Warning. Disk Filling up.

 ---------------------- Disk Space End -------------------------

 ###################### Logwatch End ######################### 

Una herramienta útil para recibir en nuestro correo el estado de los servidores a modo de resumen. El uso de logwatch no evita el tener que tener alguna otra herramienta como Nagios o Centreon que nos permita ver el estado de los servidores en tiempo real.

Hasta la próxima.


lunes, 11 de marzo de 2013

SNMPTraps y Centreon 2.4


Hola,

 durante estos días me he tenido que enfrentar con un problema que ha surgido al chequear el NAS de EMC (antiguo celerra).  La monitorización se realiza con el sistema de monitorización Centreon que a su vez en sus capas más bajas utiliza Nagios.  Dejo para proximos post el funcionamiento cliente-servidor del protocolo SNMP y la monitorización por NRPE de Centreon. En este caso nos centraremos en como Centreon 2.4 recibe alertas de forma pasiva desde dispositivos que tenga habilitado SNMPTrap. 

La idea básica es que uno de nuestros sistemas al tener algún cambio de estado o mal funcionamiento envíe un mensaje por SNMP a nuestro servidor de monitorización. Esté último nos avisará mediante alertas y correo. Se realizá por SNMPTrap y no por NRPE para evitar instalar agentes y software no soportado por el fabricante, en este caso por EMC.

Como trata Centreon los SNMP Traps

En la versión 2.4 de Centreon el circuito de un mensaje o Trap es el siguiente; el servidor de Centreon tiene configurado el demonio de snmpd, escuchando mensajes snmp en la red destinados a él. Hay otro demonio que es ejecutado junto con él llamado snmptrapd que recibe el trap, y lo envía a un traductor snmptt que comprueba si hay una MIB. Si la hay genera un comando de Centreon (centTrapHandler) para insertarlo como mensaje en Nagios. Posteriormente envía una alerta y correo. Un poco complicado ¿verdad?

SNMPD --> SNMPTRAPD --> SNMPTT --> CENTTRAPHANDLER --> CENTREON

Bien, nuestro servidor está configurado de está forma y recibe las alertas por snmptrap sin problemas, excepto las que envía el NAS.  

Configuración de SNMP Traps para EMC

El primer paso que hay que realizar es buscar el fichero de MIB de nuestro dispositivo en la web del fabricante. El nuestro es el siguiente:



--------------------------------------------------------------------------
-- Copyright (c) 1998-2002, All rights reserved by
--
-- EMC Corporation
-- 171 South Street
-- Hopkinton, MA 01748 USA
--
-- This software is furnished under a license and may be used and copied
-- inclusion of the above copyright notice. This software or  any  other
-- only  in  accordance  with  the  terms  of such  license and with the
-- copies thereof may not be provided or otherwise made available to any
-- other person. No title to and ownership of  the  software  is  hereby
-- transferred.
--
-- The information in this software is subject to change without notice
-- and should not be construed as a commitment by EMC Corporation.
--
-- EMC Corporation assumes no responsibility for the use or reliability
-- of this software.
--
----------------------------------------------------------------------------
--
--
-- EMC Celerra Management Information Base description
--
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--
-- Author Identification
--
-- gma      Gary Ma, EMC
-- WZ       Weining Zhu, EMC
-- alc      Angela Cocks, EMC
--
----------------------------------------------------------------------------
--
--  003  alc   07-19-02   Added Web GUI event
--  002  WZ    07-02-02   Added Jserver Alert trap type
--  001  WZ    04-18-01   Added Control Station started trap type
--  000  gma   11-05-98   Created Original Module
--
----------------------------------------------------------------------------
EMC-CELERRA DEFINITIONS ::= BEGIN
   IMPORTS
       enterprises, Opaque
 FROM RFC1155-SMI
       DisplayString
          FROM RFC1213-MIB
       OBJECT-TYPE
          FROM RFC-1212
       TRAP-TYPE
          FROM RFC-1215;
--     emc
--        FROM EMC-MIB;

       emc OBJECT IDENTIFIER ::= { enterprises 1139  }
       emcCelerra OBJECT IDENTIFIER ::= { emc 2 }
-------------------------------------------------------------------
--
--       Celerra Event Group
--
-------------------------------------------------------------------
       celEventTable OBJECT-TYPE
          SYNTAX SEQUENCE OF CelEvent
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
                   "A table containing information
   about an particular event."
          ::= { emcCelerra 1}
       celEvent OBJECT-TYPE
          SYNTAX CelEvent
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
                   "Information about an particular event."
          INDEX {celEventFacility,
                 celEventID}
          ::= { celEventTable 1}
       CelEvent ::= SEQUENCE { celEventFacility INTEGER,
                               celEventID INTEGER,
                               celEventSeverity INTEGER,
                               celEventDescr DisplayString}
                           
       celEventFacility OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                 "The number representing the facility which generates
                  the event. For now, the value could be:
                  first 128 - default Dart facility
                  129 - master control
                  130 - event log
                  131 - box monitor
                  132 - video service
                  133 - callhome application
                  134 - AAF backup control station."
          ::= { celEvent 1 }
       celEventID OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                  "The event id which identifies the particular event
                  within a facility."
          ::= { celEvent 2 }
       celEventSeverity OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                   "Severity of the event."
          ::= { celEvent 3 }
       celEventDescr OBJECT-TYPE
          SYNTAX DisplayString
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                   "text description of the event."
          ::= { celEvent 4 }
     
----------------------------
--
--     Trap definitions
--
----------------------------
       celReboot TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a Data Mover
                    Reboots. The trap message includes the facility, event id,
                    serverity and a text description of the event."
          ::= 1
       celMasterCtlFault TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of Master Control
                    serious fault.
                    unexpected daemon exit or control station heartbeat
                    missing."
          ::= 2
       celHWFailure TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of celerra hardware
                    failure."
          ::= 3
       celSlotStale TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of celerra stale
                    reason code."
          ::= 4
       celSlotPanicked TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of panicked
                    slot."
          ::= 5
       celIntfFailure TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of both interfaces
                    failure."
          ::= 6
       celAAF TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of AAF."
          ::= 7
       celCSStart TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of Control Station started."
          ::= 8
       celJServer TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a JServer alert."
          ::= 9
       celWebGUI TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a Web GUI notification request."
          ::= 10
END



Nos vamos a Centreon y seleccionamos Configuration  Services  Manufacturer y hacemos click en Add . Añadiremos EMC como nuevo fabricante.  Luego iremos a Configuration  Services  MIBs y seleccionaremos nuestro fabricante "EMC" y buscaremos nuestro fichero. 

Si todo hay ido bien nuestras MIBS estarán dentro de la base de datos de Centreon.


Para que se distribuya está información de la MIBS a snmptt, se ha de ir a Configuration  Nagios  Snmp traps y hacer click en Generate.

Creamos las respectivas alarmas y les asignamos sus respectivas MIBs. Con esto ya tendriamos configuradas las alertas  y traps.

Podeis ver más captura y detalles en el siguiente link:

Troubleshooting

Aquí es donde hay que empezar ha hacer un seguimiento del mensaje y comprobar donde se rompe la cadena. 

Crearemos un nuevo host y copiaremos las alertas de servicio para poder hacer pruebas desde nuestro PC. Al lanzar las traps de SNMP desde mi equipo funcionan.

Llegan al SNMPD y SNMPTRAP lo envia a SNMPTT:

Mar  7 09:13:31 myserver snmptrapd[17706]: 2013-03-07 09:13:31 PROVA(via UDP: [192.168.1.2]:57566) TRAP, SNMP v1, community public   .1.3.6.1.6.3.1.1.5.2 Cold Start Trap (0) Uptime: 1:06:38.49     .1.3.6.1.4.1 = STRING: "hello"

SNMPTT generá el comando y lo inserta en Centreon.

EXEC command:/usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 PROVA .1.3.6.1.4.1.1139.2.0.1 "Trap message will be sent in the event of a Data Mover 'NOK'" "'NOK' "

Funciona!!

Vamos a probar de enviar el trap desde el NAS para ver cual es el resultado:

Llega al SNMPD y SNMPTRAP lo envia a SNMPTT:

Mar  7 15:00:18 mynas snmptrapd[8875]: 2013-03-07 15:00:18 mynas.mycompany.com [192.168.1.3] (via UDP: [192.168.1.3]:39813) TRAP, SNMP v1, community public        .1.3.6.1.4.1.1139.2 Enterprise Specific Trap (2) Uptime: 195 days, 16:36:06.76  .1.3.6.1.4.1.1139.2.1.1.1 = INTEGER: 81 .1.3.6.1.4.1.1139.2.1.1.2 = INTEGER: 6  .1.3.6.1.4.1.1139.2.1.1.3 = INTEGER: 3  .1.3.6.1.4.1.1139.2.1.1.4 = STRING: "Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped."

SNMPTT generá el comando.... pero no lo inserta en Centreon!!

EXEC command:/usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 mynas .1.3.6.1.4.1.1139.2.0.2 "Trap message will be sent in the event of Master Control '81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.'" "'81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.' 
Para ver que problema da, ejecutamos el comando a ver que error nos muestra.

# perl -w /usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 mynas .1.3.6.1.4.1.1139.2.0.2 "Trap message will be sent in the event of Master Control '81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.'" "'81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.' "7: -c: line 0: unexpected EOF while looking for matching `"'7: -c: line 1: syntax error: unexpected end of file

Al parecer no está recogiendo correctamente los parámetros. Los espera entre comillas pero se encuentra un espacio en blanco.

Solución

Tras seguir el script de perl para ver que es lo que hacia, decido mirar en los foros de soporte de Centreon para ver si alguien se había encontrado en el mismo caso... y Eureka!!!

Tal y como comentan en el siguiente link, el proceso de snmptrap es complejo y tiene problemas con el tratamiento de las cadenas:
http://forge.centreon.com/issues/3218

La solución que se aporta es sustituir el sistema de snmptt por un script nuevo en perl que controla todas estás excepciones:
http://forge.centreon.com/issues/3546#change-11678

Aunque el nuevo sistema de traps estará por defecto en la versión 2.5 de Centreon, lo implementamos en la versión 2.4 y funciona sin problemas. Aleluya!!

Espero que os haya ayudado!!! Saludos!!

Algunos links de interés

http://en.doc.centreon.com/HowToManageSNMPTraps
http://www.net-snmp.org/wiki/index.php/TUT:snmptrap
http://snmptt.sourceforge.net/docs/snmptt.shtml



viernes, 8 de marzo de 2013

Linux Evolution

Hola!!

 aquí os pongo un diagrama de la evolución de las distribuciones de Linux. El diagrama esta reducido, hay uno más completo en la wikipedia. Aunque desmesuradamente grande.  En cualquiera de los dos se puede ver la gran cantidad de forks que hay de las principales familias. Las fundamentales son Debian, Red Hat, Gentoo y Slackware. Prácticamente todas las demás parten de estas.




jueves, 7 de marzo de 2013

Unix Evolution

Hola a todos,

 hoy voy a hacer un poco de historia sobre Sistemas Operativos. Os adjunto un diagrama que he sacado directamente de la wikipedia. Me pareció muy curioso saber como ha ido evolucionando el sistema Unix, la gran variedad de versiones que hay, tanto de código abierto como propietarias de alguna empresa tecnológica.  Curioso ver como el sistema operativo de los actuales Mac de Apple han surgido de ramas de FreeBSD. También se puede ver los Unix más comerciales como HP-UX de HP, Solaris de Oracle o AIX de IBM. Y la cosa no para...


martes, 5 de marzo de 2013

Emulex Lun Scan Script

Algo muy común en servidores Linux es escanear el BUS SCSI para descubrir nuevos discos de la SAN. Para facilitar la labor del administrador, en este caso, el fabricante de tarjetas de fibra proporciona  el siguiente script:


#!/bin/sh
#
#/*******************************************************************
# * This file is part of the Emulex Linux Device Driver for         *
# * Fibre Channel Host Bus Adapters.                                *
# * Copyright (C) 2003-2005 Emulex.  All rights reserved.           *
# * EMULEX and SLI are trademarks of Emulex.                        *
# * www.emulex.com                                                  *
# *                                                                 *
# * This program is free software; you can redistribute it and/or   *
# * modify it under the terms of version 2 of the GNU General       *
# * Public License as published by the Free Software Foundation.    *
# * This program is distributed in the hope that it will be useful. *
# * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
# * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
# * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
# * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
# * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
# * more details, a copy of which can be found in the file COPYING  *
# * included with this package.                                     *
# *******************************************************************/
#
# scripts/lun_scan Rev : 1.2
# This script is provided by Emulex to use with its 7.x and 8.x linux device
# drivers for Light Pulse Fibre Channel adapters.
#
# This script performs a scan on either specific lpfc HBAs or on all
# lpfc HBAs.  When scanning an HBA, all discovered targets, and all
# luns will be probed.
#
#
# USAGE: The script is invoked with at least 1 argument. The arguments
# specify either the SCSI Host numbers corresponding to the specific
# lpfc HBA that are to be scanned, or the keyword "all" which indicates
# that all lpfc HBAs are to be scanned.
#
VERSION="1.2"
OS_REV=`uname -r | cut -c1-3`
usage()
{
     echo ""
     echo "Usage: lun_scan [ <#> [<#>] | all ]"
     echo "  where "
     echo "    <#> : is a scsi host number of a specific lpfc HBA that is to"
     echo "          be scanned. More than 1 host number can be specified. "
     echo "    all : indicates that all lpfc HBAs are to be scanned."
     echo ""
     echo "  Example:"
     echo "    lun_scan all  : Scans all lpfc HBAs"
     echo "    lun_scan 2    : Scans the lpfc HBA with scsi host number 2"
     echo "    lun_scan 2 4  : Scans the lpfc HBAs with scsi host number 2 and 4"
     echo ""
     echo "  Warning: Scanning an adapter while performing a tape backup should"
     echo "    be avoided."
     echo ""
}
abort_exit() {
     echo ""
     echo "Error: Cannot find an lpfc HBA instance with scsi host number : $host"
     echo "... Aborting lun_scan."
     echo ""
     exit 2
}
# Validate argument list
if [ $# -eq 0 -o "$1" = "--help" -o "$1" = "-h" ] ; then
 usage
 exit 1
fi
# Get list of lpfc HBAs to scan
hosts=$*;
if [ ${OS_REV} = 2.4 ]; then
 lowhost=0
 ha=`ls /proc/scsi/lpfc/?   2> /dev/null | cut -f5 -d'/'`
 hb=`ls /proc/scsi/lpfc/??  2> /dev/null | cut -f5 -d'/'`
 hc=`ls /proc/scsi/lpfc/??? 2> /dev/null | cut -f5 -d'/'`
 all_hosts="$ha $hb $hc"
 lowhost=`echo $all_hosts | sed "s/ .*//"`
else
 all_hosts=`ls -1 -d /sys/bus/pci/drivers/lpfc/*/host* | sed -e "s/.*host//"`
fi
# If all option is used get all the lpfc host numbers.
if [ "$hosts" == "all" ] ; then
 hosts="$all_hosts"
fi
if [ ${OS_REV} = 2.4 ]; then
 for host in $hosts ; do
     # Convert host number to lpfc instance number.
     instance=`expr $host - $lowhost`
     if [ ! -e /proc/scsi/lpfc/$host ] ; then
         abort_exit
     fi
     echo Scanning lpfc$instance, scsi host number : $host;
     max_lun=256
     targets=`cat /proc/scsi/lpfc/$host | grep 'lpfc*t*' | cut -f2 -d't' | cut -f1 -d' '`
     for target in $targets ; do
         # Convert target ID to decimal from Hex format
         let "dec_target = 0x$target"
         echo "   Scanning Target Id $dec_target..."
         for ((lun=0; lun<$max_lun; lun++)) ; do
             echo "scsi add-single-device $host 0 $dec_target $lun" >/proc/scsi/scsi
         done
     done
 done
else
 for host in $hosts ; do
     if [ ! -e /sys/bus/pci/drivers/lpfc/*/host$host ] ; then
         abort_exit
     fi
     echo Scanning lpfc HBA instance with scsi host number : $host;
     echo '- - -' > /sys/class/scsi_host/host$host/scan
 done
fi
echo ""


Lo que hace el script es comprobar la versión del kernel (2.4 o superior), después comprueba que tarjetas de fibra hay instaladas y por cada una de ella realiza un descubrimiento de los nuevos dispositivos.
Si la asignación en la cabina ha sido correcta podremos ver los nuevos discos de tipo /dev/sdX, ya podremos particionar, formatear y montar el nuevo disco.

Una de las principales ventajas del script es que evitamos tener que reiniciar el servidor para ver nuevos discos de la SAN.

¡¡ Bienvenidos !!

Hola a todos y bienvenidos,

Soy Ricardo un técnico/administrador de sistemas que lleva en este mundillo desde 1999 A.C. Durante todo este tiempo he vivido muchos experiencias profesionales y he adoptado nuevas tecnologías  tanto para uso propio como para dar servicio a mis clientes.  Mi idea es hablar sobre Linux, Unix, Bases de datos, Virtualización, Administración de Sistemas, Tunning, Certificaciones, Lecturas recomendadas, etc, etc...

Sé que hay mucho blogs de administradores de sistemas, webs de tutoriales y fuentes de noticias tecnológicas  pero ya hace tiempo que veo la necesidad de recopilar toda esta información y dejarla recogida en algún sitio.  Así que aquí me encuentro, espero poder compartir con todos vosotros toda esta información y que os sea tan útil como lo fue para mi.

Que lo disfruten!!
Ricardo