Comparación de WSL 1 con WSL 2Comparing WSL 1 and WSL 2

La diferencia y los motivos principales para actualizar el Subsistema de Windows para Linux de WSL 1 a WSL 2 son:The primary difference and reasons for updating the Windows Subsystem for Linux from WSL 1 to WSL 2 are to:

  • Aumento del rendimiento del sistema de archivos.increase file system performance,
  • Compatibilidad completa con las llamadas del sistema.support full system call compatibility.

WSL 2 usa la tecnología de virtualización más reciente y óptima para ejecutar un kernel de Linux en una máquina virtual (VM) de utilidad ligera.WSL 2 uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM). Sin embargo, WSL 2 no es una experiencia de VM tradicional.However, WSL 2 is not a traditional VM experience.

Comparación de característicasComparing features

CaracterísticaFeature WSL 1WSL 1 WSL 2WSL 2
Integración entre Windows y LinuxIntegration between Windows and Linux
Tiempos de arranque rápidosFast boot times
Superficie de recursos pequeñaSmall resource foot print
Se ejecuta con las versiones actuales de VMWare y VirtualBoxRuns with current versions of VMware and VirtualBox
VM administradasManaged VM
Kernel de Linux completoFull Linux Kernel
Compatibilidad completa con las llamadas del sistemaFull system call compatibility
Rendimiento entre sistemas de archivos del sistema operativoPerformance across OS file systems

Como puede ver en la tabla de comparación anterior, la arquitectura de WSL 2 supera a la de WSL 1 de varias maneras, con la excepción del rendimiento en los sistemas de archivos del sistema operativo.As you can tell from the comparison table above, the WSL 2 architecture outperforms WSL 1 in several ways, with the exception of performance across OS file systems.

Rendimiento entre sistemas de archivos del sistema operativoPerformance across OS file systems

Se recomienda no trabajar en los sistemas operativos con los archivos, a menos que tenga una razón específica para hacerlo.We recommend against working across operating systems with your files, unless you have a specific reason for doing so. Para lograr la máxima velocidad de rendimiento, almacene los archivos en el sistema de archivos de WSL si está trabajando en una línea de comandos de Linux (Ubuntu, OpenSUSE, etc.).For the fastest performance speed, store your files in the WSL file system if you are working in a Linux command line (Ubuntu, OpenSUSE, etc). Si trabaja en una línea de comandos de Windows (PowerShell, símbolo del sistema), almacene los archivos en el sistema de archivos de Windows.If you're working in a Windows command line (PowerShell, Command Prompt), store your files in the Windows file system.

Por ejemplo, al almacenar los archivos de proyecto de WSL, haz lo siguiente:For example, when storing your WSL project files:

  • Usa el directorio raíz del sistema de archivos de Linux: \\wsl$\Ubuntu-18.04\home\<user name>\ProjectUse the Linux file system root directory: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • No uses el directorio raíz del sistema de archivos de Windows: C:\Users\<user name>\ProjectNot the Windows file system root directory: C:\Users\<user name>\Project

