Сравнение WSL 1 и WSL 2Comparing WSL 1 and WSL 2

Основные различия между подсистемами Windows для Linux WSL 1 и WSL 2 и причины обновления:The primary difference and reasons for updating the Windows Subsystem for Linux from WSL 1 to WSL 2 are to:

  • повышение производительности файловой системы;increase file system performance,
  • поддержка полной совместимости системных вызовов.support full system call compatibility.

WSL 2 использует последнюю и самую новую технологию виртуализации для запуска ядра Linux внутри упрощенной служебной виртуальной машины.WSL 2 uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM). Однако WSL 2 не является традиционным функционалом виртуальной машины.However, WSL 2 is not a traditional VM experience.

Сравнение возможностейComparing features

ФункцияFeature WSL 1WSL 1 WSL 2WSL 2
Интеграция Windows и LinuxIntegration between Windows and Linux
Быстрый запускFast boot times
Незначительный расход ресурсовSmall resource foot print
Запуск с использованием текущих версий VMware и VirtualBoxRuns with current versions of VMware and VirtualBox
Управляемая виртуальная машинаManaged VM
Полнофункциональное ядро LinuxFull Linux Kernel
Полная совместимость системных вызововFull system call compatibility
Производительность в файловых системах ОСPerformance across OS file systems

Как видно из приведенной выше таблицы, архитектура WSL 2 во многом превосходит архитектуру WSL 1, за исключением показателей производительности при работе с несколькими файловыми системами ОС.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.

Производительность в файловых системах ОСPerformance across OS file systems

Мы не рекомендуем работать с разными операционными системами, если на это нет особой причины.We recommend against working across operating systems with your files, unless you have a specific reason for doing so. Для ускорения производительности сохраняйте файлы в файловой системе WSL, если используете командную строку Linux (Ubuntu, OpenSUSE и т. д.).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). Если вы работаете в командной строке Windows (PowerShell, командной строке), сохраняйте файлы в файловой системе Windows.If your working in a Windows command line (PowerShell, Command Prompt), store your files in the Windows file system.

Например, при хранении файлов проекта WSL:For example, when storing your WSL project files:

  • Используйте корневой каталог файловой системы Linux: \\wsl$\Ubuntu-18.04\home\<user name>\ProjectUse the Linux file system root directory: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Не является корневым каталогом файловой системы Windows: C:\Users\<user name>\ProjectNot the Windows file system root directory: C:\Users\<user name>\Project

Доступ к корневой файловой системе Linux можно получить с помощью приложений и средств Windows, таких как проводник.You can access your Linux root file system with Windows apps and tools like File Explorer. Попробуйте открыть дистрибутив Linux (например, Ubuntu), убедитесь, что находитесь в домашнем каталоге Linux, введя следующую команду: cd ~.Try opening a Linux distribution (like Ubuntu), be sure that you are in the Linux home directory by entering this command: cd ~. Затем откройте файловую систему Linux в проводнике, введя (не забудьте точку в конце) : 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 доступна только в Windows 10 версии 1903, сборки 18362 или выше.WSL 2 is only available in Windows 10, Version 1903, Build 18362 or higher. Проверьте версию Windows, нажав Windows + R, введите winver, выберите ОК.Check your Windows version by selecting the Windows logo key + R, type winver, select OK. (Или введите команду ver в командной строке Windows).(Or enter the ver command in Windows Command Prompt). Может потребоваться выполнить обновление до последней версии Windows.You may need to update to the latest Windows version. Для сборок ниже 18362 WSL не поддерживается.For builds lower than 18362, WSL is not supported at all.

Примечание

WSL 2 работает с VMware 15.5.5 и более поздней версии и VirtualBox 6 и более поздней версии.WSL 2 will work with VMware 15.5.5+ and VirtualBox 6+. Дополнительные сведения см. в статье Вопросы и ответы по WSL 2.Learn more in our WSL 2 FAQs.

Новые возможности WSL 2Whats new in WSL 2

WSL 2 — это основная модернизированная версия базовой архитектуры, которая использует технологию виртуализации и ядро Linux для реализации новых возможностей.WSL 2 is a major overhaul of the underlying architecture and uses virtualization technology and a Linux kernel to enable new features. Основные приоритеты этого обновления — увеличение производительности файловой системы и добавление полной совместимости системных вызовов.The primary goals of this update are to increase file system performance and add full system call compatibility.

Архитектура WSL 2WSL 2 architecture

Во время обычной работы виртуальная машина может замедляться при загрузке, изолироваться, потреблять много ресурсов и требовать время для управления.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 нет таких проблем.WSL 2 does not have these attributes.

