Ir al contenido principal

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ó!

Comentarios

Entradas populares de este blog

Lenguajes de programación más conocidos en la historia de la computación

Los primeros lenguajes de programación eran difíciles de construir ya que éstos debían ser "desarrollados" a un nivel que la máquina entendiera directamente, es decir, la programación de computadoras de esta época dependía mucho de la máquina para la que se estaba trabajando y detectar un error o fallo en la programación no solo era complejo sino que demandaba mucho tiempo y esfuerzo. En 1946 Grace Murray Hopper, científica en sistemas y oficial de la marina estadounidense creo el FLOW-MATIC, considerado el primer lenguaje de programación útil para resolver problemas de usuarios comerciales.  Su desarrollo fue enfocado a la UNIVAC 1.  Este lenguaje de programación fue visto como de "alto nivel", fácil de usar por los científicos de la época.  FLOW-MATIC requería de un traductor (compilador) para ser interpretado por la máquina.   Con este lenguaje de programación se establece el concepto de programación basado en palabras del lenguaje natural y se da inicio al d...

Enviar archivos por sftp con Python

Esta es una breve modificación a uno de los scripts creados con anterioridad y que consiste en enviar un archivo por  sftp.   La necesidad en concreto consistía en comparar ambos servidores local y remoto y validar qué archivo faltaba en el remoto que estuviera en el local para proceder a enviarlo y mantener el remoto actualizado. Este script se guarda con el nombre que quieras, le das permiso de ejecución y lo agregas en un crontab. import pysftp import os # Cambiar por la ruta donde se generan los archivos (Amsterdam) servidor_local = os.listdir(r'C:\proyecto\archivos') #print servidor_local # Cambiar por una ruta en Amsterdam, puede ser /tmp/res os.remove(r"c:\proyecto\res\archivos.txt") for archivos in servidor_local: # Cambiar por '/tmp/res/archivos.txt','a' local = open(r"c:\proyecto\res\archivos.txt",'a') print 'Archivo local: '+archivos local.write(str(archivos)+'\n') ...

Extraer logs de un rango de hora

Seguramente en sus trabajos se habrán visto en la necesidad de extraer logs en un rango dado de hora; es decir, desde las xx hasta las yy. Este proceso se puede hacer en linux utilizando varios comando como el grep, head, cut, etc. que combinados nos mostrarán lo que andamos buscando. Como en mi trabajo actual es bastante común esta actividad me he dado a la tarea de crear un script bash para ello. Este es el código fuente que obviamente pueden mejor y/o adaptar a sus necesidades: #!/bin/bash ## Rango v.1.0 ## Genera un log con un rango de hora ingresado ## Autor: Manuel Gonzalez ## http://maengora.blogspot.com # Forma de usar el script echo "Con bash: ./rango.sh " # Solicito la hora inicial y la almaceno en la variable HORA_INICIAL echo -n "Hora incial hh:mm " read HORA_INICIAL # Solicito hora final echo -n "Hora final hh:mm " read HORA_FINAL # Solicito el nombre del log de donde voy a extraer la informacion echo -n "Nombre del log a analizar ...