Alarmas ioctl 2285 en Linux

Hoy vamos a ver una entrada rápida para tranquilizarnos ante algunos errores.
Tras las Entradas anteriores en las que usabamos una particion y ASMlib para los discos ASM, he recibido preguntas de administradores que se encuentran en el dmesg o en el messajes con erroers del tipo

oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!
oracle: sending ioctl 2285 to a partition!

Estos mensajes que en un principio pueden asustar un poco, pueden ser ignorados con tranquilidad.
Parece ser que son errores específicos si usamos la version UEK del kernel Enterprise Kernel for Oracle Linux y que están solventados en el 2.6.39-400.100.0.el6uek

Más información

Manejo de ASM , Multipath y ASMLIB

Hoy vamos a ver la manera de crear discos con ASM en equipos linux con el multipath y ASMLIB.
La primera pregunta es ¿por que ASMLIB?

Al igual que en las versiones anteriores de Redhat o Oracle Linux donde mi opinión era usar el rawdevices de la manera clásica accediendo al dispositivo en crudo, con la llegada del systemd no me la jugaría en las secuencias de arranque y usaría siempre las librerías que nos proporcionan de manera soportada para ayudarnos con esto, y esa librería es el asmlinb

Multpath en Linux

Lo primero que tenemos que ver es como funciona el multipath en linux.
El «device Mapper Multipath» es una herramienta nativa de Linux para el manejo de múltiples caminos en los accesos a disco.
Resumiendo mucho, el multipath nos va a crear 3 devices:

  • /dev/dmX Dispositivo real
  • /dev/multipath/multipahX Alias del dispositivo para la facilitar la localizacion (formato humano)
  • /dev/mapper/multipathX Dispositivo de acceso al que deberemos apuntar nuestro ASM

Gran parte de los problemas que se tienen con el multipath es el uso de estos tres devices, ya que, es muy común el crear el disco en el dispositivo que no es correcto.

Primer paso, preparar el disco

El primer paso como siempre será la detección del disco. Este paso probablemente lo lleve a cabo el administrador del sistema operativo. Vamos a suponer que el dispositivo sobre el que queremos actuar es el /dev/mapper/mpath10

Lo primero que tendremos que hacer es crear una partición ( Oracle recomienda crear en raw sobre una particion)
para ello

fdisk /dev/mapper/mpath10
Command (m for help): n   
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1017, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-31455238, default 31455238):
Using default value 31455238
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.

Si os habeis fijado, hemos utilizado el dispositivo bajo /dev/mapper y no ninguno de los otros dos.
Con esto hemos creado la partición, pero no se ha grabado en la tabla de particiones del disco ya que hemos actuado sobre el multipath no sobre los discos físicos, para lo que tendremos que llamar el kpartx, y actualizar el kernel con partprobe.
Aquí es donde tenemos que tener mucho cuidado, ya que debemos de usar de nuevo el /dev/mapper

kpartx -a /dev/mapper/mpath10
partprobe

Estas acciones nos habrán creado un nuevo device en el /dev/mapper que se corresponderá con la primera partición de nuestro dispositivo multipath, es decir el /dev/mapper/mpath10p1

Segundo paso, mostrarlo al ASM

Una vez tenemos la partición creada, ya tendremos nuestro disco para añadir a ASM, esta partición se llamará DISKp1, por lo que para nuestro mpath10 será la mpath10p1
Así pues, llamamos al ASMLIB con

/etc/init.d/oracleasm createdisk DATAXX /dev/mapper/mpath10p1

ASMLIB nos habrá creado el dispositivo DATAXX en /dev/oracleasm/disks que será la ruta que usaremos en nuestra variable ASM_DISKSTRING del ASM y que ya tratará de manera indistinta el disco independientemente del camino por el que llegue.

Como siempre , mas información en

  • How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks? (Doc ID 602952.1)
  • How to Partition DM-Multipath Pseudo Devices (Doc ID 470913.1)

Localizar un disco entre ASM y el almacenamento con asmlib

