Explicamos cómo resolver el error «An error occurred while consolidating disks msg.fileio.lock», que se produce cuando intentamos consolidar los discos de una máquina virtual, sobre entorno de virtualización VMware ESXi, con copias de seguridad en Veeam Backup & Replication.

Requisitos, entorno de virtualización, copia de seguridad

Dispondremos de un sistema de virtualización con VMware ESXi. En nuestro caso montado con varios hosts en un clúster vCenter. La versión de VMware que usamos para realizar este artículo es la 5.5.

Por otro lado, disponemos de un sistema de backup con Veeam Backup & Replication, en su versión 10a. Dicho sistema es el encargado de hacer las copias de seguridad (tanto backup a disco como réplica a otro ESXi) de las máquinas virtuales.

Para realizar la tarea del artículo necesitaremos disponer de acceso al cliente de administración de VMware, bien sea vía web con vSphere Web Client o la versión de escritorio vShephere Client. En nuestro caso usaremos la versión de escritorio. En la versión vía web es proceso es prácticamente idéntico.

Síntomas, causa del error «An error occurred while consolidating disks msg.fileio.lock»

Cuando tenemos un sistema de virtualización sobre VMware ESXi y en una máquina virtual aparece un warning indicando que hay que consolidar los discos, con el mensaje «Configuration Issues – Virtual machine disks consolidation is needed»:

Síntomas, causa del error "An error occurred while consolidating disks msg.fileio.lock"

Cuando intentamos hacer una consolidación de discos, pulsando con el botón derecho del ratón sobre la máquina virtual y eligiendo en el menú emergente «Snapshot» – «Consolidate»:

Síntomas, causa del error "An error occurred while consolidating disks msg.fileio.lock"

Y nos da este error:

Consolidate virtual machine disk files
Unable to access file since it is locked
See the error stack for details on the cause of this problem.
An error occurred while consolidating disks: msg.fileio.lock

Síntomas, causa del error "An error occurred while consolidating disks msg.fileio.lock"

Explicaremos en este artículo cómo resolver este problema, al menos cuando el causante es el software de backup de las máquinas virtuales.

Revisar el motivo del error msg.fileio.lock para resolverlo

En primer lugar es conveniente comprobar qué ficheros de la máquina virtual están bloqueados. Consultaremos en qué datastore y carpeta está ubicada la máquina virtual, desde sus propiedades, pulsando con el botón derecho del ratón sobre la máquina virtual y en el menú emergente seleccionando «Edit Settings»:

Revisar el motivo del error msgfileio.lock para resolverlo

Seleccionaremos el disco duro (Hard disk x) y en «Disk File» nos indicará el datastore donde está ubicada, entre corchetes, en nuestro caso «datos» y la carpeta dentro del datastore, en nuestro caso «srvfacturacion»:

Revisar el motivo del error msgfileio.lock para resolverlo

Anotaremos estos datos que necesitaremos posteriormente para comprobar los ficheros bloqueados y el detalle del error.

Realizaremos una conexión SSH al servidor (host) de ESXi al que está conectada la máquina virtual. Si tenemos varios hosts ESX en clúster vCenter se puede consultar, en la consola principal, seleccionando la máquina virtual, el host al que está conectada aparecerá a la derecha en «Host»:

Revisar el motivo del error msgfileio.lock para resolverlo

Habilitar conexión SSH a host VMware ESXi

Nos conectaremos al host ESXi por SSH, en nuestro caso al 192.168.1.100. Dicho host deberá tener habilitado el acceso SSH. Para habilitarlo seleccionaremos el host ESXi [1], pulsaremos en la pestaña «Configuración» [2] y en Software pulsaremos en «Security Profile» [3]. En «Servicies» pulsaremos en «Properties» [4]:

Habilitar conexión SSH a host VMware ESXi

El servicio SSH, por defecto, estará en «Stopped». Lo seleccionaremos [1] y pulsaremos en «Options» [2]:

Habilitar conexión SSH a host VMware ESXi

Marcaremos la opción de inicio deseada, en nuestro caso «Start and stop with host» [1] y pulsaremos «Start» [2] para iniciar el servicio de SSH Server. Pulsaremos OK y el accso SSH al host quedará habilitado:

Habilitar conexión SSH a host VMware ESXi

Nos aseguraremos de que está permitido en el Firewall del host, en la misma ventana, pulsando en Properties del Firewall:

Habilitar conexión SSH a host VMware ESXi

Nos aseguraremos de que SSH Server esté marcado y tengamos acceso desde la red del cliente con el que nos conectamos:

Habilitar conexión SSH a host VMware ESXi

Una vez habilitado el SSH, accederemos con PuTTY al servidor host ESXi al que está conectada la máquina virtual con el problema de bloqueo de ficheros:

Habilitar conexión SSH a host VMware ESXi

Comprobación de log para ver detalle de error msg.fileio.lock

Accederemos a la carpeta de la máquina virtual, con el comando:

