El estado de “Cannot connect to virtual machine configuration storage” en Hyper-V al intentar abrir una VM, Process Monitor y su solución

Desde ya hace varios años utilizo VMWare o Hyper-V como gestores de máquinas virtuales; normalmente varío por un tiempo dependiendo de qué quiero hacer, ya que cada uno tiene características notables. Actualmente tengo Windows 10 Enterprise Preview 9926 instalado en mi equipo principal, y debido a que VMWare 11 tiene unos problemas de compatibilidad con estas compilaciones, estoy utilizando Hyper-V.

Como tengo las máquinas virtuales en un disco externo USB, es normal que lo quite algunas veces para llevármelo, pero generalmente lo vuelvo a conectar y no tengo problema para iniciar mis entornos virtualizados. El siguiente post nace de un error después desconectar y reconectar el disco duro e intentar iniciar mis equipos virtuales. Como siempre, intentaré detallarlo un poco para aprender en el camino:

El error

El disco extraíble lo quité porque debía hacer unos procedimientos a un disco ajeno al mío, y no quería llegar a confundirme con tantas particiones. Windows asigna las letras de unidad dinámicamente, siguiendo un orden alfabético, pero entregando de acuerdo a la disponibilidad de letras de unidad.

Después de terminar con el disco ajeno y volver a conectar mi disco, tuve que decirle a Windows 10 desde el Administrador de Discos que asignara letra a las particiones, pero después de abrir Hyper-V, me encontré con esto:

2015-02-22_10-23-22

El estado de todas las máquinas era Saved-Critical, no podía ver detalles como memoria, CPU asignada y además, el estatus que recibía de cada una decía:

“Cannot connect to virtual machine configuration storage”.

Al darle doble clic a mi primera VM llamada DC-MED, pude abrir la ventana de conexión, pero con el mismo mensaje de configuration storage en la parte inferior:

2015-02-22_10-21-42

Al intentar iniciar la máquina, con esperanzas de que arrancara, recibí otro mensaje más que no me permitía continuar:

2015-02-22_10-20-42

The application encountered an error while attempting to change the state of DC-MED

DC-MED failed to restore virtual machine state.”

Hyper-V no me permitía hacer ninguna otra operación como reiniciar, apagar, volver a un punto anterior, etc, así que estaba completamente confundido.

La causa

Lo primero que hice fue correr Process Monitor, reproducir el mensaje y sobre el resultado, buscar qué referencias existían a el nombre para mostrar de DC-MED; esto fue lo primero –y lo único- que encontré:

2015-02-22_12-09-07

Si hacen clic en la captura y la ven al detalle, se está ejecutando el proceso de VMConnect.exe con una línea de comandos que identifica el nombre del host, nombre para mostrar de la máquina virtual, el GUID y el conteo de instancias que se están corriendo.

El resultado de esta operación se muestra como satisfactorio, así que no había problemas con lo que necesitaba Hyper-V para lanzar las máquinas virtuales. ¿Qué faltaba entonces?

Recordé que siempre que dejo alguna máquina virtual prendida y ejecutándose, sin importar el reinicio o apagado del equipo, están disponibles al entrar a la consola de administración de Hyper-V. Esto me llevaba a pensar que debía existir algún proceso recién se inicia sesión; la forma de averiguarlo, era habilitando la característica de Boot Logging incluida en Process Monitor.

Después de habilitarla, reiniciar la máquina y correr Process Monitor para guardar el log recopilado por el controlador, busqué las operaciones que existieran sobre el GUID correspondiente a mi virtual DC-MED y esto fue lo que encontré:

2015-02-22_18-56-59

Básicamente, el proceso vmms.exe, correspondiente a Virtual Machine Management Service, estaba abriendo un archivo con nombre BD2D3238-2536-4131-9376-383B8959D52A.vmcx, ubicado en la ruta:
C:ProgramDataMicrosoftWindowsHyper-VVirtual Machines Cache

Noten que la disposición era para abrir el archivo, pero el acceso deseado (Desired Access), contenía requerimientos para leer, listar, escribir, agregar, entre otros… Esto quiere decir que leía algo del archivo para poder inicializar las máquinas virtuales y, al llamarse la carpeta caché, podía indicar que utilizaba esta información contenida en el archivo para arrancar más rápido los equipos. Técnicamente además, la extensión .vmcx hace referencia a archivos de configuración para cada VM, así que naturalmente estaban todos .vmcx de las virtuales creadas en ese mismo directorio.

Procedí entonces a realizar una copia de ese archivo en mi escritorio y a abrirlo con el bloc de notas de Windows. No es mucho lo que pudiera leer, pero solo necesité de la siguiente porción de texto contenida:

2015-02-22_10-30-54

El archivo tenía en sus datos el directorio donde efectivamente se encontraba el disco duro virtual de mi virtual (2K12R2-AD.vhdx), y además la letra de unidad desde donde había podido acceder por última vez; en mi caso, referenciaba a la letra E:.

Al verificar en mi Explorador de Archivos, me di cuenta del pequeño problema:

2015-02-22_10-37-36

La letra de unidad que me había asignado Windows la última vez que conecté mi disco externo, había sido la F y no la E que buscaba el archivo de configuración ubicado en la carpeta Caché de las máquinas virtuales. ¡Ahí estaba el problema! Hyper-V tenía en su memoria una ubicación diferente de cada disco virtual y al no encontrarla, se quejaba y le era imposible inicializar los equipos nuevamente.

La solución

Aunque no lo hice, se supone que cambiando la letra de unidad en el archivo de configuración a la F y reiniciando, el problema se habría corregido, puesto que encontraría todos los recursos necesarios; sin embargo, tendría que modificar cada .vmcx y no lo consideraba muy práctico.

La forma más fácil para solventar el tema, era volviendo a asignar la letra E a la partición que contenía los discos virtuales; para hacer esto de forma gráfica, hay que seguir estos pasos:

1. Hacer clic derecho en el botón de Inicio y seleccionar Administrador de Discos:

2015-02-23_7-38-01

2. En la consola de Administración de discos, hacer clic derecho sobre la partición o disco que se desea modificar y seleccionar Cambiar rutas y letra de unidad:

2015-02-23_7-39-52

3. En la ventana para cambiar la letra y ruta, clic en el botón Cambiar, y en Asignar la siguiente letra de unidad, poner la que debe corresponder; para mi caso, tenía que ser la letra E. Clic en Aceptar (OK):

2015-02-23_7-42-10

Windows advertirá sobre el peligro de cambiar la letra para programas que ya la estén referenciando y la necesidad de reiniciar:

2015-02-23_7-45-27

2015-02-23_7-47-32

Al aceptar ambos mensajes, veremos el cambio en el Administrador de Discos:

2015-02-23_7-48-16

4. Reiniciar el equipo.

Cuando hice los pasos anteriores y ejecuté Hyper-V después del reinicio, mis máquinas estaban de vuelta y listas para utilizar:

2015-02-23_7-54-48

¡Problema solucionado!

PD: No olviden seguirme en Twitter: www.twitter.com/secalderonr

Saludos.

Checho