Hoy vamos a ver una entrada muy sencilla en la que veremos la manera de correlar entre un disco de ASM y su dispositivo físico (usando multipah) .
Disponemos de un sistema Linux con multipath y asm donde los discos de ASM tienen una redundancia external, queremos saber que dispositivo físico en la cabina de almacenamiento es nuestro disco DATA01
La manera mas sencilla de hacerlo es obteniendo el World Wide Identifier (WWID) de ese disco, y esto lo haremos mediante el comando multipath de linux con los datos que obtenemos de la utilidad oracleasm .

Veamos cualess son los pasos.
Primero debemos de averiguar cual es el dispositivo de linux que se corresponde con nuestro disco DATA01

root@BBDD1 ~]# /etc/init.d/oracleasm querydisk -v -d -p  DATA01
Disk "DATA01" is a valid ASM disk on device [8,49]
/dev/sdd1: LABEL="DATA01" TYPE="oracleasm"
/dev/sdy1: LABEL="DATA01" TYPE="oracleasm"
/dev/mapper/mpath10p1: LABEL="DATA01" TYPE="oracleasm"

Con esto ya sabemos el /dev/mapper que le corresponde, y el numero de bloques.
Si ahora quisiésemos saber que dispositivo de cabina usaríamos el comando multipath -ll

[root@BBDD ~]# multipath -ll
.
.
mpath11 (3600a0b800050c7420000222a56728a6d) dm-3 IBM,1814      FAStT
size=30G features='1 queue_if_no_path' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=6 status=active
| |- 1:0:0:104 sde  8:64   active ready running
| `- 2:0:1:104 sdz  65:144 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  |- 1:0:1:104 sdl  8:176  active ghost running
  `- 2:0:0:104 sds  65:32  active ghost running
mpath10 (3600a0b800050c7420000222856728a54) dm-2 IBM,1814      FAStT
size=30G features='1 queue_if_no_path' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=6 status=active
| |- 1:0:0:103 sdd  8:48   active ready running
| `- 2:0:1:103 sdy  65:128 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  |- 1:0:1:103 sdk  8:160  active ghost running
  `- 2:0:0:103 sdr  65:16  active ghost running
.
.

En la salida de este comando veremos que coincide que el mpath10 contiene los discos sdd e sdy, por lo que, el World Wide Identifier (WWID) que buscamos sera el 3600a0b800050c7420000222856728a54

Procesos background de ACFS

Una vez tenemos un dispositivo bajo /dev/asm/ podemos trabajar con el como si de un disco normal fuera, pero, para poder trabajar en un sistema en cluster necesitaremos ACFS o una solución de terceros.

Procesos background de ACFS

Oracle lanza nuevos procesos para las instancias de ASM que tienen asociados filesystems ACFS
Estos procesos son :

00:00:04 asm_vdbg_+ASM1
00:00:00 asm_vmb0_+ASM1
00:00:00 asm_vbg0_+ASM1
00:00:43 asm_acfs_+ASM1

VDBG.- Volume driver background (asm_vdbg_+ASM1)

Este proceso es el encargado de pasarlas peticiones del ASM al driver de ASDM.
Es tan importante que si muriera de manera no planificada tiraría abajo la instancia ASM

VBGn Volume background process (asm_vmb0_+ASM1)

Es un pool de procesos worker que son los que se encargan de las peticiones entre ASM y ADVM
El nombre es muy similar al anterior,, pero el otro acaba en G y estos en numero

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

Volume Menbership background process (asm_vmb0+ASM1)

The Volume Membership Background processes (VMB0) plays the role of an I/O barrier and I/O fencing function. Interestingly, during an ASM instance failure, this process continues to exist until the ADVM driver has had a chance to write out pending I/O. +ASM_vmb_.trc

Instalación de ADVM

Los binarios necesarios para la generación de los volúmenes se encuentran bajo el árbol de directorios el $GRID_HOME.
Para comprobar el estado de los binarios (soportado,instalado,cargado) usaremos el binario $GRID_HOME/bin/acfsdriverstate