WSL 2 предоставляет преимущества WSL 1, включая простую интеграцию между Windows и Linux, быструю загрузку, незначительное потребление ресурсов и не требует настройки виртуальной машины или управления ею.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. Хотя WSL 2 использует виртуальную машину, она будет управляемой и будет работать в фоновом режиме, предоставляя тот же пользовательский интерфейс, что и 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.

Полнофункциональное ядро LinuxFull Linux kernel

Ядро Linux в WSL 2 собрано собственными силами корпорации Майкрософт на основе последней стабильной ветви исходного кода, доступного по адресу kernel.org. Этот ядро специально настроено для WSL 2 путем оптимизации размера и производительности, чтобы обеспечить невероятное взаимодействие с Linux в 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. Ядро будет обслуживаться обновлениями Windows. Это означает, что вы получите новейшие исправления безопасности и улучшения ядра без необходимости заниматься этим самостоятельно.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.

Ядро Linux WSL 2 — это проект с открытым исходным кодом.The WSL 2 Linux kernel is open source. Если вы хотите узнать больше, ознакомьтесь с записью блога Реализация ядра Linux в Windows, созданной группой, которая занималась сборкой ядра.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.

Повышенная производительность операций ввода-вывода файловIncreased file IO performance

Команды для операций с большими объемами файлов, такие как git clone, npm install, apt update, apt upgrade и другие, с WSL 2 выполняются заметно быстрее.File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all noticeably faster with WSL 2.

Фактическое увеличение скорости будет зависеть от того, какое приложение вы используете и как оно взаимодействует с файловой системой.The actual speed increase will depend on which app you're running and how it is interacting with the file system. Первоначальные версии WSL 2 запускаются в 20 раз быстрее по сравнению с WSL 1 при распаковке сжатого архива tarball и в 2–5 раз быстрее при использовании команд git clone, npm install и cmake в различных проектах.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.

Полная совместимость системных вызововFull system call compatibility

Двоичные файлы Linux используют системные вызовы для выполнения функций, таких как доступ к файлам, запрос памяти, создание процессов и многое другое.Linux binaries use system calls to perform functions such as accessing files, requesting memory, creating processes, and more. В то время как WSL 1 использует уровень перевода, созданный командой WSL, WSL 2 имеет собственное ядро Linux с полной совместимостью системных вызовов.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. Доступные преимущества:Benefits include:

  • целый ряд новых приложений, которые можно запускать внутри WSL, например Docker и другие;A whole new set of apps that you can run inside of WSL, such as Docker and more.

  • все обновления ядра Linux немедленно готовы к использованию.Any updates to the Linux kernel are immediately ready for use. (Вам не нужно ждать, пока специалисты WSL реализуют обновления и добавят изменения).(You don't have to wait for the WSL team to implement updates and add the changes).

WSL 2 использует меньший объем памяти при запускеWSL 2 uses a smaller amount of memory on startup

WSL 2 использует упрощенную служебную виртуальную машину на реальном ядре Linux с небольшим потреблением памяти.WSL 2 uses a lightweight utility VM on a real Linux kernel with a small memory footprint. Эта программа будет выделять память с виртуальным адресом при запуске.The utility will allocate Virtual Address backed memory on startup. Она настроена на запуск с использованием незначительной доли общей памяти, которая требовалось для WSL 1.It is configured to start with a smaller proportion of your total memory that what was required for WSL 1.

Исключения для использования WSL 1 вместо WSL 2Exceptions for using WSL 1 rather than WSL 2

Рекомендуется использовать WSL 2, так как он обеспечивает более высокую производительность и полную совместимость системных вызовов.We recommend that you use WSL 2 as it offers faster performance and 100% system call compatibility. Однако существует несколько отдельных сценариев, в которых использовать WSL 1 может оказаться более предпочтительным.However, there are a few specific scenarios where you might prefer using WSL 1. Рекомендуем использовать WSL 1, если:Consider using WSL 1 if:

  • Файлы проекта должны храниться в файловой системе Windows.Your project files must be stored in the Windows file system. WSL 1 обеспечивает более быстрый доступ к файлам, подключенным из Windows.WSL 1 offers faster access to files mounted from Windows.
    • Если вы будете использовать дистрибутив Linux WSL для доступа к файлам проекта в файловой системе Windows, и эти файлы не могут храниться в файловой системе Linux, вы получите более высокую производительность в файловых системах ОС, используя 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.
  • Проект, для которого требуется перекрестная компиляция с использованием средств Windows и Linux на одних и тех же файлах.A project which requires cross-compilation using both Windows and Linux tools on the same files.
    • Операции с файлами в операционных системах Windows и Linux выполняются быстрее в WSL 1, чем на WSL 2. Поэтому если вы используете приложения Windows для доступа к файлам Linux, в настоящее время вы получите более высокую производительность при использовании 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.

Примечание

Попробуйте использовать удаленное расширение WSL VS Code, чтобы хранить файлы проекта в файловой системе Linux, используя средства командной строки Linux. Также с помощью VS Code в Windows можно создавать, редактировать, отлаживать или запускать проекты в браузере без снижения производительности, связанной с работой в файловых системах Linux и 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. Подробнее.Learn more.

Доступ к сетевым приложениямAccessing network applications

Доступ к сетевым приложениям Linux из Windows (localhost)Accessing Linux networking apps from Windows (localhost)

Если вы создаете сетевое приложение (например, приложение, работающее на NodeJS или SQL Server) в дистрибутиве Linux, вы можете получить к нему доступ из приложения Windows (например, используя Microsoft Edge или Chrome) с помощью localhost (как обычно это и происходит).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).

