El desastre de VMware Workstation nested virtualization con WSL2

Atrapado en el hype de WSL2 y te encontraste con sorpresas como el error “Virtualized Intel VT-x/EPT is not supported on this platform”? yo también (…) bienvenido al desastre de VMware no funcionando como corresponde junto con Hyper-V en Windows 10. 

Este era un problema conocido y VMware intento calmas las guas en mayo pasado con poco éxito, como pueden ver en su post anunciando que desde VMware Workstation 15.5 habría soporte para el Hyper-V mode, en el que finalmente tuvieron que desactivar los comentarios por el nivel de descontento de sus usuarios.

https://blogs.vmware.com/workstation/2020/05/vmware-workstation-now-supports-hyper-v-mode.html

Historia corta, hasta ahora en el release 16.0.0 build-16894299 de VMware Workstation esto sigue sin funcionar. Los síntomas están siempre asociados a VMs con features de Virtualization Engine habilitados, lo que termina siempre con errores como el mencionado “Virtualized Intel VT-x/EPT is not supported on this platform”.

Hay factores en comun para este error y para la mayoría de la gente (or por lo menos los ingenieros en redes que conozco) son:

  • WMware Workstation Pro version 15.5.5 o superiores.
  • Windows 10 version 2004, en cualquier sabor del build 19041.x OS.
  • Windows Subsystem for Linux habilitado para WSL2, incluyendo los features de sistema:
    • Virtual Machine Platform
    • Windows Hypervisor Platform

Esta combinación habilita Hyper-V como motor de virtualizacion, lo que a VMware Workstation no le gusta mucho y por lo tanto deja inusable cualquier técnica de nested virtualization (maquinas virtuales dentro de tus maquinas virtuales). VMware no esta ni un centimetro cerca de resolver este problema (sorprendentemente VirtualBox pareciera tener algo mas de preparación) y personalmente me rendí buscando opciones decentes que no sean soluciones parche (hay algunas pero con penalties altos en términos de performance de las VM y el sistema operativo base). Necesitaba mis VMs con nested virtualization funcionales así que aquí  va una receta para llegar a un punto medio: nested virtualization funciona pero solo con WSL1, si puedes vivir sin un Kernel Linux completo en tu terminal entonces esto es para ti.

1 Iniciar un terminal CMD como administrador y revisar la version actual de tus VM WSL con  wsl -l -v 
1
2
3
wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
2 Reversar tus VMs actuales a WSL1 con  wsl –set-version {VM NAME} 1  y confirmar que la migracion fue exitosa con el mismo comando del paso 1
1
2
3
4
5
6
7
wwsl --set-version Ubuntu-18.04 1
Conversion in progress, this may take a few minutes...
Conversion complete.

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1
3 Configurar la version por defecto de WSL para cualquier nueva VM a la 1 para evitar problemas en futuras instalaciones  wsl –set-default-version 1  
4 Ahora hay que deshabilitar los features de Windows virtual machine y hypervisor usando DISM como se muestra a continuacion  dism.exe /online /disable-feature /featurename:VirtualMachinePlatform /featurename:HypervisorPlatform /norestart   Nótese que el parámetro “/norestart” permite guardar cualquier trabajo abierto antes de reiniciar el equipo.
1
2
3
4
5
6
7
8
9
10
dism.exe /online /disable-feature /featurename:VirtualMachinePlatform /featurename:HypervisorPlatform /norestart

Deployment Image Servicing and Management tool
Version: 10.0.19041.572

Image Version: 10.0.19041.572

Disabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.

Al reiniciar el equipo verán la clásica pantalla de “we’re working on your updates”. Una vez hecho login, si todo salió bien, deberían ser capaces de iniciar una VM con nested virtualizacion mientras mantienen por lo menos WSL1 activo. Es un sacrificio considerable, lo sé.

Gracias VMware

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *

This site uses Akismet to reduce spam. Learn how your comment data is processed.