acfsdriverstate [-orahome ORACLE_HOME ]{ installed | loaded | version | supported }

En caso de tenerlo soportado e instalado, puede dares el caso de que no esté cargado, para eso se usa otro binario de la rama que es: $GRID_HOME/bin/acfsload

acfsload { start | stop  } [ -s ]

Donde la –s es el “silent mode”
No existe un /etc/init.d/acfsload por lo que para cargar el módulo en el arranque es necesario el crearlo y ejecutarlo.
Cuando ADVM está cargado, tenemos los siguientes módulos en el kernel

root@rac1 ~] lsmod |grep ora
oracleacfs           1990406  0 
oracleadvm            250040  0 
oracleoks             427672  2 oracleacfs,oracleadvm
oracleasm              54297  1 
  • oracleacfs: gestiona las opciones de sistema de ficheros l ACFS
  • oacleavdm: gestiona las opciones de interfaz del ADVM con el S.O
  • oracleoks: Gestiona la gestión de memoria , y la sincronización y bloqueos de disco

ADVM Creación de un volumen

Para la ceración de un volumen debemos de tener antes un DISKGROUP de ASM
Captura de pantalla 2015-11-21 a las 20.03.02

Vamos a crear un volumen de 500 M llamado ADVMFS1 en el diskgroup ASMFS

ASMCMD> volcreate -G ASMFS -s 500M ADVMFS1
ASMCMD> volinfo -a
Diskgroup Name: ASMFS
	 Volume Name: ADVMFS1
	 Volume Device: /dev/asm/advmfs1-491
	 State: ENABLED
	 Size (MB): 512
	 Resize Unit (MB): 32
	 Redundancy: UNPROT
	 Stripe Columns: 4
	 Stripe Width (K): 128
	 Usage: 
	 Mountpath:

Si miramos el dispositivo que nos ha dicho, vemos como si que existe. ¡!En ambos nodos!!

[grid@rac1 ~]$ ls -l /dev/asm/advmfs1-491
brwxrwx--- 1 root asmadmin 252, 251393 Aug 27 11:39 /dev/asm/advmfs1-491
[grid@rac2 ~]$ ls -l /dev/asm/advmfs1-491
brwxrwx--- 1 root asmadmin 252, 251393 Aug 27 11:39 /dev/asm/advmfs1-491

Borrado de un volumen

Se lleva a cabo mediante el comando voldelete , necesita el Diskgroup y el volumen

ASMCMD> volinfo -a
Diskgroup Name: ASMFS
    Volume Name: ADVMFS1
    Volume Device: /dev/asm/advmfs1-491
    State: ENABLED
    Size (MB): 512
    Resize Unit (MB): 32
    Redundancy: UNPROT
    Stripe Columns: 4
    Stripe Width (K): 128
    Usage: ACFS
    Mountpath: /app/oracle/acfsmounts/prueba/ 
ASMCMD> voldelete -G ASMFS ADVMFS1 

Al igual que en la creación, elimina el dispositivo en todos los equipos.

ADVM comandos

Los comandos de ADVM son bastante básicos y se ejecutan desde el ASMCMD (o desde el asmca)
Los comandos básicos son:

  • Volcreate: Creación de volumen
  • Voldelete: Elimina el volumen NO es necesario que esté deshabilitado
  • Voldisable: Lo habilita o deshabilita (debe de estar inactivo) “ in mounted disk groups”
  • Volenable: Hablita el dispositivo “ in mounted disk groups”
  • Volinfo: Ofrece información del volumen, con la opción –a da de todos.
  • Volresize: Redimensiona el volume, si está montado un filesystem oracleACFS no se puede hacer un resize, es necesario hacerlo con el comando propio de ACFS acfsutil size 
  • Volset: Sirve para dar/modificar atributos
    Captura de pantalla 2015-11-21 a las 20.05.23

  • Volstat: Da información del I/O del volumen