Тем не менее, если вы используете более раннюю версию Windows (сборка 18945 или меньше), вам потребуется получить IP-адрес виртуальной машины узла Linux (или обновить ее до последней версии 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).

Чтобы найти IP-адрес виртуальной машины, содержащей дистрибутив Linux, выполните следующие действия.To find the IP address of the virtual machine powering your Linux distribution:

  • В дистрибутиве WSL (напр., Ubuntu) выполните команду: ip addrFrom your WSL distribution (ie Ubuntu), run the command: ip addr
  • Найдите и скопируйте адрес в значение inet интерфейса eth0.Find and copy the address under the inet value of the eth0 interface.
  • Если у вас установлено средство grep, найдите его с помощью команды: 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
  • Подключитесь к серверу Linux, используя этот IP-адрес.Connect to your Linux server using this IP address.

На изображении ниже показан пример подключения к серверу Node.js с помощью браузера Edge.The picture below shows an example of this by connecting to a Node.js server using the Edge browser.

Подключение к серверу NodeJS с помощью Edge

Доступ к сетевым приложениям Windows из Linux (IP-адрес основной системы)Accessing Windows networking apps from Linux (host IP)

Если вы хотите получить доступ к сетевому приложению, работающему в Windows (например, к приложению, работающему на NodeJS или SQL Server) из дистрибутива Linux (напр., Ubuntu), необходимо использовать IP-адрес основной системы.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. Хотя это происходит и нечасто, для этого можно выполнить следующие действия.While this is not a common scenario, you can follow these steps to make it work. - Получите IP-адрес основной системы, выполнив следующую команду из дистрибутива Linux: cat /etc/resolv.confObtain the IP address of your host machine by running this command from your Linux distribution: cat /etc/resolv.conf - Скопируйте IP-адрес в строке, начинающейся с nameserver.Copy the IP address following the term: nameserver. - Подключитесь к любому серверу Windows, используя скопированный IP-адрес.Connect to any Windows server using the copied IP address.

На изображении ниже показан пример подключения к серверу Node.js под управлением Windows через cURL.The picture below shows an example of this by connecting to a Node.js server running in Windows via curl.

Подключение к серверу NodeJS в Windows с помощью cURL

Дополнительные рекомендации по работе с сетьюAdditional networking considerations

Подключение через удаленные IP-адресаConnecting via remote IP addresses

При использовании удаленных IP-адресов для подключения к приложениям они будут рассматриваться как подключения из локальной сети (LAN).When using remote IP addresses to connect to your applications, they will be treated as connections from the Local Area Network (LAN). Это означает, что необходимо убедиться, что приложение может принимать подключения по локальной сети.This means that you will need to make sure your application can accept LAN connections.

Например, может потребоваться привязать приложение к 0.0.0.0 вместо 127.0.0.1.For example, you may need to bind your application to 0.0.0.0 instead of 127.0.0.1. В примере приложения Python, использующего Flask, это можно сделать с помощью команды 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'). При внесении этих изменений не забывайте о безопасности, так как это позволит устанавливать подключения из вашей локальной сети.Please keep security in mind when making these changes as this will allow connections from your LAN.

Доступ к дистрибутиву WSL 2 из локальной сети (LAN)Accessing a WSL 2 distribution from your local area network (LAN)

