IIC2513-2020-2 / syllabus

Material e información del curso
23 stars 7 forks source link

Problema WSL #57

Closed jcechavarri closed 3 years ago

jcechavarri commented 3 years ago

Hola!

Hace poco hice el upgrade de WSL a WSL2. Esto me generó ciertos conflictos debido a que estaba usando WSL en conjunto con Docker ToolBox (VirtualBox) y resulta que WSL2 utiliza la característica de máquina virtual (Microsoft Hyper-V), la cual no es compatible con VirtualBox. Entonces, al pasar a WSL2 ya no puedo usar Docker :S

Para la entrega de otro ramo en la cual necesitaba Docker tuve que deshabilitar esta característica para lograr trabajar, lo cual me stoppeo WSL2. Ahora, intenté nuevamente encender la característica para utilizar WSL2 pero me arroja el error:

Habilita la característica Plataforma de máquina virtual de Windows y asegúrate de que la virtualización esté habilitada en el BIOS.

Intenté desactivándola y activándola a través de consola, panel de control y BIOS. Cuando la reviso me sale como que está activa pero me arroja el mismo error. Cabe mencionar que anteriormente intenté utilizando Docker Desktop dentro de WSL2 pero se demoraba 10 veces más que ToolBox y me dejaba pegado el pc.

La única solución que se me ocurre es hacer un downgrade a WSL de manera que no interfiera con VirtualBox pero debido al error mencionado antes no he podido lograrlo.

Soluciones que he intentado:

  1. Deshabilitar y habilitar Hiper-V, el servicio de máquina virtual y WSL en sí.
  2. Eliminar la distribución de linux y reinstalarla (incluso probé con otra versión).
  3. Setear por defecto WSL1 en vez de WSL2.

image

image

Agradezco cualquier consejo para solucionarlo! 🙏

PS: Me encantaría poder hacer dual boot pero mi pc utiliza Optane que si no me equivoco no permite particionar el disco :(

dhvasquez commented 3 years ago

Hola, una pregunta ¿cual build the windows estas usando? y en Administrador de tareas -> Rendimiento -> CPU aparece que la virtulización esta activada

jcechavarri commented 3 years ago

@dhvasquez Logré solucionar el problema desactivando todas las características, distribuciones de linux, wsl y docker y volviendo a instalar wsl2 con Docker Desktop 👍

Mi única duda es si es normal que si intento hacer un build a través de wsl sobre archivos montados en el disco de Windows (no la virtualización para wsl) que se demore como años en cargar? Al final solo puedo trabajar con Docker sobre la virtualización (que con ToolBox no tenía este problema).

Dejo la información de mi build de todas maneras 😄 Gracias!

image

dhvasquez commented 3 years ago

Si es normal, basicamente con wsl2 estas corriendo el kernel completo de linux, y este por defecto usa un sistema de archivos llamado Ext4, mientras que windows utiliza uno más antiguo llamdo NT File System NTFS (NT es el kernel de windows), y por ende linux en sí no tiene muy buena compatibilidad con este sistema, por lo que no sabe manejarlo de la manera más apropiada, y justamente este es un problema que lleva Wsl2 al usar el núcleo completo mediante virtulización. De hecho, nodemon (el que se usa para correr yarn dev) no corre bien al montar el disco, y por ende tampoco docker. Acá esta la tabla mostrada por Microsoft y vemos que justamente el sistema de archivos es la única desventaja de WSL2 vs WSL1: wsl1vwsl2

Si quieres evitar tener este problema te recomiendo trabajar directamente en los directorios nativos de WSL2, es decir, ir a tu carpeta /home/<tu usuario>, la cuál se traduce como ~ (puedes llegar aplicando cd ~). terminalpwd

Y si quieres acceder a tus archivos utilizando el FileExplorer de windows, puedes simplemente poner en la ubicación de directorios la dirección \\wsl$\<distro_name>\home\<tu usuario>: directorio2

PD: En realidad el directorio nativo de linux parte desde / (en windows es C:\) pero no es recomendable cambiar nada de ahí a no ser de que sepas muy bien que estas haciendo, normalmente las clásicas carpetas de Documentos, Imagenes, Descargas, etc, en Linux se encuentran en /home/<tu usuario> ya que ahí es donde se tiene pensado que el usuario acceda a datos no vitales para el sistema operativo, o que tienden a moverse borrarse y cambiarse muy seguido.