jueves, 3 de septiembre de 2009

despiste 2: Al intentar eliminar una máquina virtual de un datastore en una SAN desde el DataStore Browser aparece el mensaje "Could not delete file"

Uno de los problemas que me he encontrado alguna vez administrando la granja VMWare ha sido el de no poder mover o eliminar una máquina virtual, recibiendo el error "Could not delete the file" desde el Virtual Infrastructure Client.

Las operaciones que me llevaban a este error eran:

  • Intentar eliminar la máquina virtual ("vm1", por ejemplo) desde el VIClient con la opción Delete from disk. Al lanzar el comando este se ejecuta correctamente. Sin embargo cuando reviso el datastore correspondiente veo que se mantienen los ficheros de los discos duros virtuales (*-flat.vmdk) y el fichero de swap (*.vswp).
  • Si intento eliminar los ficheros directamente desde la Sevice Console (en el directorio /vmfs/volumes/) con el comando rm, este me devuelve el error: Device or resource busy
Al ejecutar el comando grep -ir "vm1" * sobre el directorio /proc/vmware/vm aparece la siguiente salida:


1382/names:vmid=1382 pid=-1 cfgFile="/vmfs/volumes/48b776c0-7387a6c0-da4e-00215aee45bc/vm1/vm1.vmx" uuid="50 26 f1 98 a4 68 a8 f6-f8 eb 3c 0f b7 2c f1 71" displayName="vm1"
1382/userRPC: Total vmm0:
vm1 vmm1:vm1 vmm2:vm1 vmm3:vm1
1383/userRPC: Total vmm0:vm1 vmm1:vm1 vmm2:vm1 vmm3:vm1
1384/userRPC: Total vmm0:vm1 vmm1:vm1 vmm2:vm1 vmm3:vm1
1385/userRPC: Total vmm0:vm1 vmm1:vm1 vmm2:vm1 vmm3:vm1

De esta salida, la información que nos interesa de la salida anterior es el el process ID (pid, en negrita). Como veis, el pid está establecido a
-1, con lo que la solución que presenta vmware no resulta efectiva. El problema está en que el proceso que bloquea los ficheros de esa máquina virtual no está corriendo en la COS sino en el VMKernel, con lo cual hemos de acceder al espacio de ejecución de este para poder obtener el pid que nos interesa.


El procedimiento para eliminar el bloqueo es el siguiente:

  1. Obtener el vmid de la máquina virtual bloqueada. Ejecutar el comando vm-support -x | grep -i | awk '{print $1}' | awk -F '=' '{print $2}' desde un sistema de ficheros que no sea VMFS.
  2. Localizar el wid asociado al vmid mediante el comando cat /proc/vmware/vm//cpu/status | awk '{print $21}' | awk -F '.' '{print $2}'
  3. Enviar la señal de KILL al wid mediante el comando /usr/lib/vmware/bin/vmkload_app -k donde señal en nuestro caso será el valor 9

A partir de este momento es posible eliminar los ficheros bloqueados del datastore
.

A continuación os pongo los enlaces que me han servido de referencia

No hay comentarios:

Publicar un comentario