При использовании дистрибутива WSL 1, если к компьютеру можно получить доступ из локальной сети, то приложения, работающие в WSL, могут быть также доступны в локальной сети.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.

Это нетипичная ситуация в WSL 2.This isn't the default case in WSL 2. В WSL 2 имеется виртуализированный адаптер Ethernet с собственным уникальным IP-адресом.WSL 2 has a virtualized ethernet adapter with its own unique IP address. В настоящее время для включения этого рабочего процесса необходимо выполнить те же действия, что и для обычной виртуальной машины.Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (Мы ищем способы улучшить это взаимодействие.)(We are looking into ways to improve this experience.)

Ниже приводится пример команды PowerShell, которая добавляет прокси-сервер портов, ожидающий передачи данных на порту узла 4000 и перенаправляющий все подключения на порт 4000 виртуальной машины WSL 2 с 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

Доступ по протоколу IPv6IPv6 access

В настоящее время дистрибутивы WSL 2 не могут обращаться к IPv6-адресам.WSL 2 distributions currently cannot reach IPv6-only addresses. Мы работаем над добавлением этой возможности.We are working on adding this feature.

Увеличение размера виртуального жесткого диска WSL 2Expanding the size of your WSL 2 Virtual Hardware Disk

WSL 2 использует виртуальный жесткий диск (VHD) для хранения файлов Linux.WSL 2 uses a Virtual Hardware Disk (VHD) to store your Linux files. Если использована вся доступная емкость, возможно, потребуется увеличить его размер.If you reach its max size you may need to expand it.

Виртуальный жесткий диск WSL 2 использует файловую систему ext4.The WSL 2 VHD uses the ext4 file system. Этот виртуальный жесткий диск имеет начальный максимальный размер 256 ГБ, и он автоматически изменяется по мере необходимости.This VHD automatically resizes to meet your storage needs and has an initial maximum size of 256GB. Если размер дистрибутива превысил 256 ГБ, вы увидите сообщение о том, что закончилось место на диске.If your distribution grows in size to be greater than 256GB, you will see errors stating that you've run out of disk space. Эту ошибку можно устранить, увеличив размер виртуального жесткого диска.You can fix this error by expanding the VHD size.

Чтобы увеличить максимальный размер виртуального жесткого диска свыше 256 ГБ:To expand your maximum VHD size beyond 256GB:

  1. Завершите работы всех экземпляров WSL с помощью команды wsl --shutdown.Terminate all WSL instances using the command: wsl --shutdown

  2. Найдите имя пакета установки дистрибутива ("PackageFamilyName").Find your distribution installation package name ('PackageFamilyName')

    • С помощью PowerShell (где "distro" — имя дистрибутива) введите команду:Using PowerShell (where 'distro' is your distribution name) enter the command:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
  3. Выберите VHD-файл fullpath, используемый в WSL 2. Здесь это будет pathToVHD:Locate the VHD file fullpath used by your WSL 2 installation, this will be your pathToVHD:

    • %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
  4. Измените размер VHD WSL 2, выполнив следующие команды.Resize your WSL 2 VHD by completing the following commands:

    • Откройте командную строку Windows с правами администратора и введите:Open Windows Command Prompt with admin privileges and enter:
      • diskpart
      • Select vdisk file="<pathToVHD>"
      • expand vdisk maximum="<sizeInMegaBytes>"
  5. Запустите дистрибутив WSL (например, Ubuntu).Launch your WSL distribution (Ubuntu, for example).

  6. Сделайте, чтобы WSL мог увеличить размер файловой системы, выполнив следующие команды в командной строке дистрибутива Linux:Make WSL aware that it can expand its file system's size by running these commands from your Linux distribution command line:

    • sudo mount -t devtmpfs none /dev
    • mount | grep ext4
    • Скопируйте имя этой записи, которая будет выглядеть следующим образом: /dev/sdXX (вместо X может быть любой другой символ).Copy the name of this entry, which will look like: /dev/sdXX (with the X representing any other character)
    • sudo resize2fs /dev/sdXX
    • Используйте скопированное ранее значение.Use the value you copied earlier. Также может потребоваться установить приложение resize2fs: apt install resize2fsYou may also need to install resize2fs: apt install resize2fs

Примечание

Как правило, не следует изменять, перемещать файлы, связанные с WSL, расположенным внутри папки AppData, или получать к ним доступ с помощью инструментов или редакторов Windows.In general do not modify, move, or access the WSL related files located inside of your AppData folder using Windows tools or editors. Это может привести к повреждению дистрибутива Linux.Doing so could cause your Linux distribution to become corrupted.