cd /vmfs/volumes/datos/vsrvfacturacion

Donde «datos» será el nombre del datastore que hemos obtenido en pasos anteriores y «vsrvfacturacion» el nombre de la carpeta que contiene la máquina virtual:

Comprobación de log para ver detalle de error msg.fileio.lock

Dentro de la carpeta de la máquina podremos consultar el fichero vmware.log, con el comando:

cat vmware.log

Comprobación de log para ver detalle de error msg.fileio.lock

En el fichero de log veremos que hay una línea de error, indicando para un fichero de la máquina virtual, en nuestro caso para «srvfacturacion-flat.vmdk», el error: Failed to lock the file (40003) (0x2013):

Comprobación de log para ver detalle de error msg.fileio.lock

Por lo tanto ese fichero es el que está bloqueado y por ello no permite la consolidación de discos. En el código de error «40003 0x2013» es muy útil porque nos está indicando que la consolidación ha fallado porque uno o varios ficheros de la máquina virtual están bloqueados. Y como indica el propio VMware, la causa de este error es:

Cuando se inicia una copia de seguridad, el proveedor de copias de seguridad externo (en nuestro caso Veeam Backup) crea una instantánea de la máquina virtual de destino. Durante una copia de seguridad, la apertura de un disco puede llevar más tiempo que el tiempo de espera predeterminado del proveedor de copia de seguridad de terceros. Cuando esto sucede, el proveedor de respaldo de terceros considera la operación como un error y, como consecuencia, intenta eliminar las instantáneas. Por ejemplo, se inicia una operación de consolidación. La tarea de consolidación se iniciará en los mismos discos que el proveedor de respaldo externo intentó abrir y provocó el tiempo de espera. Dado que los discos aún están abiertos, la consolidación también fallará, dejando atrás los archivos delta obsoletos. La razón del tiempo de espera inicial y también la razón por la que los discos todavía están en estado abierto, es porque cuando se realiza una copia de seguridad de un archivo VMDK usando el modo de transporte SAN, VDDK inicia una llamada «Map Disk Region» para obtener la asignación del disco. El uso de copias de seguridad en modo SAN requiere la creación de una asignación completa del disco en la memoria antes de permitir cualquier E/S. Esto puede llevar mucho tiempo para discos grandes y/o fragmentados.

En definitiva, nos está diciendo que el disco está asignado a la máquina virtual de copias de seguridad (la de Veeam Backup) y ésta no ha podido desvincularlo por algún motivo, probablemente porque la copia de seguridad no ha concluido satisfactoriamente. Si editamos las propiedades de la máquina virtual de Veeam Backup (o la máquina proxy que le hayamos asignado), veremos que hay un disco duro asignado perteneciente a la máquina virtual que tiene el bloqueo:

Comprobación de log para ver detalle de error msg.fileio.lock

Como vemos en la ventana anterior, uno de los discos duros asignados a la máquina virtual de Veeam Backup, el Hard disk 6, apunta al disco duro virtual de la máquina que tiene el bloqueo: [datos]srvfacturacion/srvfacturacion.mdk, con lo cual esta vinculación es la que está generando el problema.

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

Para solucionarlo, lo primero que haremos es asegurarnos de que la copia de seguridad de Veeam de esa máquina no esté en ejecución:

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

Volveremos a VMware vSphere Client para acceder a la edición de las propiedades de la máquina virtual de Veeam (si usamos proxy accederemos al proxy asignado a la copia de la máquina virtual con el bloqueo). Seleccionaremos el disco duro anterior [1], el asignado de la máquina virtual con el bloqueo. Nos aseguraremos de que es el disco duro correcto [2] y pulsaremos en «Remove» [3]. Debemos estar seguros de que es el disco duro que apunta al de la máquina virtual con bloqueo, como se indica en el [3] de la imagen siguiente, en nuestro caso [datos]srvfacturacion/srvfacturacion.mdk. Tras pulsar en «Remove»

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

Tras pulsar en «Remove» seleccionaremos «Remove from virtual machine«, nunca la otra opción que eliminaría el disco duro por completo para la máquina bloqueada y perderíamos sus datos. Pulsaremos «OK» para desvincular el disco duro de esta máquina virtual de backup:

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

En cuanto haya finalizado la desvinculación, que nos lo indicará en la ventana de tareas, podremos volver a lanzar la consolidación:

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

Seleccionaremos la máquina virtual con el bloqueo, con el warning y repetiremos el proceso de consolidación de discos, como hemos hecho al principio. Pulsaremos con el botón derecho del ratón sobre la máquina virtual y elegiremos en el menú emergente «Snapshot» – «Consolidate»

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock

Si todo es correcto y hemos desvinculado el disco duro bloqueado, el proceso de consolidación terminará satisfactoriamente y desaparecerá el warning en la máquina virtual:

Resolver problema de bloqueo de disco de máquina virtual en VMware ESXi msg.fileio.lock