Tras reiniciar un host con Windows Server 2022 Hyper‑V y VMs alojadas en un LUN iSCSI de un NAS “multi‑connect”, una o varias VMs aparecen en Off‑Critical porque el VHDX “desaparece”. La causa típica es usar el mismo LUN en varios hosts sin CSV ni clúster. Aquí tienes el porqué y cómo solucionarlo.
Escenario y síntoma
Host Hyper‑V 2022 con almacenamiento de VMs en la unidad D:
presentada por iSCSI desde un NAS con opción “multi‑iniciador/multi‑connect”. Tras un reinicio del host:
- Una VM (o varias) queda en estado Off‑Critical.
- La carpeta de la VM sigue existiendo (configuración, checkpoints, etc.).
- El
.vhdx
ya no se ve en el volumen iSCSI montado enD:
o la ruta original deja de ser válida. - Reiniciar servicios de Hyper‑V o reconectar iSCSI no restaura el acceso a los discos.
Diagnóstico en una frase
El LUN iSCSI se presentó a varios hosts simultáneamente sin gestionarlo mediante Failover Cluster y Cluster Shared Volumes (CSV). NTFS no es multi‑escritor; sin coordinación de reservas SCSI‑3, la montura del volumen es inestable y Hyper‑V pierde el VHDX.
Solución efectiva (resumen)
Crear un clúster de conmutación por error de Windows, agregar los LUN iSCSI al clúster y convertirlos a CSV. Reubicar las VMs dentro de C:\ClusterStorage\VolumeX\…
y operar esos LUN exclusivamente a través del clúster. Tras hacerlo, el problema desaparece.
Pasos recomendados de alto nivel
- Crear el clúster (instalar característica, validate y crear).
- Conectar los LUN iSCSI en todos los nodos con MPIO habilitado y reconexión automática.
- Agregar los discos al clúster y convertirlos a CSV (
C:\ClusterStorage\VolumeX\…
). - Ubicar las VMs y VHDX en el CSV (mover/crear en
C:\ClusterStorage\…
). - Verificar inicio automático de VMs y orden de servicios (
MSiSCSI
yvmms
en Automático).
Pasos detallados, comando a comando
Pre‑requisitos y buenas prácticas de red/almacenamiento
- Hosts en el mismo dominio de Active Directory, NTP correcto y firmware/drivers actualizados.
- Red dedicada para iSCSI (idealmente dos NICs por host para MPIO, sin TCP Offload problemático; MTU consistente si usas Jumbo Frames).
- En el NAS, no habilites “multi‑iniciador” indiscriminado; prepara LUN/targets por clúster.
- Los LUN deben soportar SCSI‑3 Persistent Reservations.
- No formatees ni montes los LUN directamente con letra en cada host si van a ser CSV; el clúster administra la propiedad.
Instalar características en cada nodo
# En cada host (ejecutar en PowerShell como administrador)
Install-WindowsFeature -Name Hyper-V,Failover-Clustering,RSAT-Clustering-PowerShell,Multipath-IO -IncludeManagementTools -Restart
Configurar MPIO e iniciador iSCSI
# Habilitar MPIO para iSCSI y reiniciar si lo solicita
Enable-MSDSMAutomaticClaim -BusType iSCSI
Set-Service -Name msiscsi -StartupType Automatic
Start-Service -Name msiscsi
Conectar portales/targets iSCSI (repite por portal/ruta)
New-IscsiTargetPortal -TargetPortalAddress 10.10.10.10
New-IscsiTargetPortal -TargetPortalAddress 10.10.11.10
Descubrir y conectar (persistente y multipath habilitado)
Get-IscsiTarget | Connect-IscsiTarget -IsPersistent \$true -IsMultipathEnabled \$true
Verificar sesiones y MPIO
Get-IscsiSession
mpclaim.exe -s -d
Validar y crear el clúster
# Sustituye por tus nombres/IPs
Test-Cluster -Node HV01,HV02 -Include "Inventory","Network","Storage","System Configuration"
Crea el clúster sin reclamar discos aún
New-Cluster -Name HYPV-CL01 -Node HV01,HV02 -StaticAddress 10.0.0.100 -NoStorage
Configura Quórum (ejemplo: uso de testigo de recurso compartido)
Set-ClusterQuorum -FileShareWitness \FS\ClusWitness\$
Agregar discos y convertir a CSV
# Discos visibles para el clúster
Get-ClusterAvailableDisk | Add-ClusterDisk
Convertir todos los discos de clúster a CSV
Get-ClusterDisk | Where-Object {$\_.IsCSV -eq \$false} | Add-ClusterSharedVolume
Listar rutas amigables de CSV
Get-ClusterSharedVolume | ForEach-Object {
\$*.Name
\$*.SharedVolumeInfo.FriendlyVolumeName
}
Rutas típicas: C:\ClusterStorage\Volume1, Volume2, ...
Migrar/ubicar VMs y VHDX en CSV
# Ejemplo: mover el almacenamiento de una VM a CSV
Move-VMStorage -VMName "VM-APP01" -DestinationStoragePath "C:\ClusterStorage\Volume1\VMs\VM-APP01"
O crear nuevas VMs directamente en CSV
New-VM -Name "VM-NEW01" -Path "C:\ClusterStorage\Volume1\VMs\VM-NEW01" -NewVHDPath "C:\ClusterStorage\Volume1\VMs\VM-NEW01\Disk0.vhdx" -NewVHDSizeBytes 60GB </code></pre>
<h3>Hacer las VMs altamente disponibles</h3>
<pre><code class="language-powershell"># Convertir VMs existentes en roles de clúster
Add-ClusterVirtualMachineRole -VirtualMachine "VM-APP01","VM-DB01"
Ajustes recomendados
(Get-Cluster).BlockCacheSize = 1024 # CSV cache en MB (evalúa según carga)
Prioridad de arranque/orden dentro del clúster
(Get-ClusterGroup -Name "VM-DB01").Priority = 3 # Mayor número = menor prioridad
(Get-ClusterGroup -Name "VM-APP01").Priority = 2 </code></pre>
<h3>Verificaciones clave tras la conversión</h3>
<ul>
<li>Las VMs arrancan desde rutas <code>C:\ClusterStorage\VolumeX\...</code> sin letras de unidad directas.</li>
<li>Servicios <code>MSiSCSI</code> y <code>Hyper‑V Virtual Machine Management (vmms)</code> en Automático.</li>
<li>Eventos limpios en <em>FailoverClustering</em>, <em>iScsiPrt</em> y <em>Hyper‑V‑VMMS</em>.</li>
</ul>
<hr>
<h2>Por qué ocurría (explicación técnica)</h2>
<ul>
<li><strong>NTFS no soporta múltiples escritores simultáneos</strong> sin coordinación. Al presentar un LUN iSCSI a varios hosts sin clúster, pueden fallar las reservas SCSI y producirse monturas inconsistentes.</li>
<li>El clúster usa <strong>SCSI‑3 Persistent Reservations</strong> para arbitrar el acceso y garantizar una única propiedad de disco.</li>
<li>Cuando el host pierde o cambia la letra/montura del volumen, Hyper‑V no encuentra el <code>.vhdx</code>; la VM queda <em>Off‑Critical</em>.</li>
</ul>
<h2>Buenas prácticas para Hyper‑V + iSCSI</h2>
<ul>
<li>Si el mismo LUN será visible por más de un host, <strong>siempre</strong> usa Failover Cluster + CSV.</li>
<li>Habilita y prueba <strong>MPIO</strong> (múltiples rutas y equilibrio de carga apropiado).</li>
<li>En el iniciador iSCSI, marca <em>Conectar automáticamente al iniciar sesión</em> y comprueba la persistencia de sesiones.</li>
<li>No pongas en <em>offline</em>/<em>online</em> manualmente los discos que use el clúster; deja que el clúster gestione la propiedad.</li>
<li>Mantén firmware y drivers de NIC/iSCSI/NAS al día; revisa <em>iScsiPrt</em>, <em>Storport</em> y <em>FailoverClustering</em> ante cualquier síntoma.</li>
<li>Aísla la red iSCSI, QoS si es necesario y ajusta <code>TimeOutValue</code> del servicio <code>Disk</code> (p. ej., 60) en entornos con latencia.</li>
</ul>
<h2>Alternativas si no necesitas clúster/HA</h2>
<ul>
<li>Presenta el LUN iSCSI <strong>solo</strong> a un host (deshabilita multi‑iniciador en el NAS).</li>
<li>Usa <strong>SMB 3</strong> con disponibilidad continua desde un servidor de archivos en clúster en lugar de iSCSI directo.</li>
<li>Usa almacenamiento local del host + <strong>Hyper‑V Replica</strong> y copias de seguridad para resiliencia.</li>
</ul>
<h2>Checklist rápido de salud</h2>
<ul>
<li>[ ] ¿Los VHDX viven en <code>C:\ClusterStorage\VolumeX\…</code>?</li>
<li>[ ] ¿El disco iSCSI aparece como <strong>CSV</strong> en el administrador del clúster?</li>
<li>[ ] ¿MPIO activo y sesiones iSCSI persistentes?</li>
<li>[ ] ¿Servicios <code>MSiSCSI</code> y <code>Hyper‑V VMMS</code> en automático?</li>
<li>[ ] ¿Sin accesos simultáneos fuera del clúster al mismo LUN?</li>
</ul>
<h2>Tabla de síntomas, causas y acciones</h2>
<table>
<thead>
<tr>
<th>Síntoma</th>
<th>Causa probable</th>
<th>Acción recomendada</th>
</tr>
</thead>
<tbody>
<tr>
<td>VM en <em>Off‑Critical</em>; VHDX no se encuentra</td>
<td>LUN iSCSI montado diferente o sin reservas válidas</td>
<td>Convertir LUN a CSV y mover la VM a <code>C:\ClusterStorage\…</code></td>
</tr>
<tr>
<td>Volumen iSCSI cambia de letra tras reinicio</td>
<td>Montura no administrada por clúster; auto‑mount de Windows</td>
<td>Usar CSV (sin letras) y propiedad de disco por el clúster</td>
</tr>
<tr>
<td>Eventos de iScsiPrt indicando restablecimientos</td>
<td>MPIO no habilitado o rutas inestables</td>
<td>Habilitar MPIO, revisar NICs/MTU/QoS y persistencia</td>
</tr>
<tr>
<td>Fallo al iniciar varias VMs simultáneamente</td>
<td>Timeouts/cola de disco o dependencia de almacenamiento</td>
<td>Ajustar prioridades del clúster y <code>TimeOutValue</code></td>
</tr>
</tbody>
</table>
<h2>Guía de recuperación inmediata (si ya “perdiste” el VHDX)</h2>
<ol>
<li><strong>Detén</strong> la VM afectada si aparece parcialmente cargada.</li>
<li>En <em>Administrador de discos</em>, confirma si el volumen iSCSI está en línea. No cambies letras si va a ser CSV.</li>
<li>Desde PowerShell, lista CSV o discos de clúster:
<pre><code class="language-powershell">Get-ClusterSharedVolume
Get-ClusterDisk
Get-Volume | Where-Object {$_.FileSystemLabel -like "CSV"}
</code></pre>
</li>
<li>Busca el <code>.vhdx</code> por firma/tamaño si el volumen está montado con otra ruta:
<pre><code class="language-powershell">Get-ChildItem -Path D:\ -Recurse -Filter *.vhdx -ErrorAction SilentlyContinue |
Sort-Object Length -Descending | Select-Object FullName, Length, LastWriteTime -First 50
Si localizas el VHDX, no lo muevas en caliente; adjúntalo a la VM detenida, arranca, y luego migra el almacenamiento a C:\ClusterStorage\…
.
Si el LUN presenta errores, con el volumen desmontado ejecuta chkdsk
y revisa snapshots del NAS.
Scripts de referencia para automatizar
# Crear carpetas estándar por CSV
$csv = "C:\ClusterStorage\Volume1\VMs"
$newFolders = @("VMs","ISOs","Backups") | ForEach-Object { Join-Path "C:\ClusterStorage\Volume1" $_ }
$newFolders | ForEach-Object { if(!(Test-Path $)){ New-Item -ItemType Directory -Path $ | Out-Null } }
Registrar varias VMs como roles de clúster
\$vmList = @("VM-APP01","VM-DB01","VM-WEB01")
\$vmList | ForEach-Object { Add-ClusterVirtualMachineRole -VirtualMachine $\_ }
Establecer arranque automático y orden
\$orders = @{ "VM-DB01"=1; "VM-APP01"=2; "VM-WEB01"=3 }
foreach(\$vm in \$orders.Keys){
(Get-ClusterGroup -Name \$vm).Priority = \$orders\[\$vm]
}
Seguridad y rendimiento
- Activa autenticación (p. ej., CHAP) en iSCSI según política.
- Separa físicamente o por VLAN la red iSCSI; evita compartirla con tráfico de usuario.
- Evalúa CSV Cache para cargas con lecturas repetitivas (por ejemplo, 512–2048 MB por host).
- Comprueba colas de disco y latencias con contadores de rendimiento y el registro FailoverClustering/Diagnostics.
Errores comunes que debes evitar
- Dejar el mismo LUN accesible en varios hosts sin clúster ➜ incoherencias de NTFS.
- Asignar letras a CSV o mover manualmente el propietario del disco fuera del clúster.
- Usar una sola ruta iSCSI “barata” para todo ➜ sin MPIO, sin redundancia.
- No validar con
Test-Cluster
antes de poner en producción.
Preguntas frecuentes
¿Puedo usar varios LUN para separar datos y SO de VM?
Sí. Crea varios CSV (p. ej., CSVOS y CSVDATA) y asigna cada VHDX en la ruta adecuada dentro de C:\ClusterStorage\…
.
¿Puedo conservar D:
como letra del LUN?
No es recomendable para CSV. Los CSV se montan como puntos de montaje bajo C:\ClusterStorage\
y evitan problemas de letras.
¿Necesito obligatoriamente dos NICs para iSCSI?
No, pero es lo recomendado para MPIO y resiliencia real.
¿Cómo verifico que una VM está “clusterizada”?
En Failover Cluster Manager debe aparecer como Rol. Vía PowerShell: Get-ClusterGroup
debe listar tus VMs.
Resumen accionable
- Detén el acceso simultáneo al LUN desde hosts fuera del clúster.
- Habilita MPIO y sesiones iSCSI persistentes en todos los nodos.
- Crea el clúster, agrega los LUN y conviértelos a CSV.
- Mueve todas las VMs a
C:\ClusterStorage\VolumeX\…
y publícalas como Roles. - Comprueba servicios, eventos y prioridades de arranque.
Conclusión
El estado Off‑Critical con “VHDX desaparecido” tras reinicio no es un misterio: es un patrón clásico de multi‑iniciador sin clúster. Al convertir los LUN a CSV dentro de un Failover Cluster y operar las VMs exclusivamente desde C:\ClusterStorage\…
, estabilizas el almacenamiento, evitas monturas erráticas y ganas alta disponibilidad real. Complementa con MPIO, sesiones persistentes y una validación rigurosa del clúster, y tu entorno Hyper‑V 2022 quedará sólido frente a reinicios, fallos de ruta y mantenimientos programados.
Checklist final
- [ ] LUNs convertidos a CSV y visibles como Cluster Shared Volumes.
- [ ] VMs y VHDX en rutas
C:\ClusterStorage\VolumeX\…
. - [ ] MPIO activo con múltiples sesiones iSCSI persistentes.
- [ ] Servicios
MSiSCSI
yvmms
en Automático. - [ ] Sin accesos simultáneos externos al mismo LUN.
- [ ] Validación
Test-Cluster
sin errores críticos.