Puedes acceder al sistema de archivos raíz de Linux con las aplicaciones y herramientas de Windows, como el Explorador de archivos.You can access your Linux root file system with Windows apps and tools like File Explorer. Intenta abrir una distribución de Linux (como Ubuntu). Para asegurarte de que estás en el directorio principal de Linux, escribe este comando: cd ~.Try opening a Linux distribution (like Ubuntu), be sure that you are in the Linux home directory by entering this command: cd ~. Después, abre el sistema de archivos de Linux en el Explorador de archivos. Para ello, escribe (no olvides el punto al final) : explorer.exe .Then open your Linux file system in File Explorer by entering (don't forget the period at the end): explorer.exe .

WSL 2 solo está disponible en Windows 10, versión 1903, compilación 18362 o superior.WSL 2 is only available in Windows 10, Version 1903, Build 18362 or higher. Para comprobar la versión de Windows, selecciona la tecla del logotipo de Windows + R, escribe winver y selecciona Aceptar.Check your Windows version by selecting the Windows logo key + R, type winver, select OK. (También puedes escribir el comando ver en el símbolo del sistema de Windows).(Or enter the ver command in Windows Command Prompt). Es posible que tengas que actualizar a la versión más reciente de Windows.You may need to update to the latest Windows version. En el caso de las compilaciones inferiores a 18362, no se admite WSL en absoluto.For builds lower than 18362, WSL is not supported at all.

Nota

WSL 2 funcionará con VMWare 15.5.5 y versiones posteriores y VirtualBox 6 y versiones posteriores.WSL 2 will work with VMware 15.5.5+ and VirtualBox 6+. Obtenga más información en las preguntas más frecuentes sobre WSL 2.Learn more in our WSL 2 FAQs.

Novedades de WSL 2What's new in WSL 2

WSL 2 es una revisión importante de la arquitectura subyacente y usa tecnología de virtualización y un kernel de Linux para habilitar las nuevas características.WSL 2 is a major overhaul of the underlying architecture and uses virtualization technology and a Linux kernel to enable new features. Los principales objetivos de esta actualización son aumentar el rendimiento del sistema de archivos y agregar compatibilidad completa con las llamadas del sistema.The primary goals of this update are to increase file system performance and add full system call compatibility.

Arquitectura de WSL 2WSL 2 architecture

Una experiencia de VM tradicional puede presentar un arranque lento, aislamiento y un consumo excesivo de recursos, además de exigir tiempo para su administración.A traditional VM experience can be slow to boot up, is isolated, consumes a lot of resources, and requires your time to manage it. WSL 2 no tiene estos atributos.WSL 2 does not have these attributes.

WSL 2 ofrece las ventajas de WSL 1, incluida una integración perfecta entre Windows y Linux, tiempos de arranque más breves y una superficie de recursos pequeña. Además, no requiere ninguna configuración ni administración de las VM.WSL 2 provides the benefits of WSL 1, including seamless integration between Windows and Linux, fast boot times, a small resource footprint, and requires no VM configuration or management. Aunque WSL 2 usa una VM, se administra y se ejecuta en segundo plano, lo que te permite disfrutar de la misma experiencia de usuario que WSL 1.While WSL 2 does use a VM, it is managed and run behind the scenes, leaving you with the same user experience as WSL 1.

Kernel de Linux completoFull Linux kernel

Microsoft ha creado el kernel de Linux en WSL 2 a partir de la rama estable más reciente. Para ello, se basó en el origen disponible en kernel.org. Este kernel se ha ajustado especialmente para WSL 2, y se ha optimizado su tamaño y rendimiento para ofrecer una increíble experiencia de Linux en Windows.The Linux kernel in WSL 2 is built by Microsoft from the latest stable branch, based on the source available at kernel.org. This kernel has been specially tuned for WSL 2, optimizing for size and performance to provide an amazing Linux experience on Windows. El kernel recibirá actualizaciones de Windows, lo que significa que obtendrás las correcciones de seguridad y las mejoras del kernel más recientes sin que debas administrarlo por tu cuenta.The kernel will be serviced by Windows updates, which means you will get the latest security fixes and kernel improvements without needing to manage it yourself.

El kernel de Linux para WSL 2 es de código abierto.The WSL 2 Linux kernel is open source. Si quieres obtener más información, consulta la entrada de blog Envío de un kernel de Linux con Windows, escrita por el equipo que lo creó.If you'd like to learn more, check out the blog post Shipping a Linux Kernel with Windows written by the team that built it.

Mayor rendimiento de E/S de archivosIncreased file IO performance

Las operaciones de uso intensivo de archivos, como git clone, npm install, apt update, apt upgrade y otras, son considerablemente más rápidas con WSL 2.File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all noticeably faster with WSL 2.

El aumento de la velocidad real dependerá de la aplicación que se esté ejecutando y de cómo interactúes con el sistema de archivos.The actual speed increase will depend on which app you're running and how it is interacting with the file system. Las versiones iniciales de WSL 2 se ejecutan hasta 20 veces más rápido en comparación con WSL 1 al desempaquetar un archivo tarball comprimido, y aproximadamente entre 2y 5 veces más rápido cuando se usan git clone, npm install y cmake en distintos proyectos.Initial versions of WSL 2 run up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone, npm install and cmake on various projects.

Compatibilidad completa con las llamadas del sistemaFull system call compatibility

Los archivos binarios de Linux usan llamadas del sistema para ejecutar funciones, como el acceso a archivos, la solicitud de memoria, la creación de procesos, etc.Linux binaries use system calls to perform functions such as accessing files, requesting memory, creating processes, and more. Mientras que WSL 1 usaba una capa de traducción creada por el equipo de WSL, WSL 2 incluye su propio kernel de Linux con total compatibilidad con las llamadas del sistema.Whereas WSL 1 used a translation layer that was built by the WSL team, WSL 2 includes its own Linux kernel with full system call compatibility. Entre las ventajas se incluyen las siguientes:Benefits include:

  • Un conjunto de aplicaciones nuevo y completo que se pueden ejecutar en WSL, como Docker , entre otros.A whole new set of apps that you can run inside of WSL, such as Docker and more.

  • Todas las actualizaciones del kernel de Linux están listas para su uso inmediato.Any updates to the Linux kernel are immediately ready for use. (No tienes que esperar a que el equipo de WSL implemente actualizaciones y agregue los cambios).(You don't have to wait for the WSL team to implement updates and add the changes).

WSL 2 usa una cantidad menor de memoria en el inicioWSL 2 uses a smaller amount of memory on startup

WSL 2 usa una VM de utilidad ligera en un kernel de Linux real con una superficie de memoria pequeña.WSL 2 uses a lightweight utility VM on a real Linux kernel with a small memory footprint. La utilidad asignará memoria respaldada por direcciones virtuales al iniciarse.The utility will allocate Virtual Address backed memory on startup. Está configurada para empezar con una pequeña proporción de la memoria total que se necesitaba para WSL 1.It is configured to start with a smaller proportion of your total memory that what was required for WSL 1.

Excepciones para usar WSL 1 en lugar de WSL 2Exceptions for using WSL 1 rather than WSL 2

Te recomendamos que uses WSL 2, ya que ofrece un rendimiento mayor y compatibilidad completa con las llamadas del sistema.We recommend that you use WSL 2 as it offers faster performance and 100% system call compatibility. Sin embargo, hay algunos escenarios específicos en los que podrías preferir el uso de WSL 1.However, there are a few specific scenarios where you might prefer using WSL 1. Considera el uso de WSL 1 en los casos siguientes:Consider using WSL 1 if:

  • Los archivos de proyecto se deben almacenar en el sistema de archivos de Windows.Your project files must be stored in the Windows file system. WSL 1 ofrece un acceso más rápido a los archivos montados desde Windows.WSL 1 offers faster access to files mounted from Windows.
    • Si vas a usar tu distribución de WSL para Linux para acceder a los archivos de proyecto en el sistema de archivos de Windows, y estos archivos no se pueden almacenar en el sistema de archivos de Linux, obtendrás un mayor rendimiento en los sistemas de archivos del sistema operativo mediante WSL 1.If you will be using your WSL Linux distribution to access project files on the Windows file system, and these files cannot be stored on the Linux file system, you will achieve faster performance across the OS files systems by using WSL 1.
  • Un proyecto requiere la compilación cruzada con las herramientas de Windows y Linux en los mismos archivos.A project which requires cross-compilation using both Windows and Linux tools on the same files.
    • El rendimiento de los archivos en los sistemas operativos Windows y Linux es mayor en WSL 1 que en WSL 2, por lo que, si usas aplicaciones Windows para acceder a archivos de Linux, obtendrás un mayor rendimiento con WSL 1.File performance across the Windows and Linux operating systems is faster in WSL 1 than WSL 2, so if you are using Windows applications to access Linux files, you will currently achieve faster performance with WSL 1.

Nota

Considera la posibilidad de probar la extensión Remote WSL de VS Code para poder almacenar los archivos de proyecto en el sistema de archivos de Linux, mediante las herramientas de línea de comandos de Linux, pero también con VS Code en Windows para crear, editar, depurar o ejecutar el proyecto en un explorador de Internet, sin experimentar las ralentizaciones de rendimiento asociadas con el trabajo en los sistemas de archivos de Windows.Consider trying the VS Code Remote WSL Extension to enable you to store your project files on the Linux file system, using Linux command line tools, but also using VS Code on Windows to author, edit, debug, or run your project in an internet browser without any of the performance slow-downs associated with working across the Linux and Windows file systems. Más información.Learn more.

Acceso a aplicaciones de redAccessing network applications

Acceso a las aplicaciones de red de Linux desde Windows (localhost)Accessing Linux networking apps from Windows (localhost)

Si vas a crear una aplicación de red (por ejemplo, una aplicación que se ejecute en NodeJS o SQL Server) en la distribución de Linux, puedes acceder a ella desde una aplicación de Windows (como el explorador de Internet Edge o Chrome) mediante localhost (como lo harías de manera habitual).If you are building a networking app (for example an app running on a NodeJS or SQL server) in your Linux distribution, you can access it from a Windows app (like your Edge or Chrome internet browser) using localhost (just like you normally would).

Sin embargo, si ejecutas una versión anterior de Windows (compilación 18945 o anterior), tendrás que obtener la dirección IP de la VM host de Linux (o actualizar a la versión más reciente de Windows).However, if you are running an older version of Windows (Build 18945 or less), you will need to get the IP address of the Linux host VM (or update to the latest Windows version).

Para buscar la dirección IP de la máquina virtual que habilita tu distribución de Linux:To find the IP address of the virtual machine powering your Linux distribution:

  • Desde la distribución de WSL (por ejemplo, Ubuntu), ejecuta el comando: ip addrFrom your WSL distribution (ie Ubuntu), run the command: ip addr
  • Busca la dirección en el valor inet de la interfaz eth0 y cópiala.Find and copy the address under the inet value of the eth0 interface.
  • Si tienes instalada la herramienta grep, puedes buscarla más fácilmente filtrando el resultado con el comando: ip addr | grep eth0If you have the grep tool installed, find this more easily by filtering the output with the command: ip addr | grep eth0
  • Conéctate al servidor de Linux con esta dirección IP.Connect to your Linux server using this IP address.

La imagen siguiente muestra un ejemplo con la conexión a un servidor de Node.js mediante el navegador Edge.The picture below shows an example of this by connecting to a Node.js server using the Edge browser.

Conexión al servidor de NodeJS con Edge

Acceso a aplicaciones de red de Windows desde Linux (dirección IP del host)Accessing Windows networking apps from Linux (host IP)

Si quieres acceder a una aplicación de red que se ejecuta en Windows (por ejemplo, una aplicación que se ejecuta en NodeJS o SQL Server) desde tu distribución de Linux (por ejemplo, Ubuntu), debes usar la dirección IP de la máquina host.If you want to access a networking app running on Windows (for example an app running on a NodeJS or SQL server) from your Linux distribution (ie Ubuntu), then you need to use the IP address of your host machine. Aunque no se trata de un escenario común, puedes seguir estos pasos para que funcione.While this is not a common scenario, you can follow these steps to make it work. - Para obtener la dirección IP de la máquina host, ejecuta este comando desde la distribución de Linux: cat /etc/resolv.confObtain the IP address of your host machine by running this command from your Linux distribution: cat /etc/resolv.conf - Copia la dirección IP que sigue al término: nameserver.Copy the IP address following the term: nameserver. - Conéctate a cualquier servidor de Windows con la dirección IP copiada.Connect to any Windows server using the copied IP address.

La imagen siguiente muestra un ejemplo con la conexión a un servidor de Node.js que se ejecuta en Windows a través de curl.The picture below shows an example of this by connecting to a Node.js server running in Windows via curl.

Conexión al servidor de NodeJS en Windows a través de cURL

Consideraciones adicionales sobre redesAdditional networking considerations

Conexión a través de direcciones IP remotasConnecting via remote IP addresses

Si se usan direcciones IP remotas para conectarse a las aplicaciones, estas se tratarán como conexiones desde la red de área local (LAN).When using remote IP addresses to connect to your applications, they will be treated as connections from the Local Area Network (LAN). Esto significa que tendrás que asegurarte de que la aplicación puede aceptar conexiones LAN.This means that you will need to make sure your application can accept LAN connections.

Por ejemplo, es posible que tengas que enlazar la aplicación a 0.0.0.0 en lugar de a 127.0.0.1.For example, you may need to bind your application to 0.0.0.0 instead of 127.0.0.1. En el ejemplo de una aplicación de Python que usa Flask, esto se puede hacer con el comando app.run(host='0.0.0.0').In the example of a Python app using Flask, this can be done with the command: app.run(host='0.0.0.0'). Ten en cuenta la seguridad al hacer estos cambios, ya que se permitirán las conexiones desde la LAN.Please keep security in mind when making these changes as this will allow connections from your LAN.

Acceso a la distribución de WSL 2 desde la red de área local (LAN)Accessing a WSL 2 distribution from your local area network (LAN)

Al usar una distribución de WSL 1, si el equipo está configurado para ser accesible desde la LAN, también se podrá acceder a las aplicaciones que se ejecuten en WSL en la LAN.When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.

Esto no ocurre de forma predeterminada en WSL 2.This isn't the default case in WSL 2. WSL 2 tiene un adaptador Ethernet virtualizado con su propia dirección IP única.WSL 2 has a virtualized ethernet adapter with its own unique IP address. Actualmente, para habilitar este flujo de trabajo, tendrás que seguir los mismos pasos que para una máquina virtual normal.Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (Estamos buscando maneras de mejorar esta experiencia).(We are looking into ways to improve this experience.)

Este es un ejemplo de un comando de PowerShell para agregar un proxy de puerto que realiza escuchas en el puerto 4000 del host y lo conecta al puerto 4000 de la máquina virtual WSL 2 con la dirección IP 192.168.101.100.Here's an example PowerShell command to add a port proxy that listens on port 4000 on the host and connects it to port 4000 to the WSL 2 VM with IP address 192.168.101.100.

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

Acceso IPv6IPv6 access

Actualmente, las distribuciones de WSL 2 no pueden acceder a direcciones solo de IPv6.WSL 2 distributions currently cannot reach IPv6-only addresses. Estamos trabajando para agregar esta característica.We are working on adding this feature.

Ampliación del tamaño del disco duro virtual de WSL 2Expanding the size of your WSL 2 Virtual Hard Disk

WSL 2 usa un disco duro virtual (VHD) para almacenar los archivos de Linux.WSL 2 uses a Virtual Hard Disk (VHD) to store your Linux files. En WSL 2, un VHD se representa en el disco duro de Windows como un archivo .vhdx.In WSL 2, a VHD is represented on your Windows hard drive as a .vhdx file.

El VHD de WSL 2 usa el sistema de archivos ext4.The WSL 2 VHD uses the ext4 file system. Este VHD cambia de tamaño automáticamente para satisfacer tus necesidades de almacenamiento y tiene un tamaño máximo inicial de 256 GB.This VHD automatically resizes to meet your storage needs and has an initial maximum size of 256GB. Si el espacio de almacenamiento que necesitan los archivos de Linux supera este tamaño, debería expandirlo.If the storage space required by your Linux files exceeds this size you may need to expand it. Si tu distribución aumenta de tamaño y supera los 256 GB, verás errores que indicarán que se ha agotado el espacio en disco.If your distribution grows in size to be greater than 256GB, you will see errors stating that you've run out of disk space. Para corregir estos errores, puedes ampliar el tamaño del VHD.You can fix this error by expanding the VHD size.

Para ampliar el tamaño máximo del VHD más allá de 256 GB:To expand your maximum VHD size beyond 256GB:

  1. Finaliza todas las instancias de WSL mediante el comando wsl --shutdown.Terminate all WSL instances using the command: wsl --shutdown

  2. Busca el nombre del paquete de instalación de la distribución ("PackageFamilyName").Find your distribution installation package name ('PackageFamilyName')

    • En PowerShell (en que "distro" es el nombre de tu distribución), escribe el comando siguiente:Using PowerShell (where 'distro' is your distribution name) enter the command:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
  3. Busca el archivo VHD fullpath que se usa en tu instalación de WSL 2, que será tu valor de pathToVHD:Locate the VHD file fullpath used by your WSL 2 installation, this will be your pathToVHD:

    • %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
  4. Cambia el tamaño del VHD de WSL 2 mediante los comandos siguientes:Resize your WSL 2 VHD by completing the following commands:

    • Abre el símbolo del sistema de Windows con privilegios de administrador y escribe:Open Windows Command Prompt with admin privileges and enter:

      diskpart
      DISKPART> Select vdisk file="<pathToVHD>"
      DISKPART> detail vdisk
      
    • Examine la salida del comando detail.Examine the output of the detail command. La salida incluirá un valor de Tamaño virtual.The output will include a value for Virtual size. Este es el valor máximo actual.This is the current maximum. Convierta este valor en megabytes.Convert this value to megabytes. Después del cambio de tamaño, el valor nuevo debe ser mayor que este.The new value after resizing must be greater than this value. Por ejemplo, si la salida de detail devuelve Tamaño virtual: 256 GB, debe especificar un valor mayor que 256000.For example, if the detail output shows Virtual size: 256 GB, then you must specify a value greater than 256000. Una vez que haya convertido el nuevo tamaño en megabytes, escriba el siguiente comando en diskpart:Once you have your new size in megabytes, enter the following command in diskpart:

      DISKPART> expand vdisk maximum=<sizeInMegaBytes>
      
    • Salga de diskpart.Exit diskpart

      DISKPART> exit
      
  5. Inicia la distribución de WSL (Ubuntu, por ejemplo).Launch your WSL distribution (Ubuntu, for example).

  6. Para indicar a WSL que puede expandir el tamaño del sistema de archivos, ejecute estos comandos desde la línea de comandos de su distribución de Linux:Make WSL aware that it can expand its file system's size by running these commands from your Linux distribution command line.

    Nota

    Podría mostrarse este mensaje en respuesta al primer comando mount: /dev: none ya está montado en /dev.You may see this message in response to the first mount command: /dev: none already mounted on /dev. Este mensaje puede pasarse por alto sin ningún problema.This message can safely be ignored.

       sudo mount -t devtmpfs none /dev
       mount | grep ext4
    

    Copie el nombre de esta entrada, que tendrá el siguiente aspecto: /dev/sdX (en que la X representa cualquier otro carácter).Copy the name of this entry, which will look like: /dev/sdX (with the X representing any other character). En el ejemplo siguiente, el valor de X es b:In the following example the value of X is b:

       sudo resize2fs /dev/sdb <sizeInMegabytes>M
    

    Nota

    También puede que necesite instalar resize2fs.You may need to install resize2fs. En caso afirmativo, puede usar este comando para instalarlo: sudo apt install resize2fs.If so, you can use this command to install it: sudo apt install resize2fs.

    La salida tendrá una apariencia parecida a la siguiente:The output will look similar to the following:

       resize2fs 1.44.1 (24-Mar-2018)
       Filesystem at /dev/sdb is mounted on /; on-line resizing required
       old_desc_blocks = 32, new_desc_blocks = 38
       The filesystem on /dev/sdb is now 78643200 (4k) blocks long.
    

Nota

En general, no debes modificar ni mover los archivos relacionados con WSL ubicados en la carpeta AppData mediante herramientas o editores de Windows. Tampoco tienes que acceder a estos archivos.In general do not modify, move, or access the WSL related files located inside of your AppData folder using Windows tools or editors. Al hacerlo, podrías dañar tu distribución de Linux.Doing so could cause your Linux distribution to become corrupted.