Существуют ли какие-либо ограничения при работе в Ubuntu в подсистеме Windows для Linux в Windows 10?

Все ли возможности Ubuntu, включая поддержку приложений с графическим интерфейсом пользователя, доступны в последней версии подсистемы Windows для Linux, при установке Ubuntu, или существуют ли какие-либо ограничения при работе в Ubuntu в подсистеме Windows для Linux в Windows 10?

2 ответа

Ограничения Ubuntu в подсистеме Windows для Linux в Windows 10 со временем становятся все меньше и меньше, и они меняются от ограничений из-за отсутствия функций в WSL до ограничений из-за кривой обучения Ubuntu.


Смонтировать файловые системы ext4

Начиная с предварительной сборки Windows Insiders 20211, WSL 2 будет предлагать новую функцию: wsl --mount. Этот новый параметр позволяет подключать и монтировать физический диск внутри WSL 2, что дает вам доступ к файловым системам, таким как ext4, которые изначально не поддерживаются Windows, из диспетчера файлов Windows и PowerShell.

Вычисления GPU, установка WSL и обновление WSL прибывают в последнюю сборку Insider для WSL 2

Поддержка WSL с помощью графического процессора появилась в предварительной версии Windows 10 build 20150 на Dev Channel в рамках реорганизованной структуры тестирования Microsoft, которая позволяет тестировать сборки Windows 10, не привязанные к конкретному будущему выпуску функций. Несколько недель назад на Build 2020 Microsoft объявила о предстоящей поддержке WSL с помощью графического процессора, а также о поддержке запуска приложений Linux с графическим интерфейсом. Переход на доступ к графическому процессору для WSL призван поднять производительность приложений, работающих в WSL2, до уровня, который работает в Windows. По словам Microsoft, поддержка вычислений на GPU - это функция, наиболее востребованная пользователями WSL. Обновление 20150 включает поддержку платформы параллельных вычислений Nvidia CUDA и графических процессоров, а также графических процессоров AMD и Intel. Он также поддерживает DirectML (Direct Machine Learning), Microsoft Windows 10 API для аппаратного ускорения машинного обучения.Slashdot


Что ждет WSL

Установите WSL с помощью одной команды

Одна из распространенных жалоб на WSL заключается в том, что его нелегко найти и включить. Microsoft работает над улучшением инструмента командной строки wsl.exe, чтобы помочь вам установить WSL. Скоро вы сможете просто установить WSL, введя: wsl.exe --install в вашей командной строке.

Эта команда будет добавлена ​​на каждый компьютер Windows, поэтому все, что вам нужно сделать, это открыть окно терминала с повышенными правами администратора и запустить wsl.exe --install. Оттуда будут включены дополнительные компоненты WSL, а указанный вами дистрибутив будет загружен и установлен автоматически после перезапуска.

Вы можете ожидать появления первых выпусков этой функции в ближайшие несколько месяцев в Windows Insiders Fast Ring.

WSL 2 будет новым значением по умолчанию при первой установке

Мы также вносим изменение, чтобы сделать WSL 2 новым типом распространения по умолчанию при первой установке WSL. WSL 2 приносит значительные улучшения, и мы обнаружили, что большинство наших пользователей в ветках Insider используют дистрибутивы WSL 2. При разработке wsl.exe --installимело смысл использовать по умолчанию то, что люди используют: WSL 2, и мы включили это также для любых новых установок WSL при включении дополнительного компонента "Подсистема Windows для Linux". Вы увидите эти изменения в кольце Insiders Fast в ближайшие несколько месяцев вместе с wsl.exe --install улучшение.

WSL будет поддерживать рабочие процессы вычислений на GPU

Добавление поддержки вычислений CUDA и / или GPU в WSL было нашей самой востребованной функцией №1 с момента нашего первого выпуска! За последние 3+ лет, WSL, виртуализация, DirectX, команды драйвера для Windows, и наши партнеры кремниевых упорно работало на сложном инженерный подвиг, чтобы доставить эту возможность.

Вот почему мы рады объявить, что в ближайшие несколько месяцев мы начнем предварительный просмотр поддержки вычислений GPU для WSL в сборках Windows 10 Insider.

Первоначально вычислительные возможности графического процессора будут поддерживать два сценария:

  • NVIDIA CUDA
    • Поддерживает существующие инструменты и рабочие процессы Linux, используемые профессионалами
  • DirectML
    • Первоначально нацелен на новичков и студентов с использованием графических процессоров с поддержкой DirectX 12 от нескольких поставщиков
    • Команда выпустит предварительный пакет TensorFlow с серверной частью DirectML, позволяющей аппаратно-независимое ускорение рабочих нагрузок AI и ML на всем оборудовании Windows - DirectML также будет поддерживать встроенную Windows, включая TensorFlow для Windows.

Как только эта предварительная версия будет выпущена, вам просто нужно будет убедиться, что у вас установлена ​​последняя версия Windows Insider Fast, WSL 2, установить правильный драйвер для вашего графического процессора от поставщика оборудования, и тогда вы будете готовы начать разработку, обучение. и тестирование ваших моделей машинного обучения и искусственного интеллекта внутри WSL.

Это изменение будет внесено в список участников Windows Insiders Fast в ближайшие несколько месяцев. Для получения всех подробностей о том, что означает это изменение и как оно стало возможным, прочитайте сообщение в блоге разработчиков DirectX.

Добавление поддержки приложений Linux GUI в WSL находится в нашей дорожной карте

Еще один наш наиболее плодотворный запрос - поддержка не только приложений командной строки, но и приложений с графическим интерфейсом пользователя Linux. Например, некоторые пользователи хотят запустить предпочитаемый им текстовый редактор с графическим интерфейсом пользователя Linux или IDE в среде Linux и работать над своим кодом, хранящимся локально в файловой системе своего дистрибутива, или просто разработать приложения с графическим интерфейсом пользователя Linux на своей машине с Windows.

Наша цель - дать вам возможность запускать приложения Linux с графическим интерфейсом на рабочем столе вместе с приложениями Windows. Это позволит вам использовать приложения Linux для редактирования, сборки и запуска кода, визуализации графиков данных в Python или даже использования приложений, оптимизированных для среды Linux.

На BUILD мы продемонстрировали раннюю версию этой работы, запустив несколько примеров приложений с графическим интерфейсом непосредственно из WSL, таких как Eye of Gnome, gedit и mpvпроигрыватель медиа. Эти приложения подключены к промежуточному серверу, работающему внутри WSL, который взаимодействует с клиентом RDP на хосте Windows. Вы можете увидеть снимок экрана в действии ниже, где мы одновременно запускаем файловый менеджер GNOME в WSL и Outlook.

Эти изменения включены в дорожную карту группы WSL, и вы можете рассчитывать услышать больше об этой работе к концу 2020 года, когда этот ответ будет обновлен.

Источник: Подсистема Windows для Linux BUILD 2020 Summary.

Я довольно большой поклонник WSL, но я буду первым, кто признает, что существует довольно много ограничений, когда дело доходит до WSL. К счастью, у большинства из них есть обходные пути, но они застают новых пользователей врасплох.

Для начала позвольте мне указать на некоторые «отличия» между Ubuntu на WSL и традиционной установкой Ubuntu на виртуальной или физической машине. Я упомяну некоторые из них в разделе «Ограничения» ниже:

  1. WSL1 работает как «уровень перевода системных вызовов», который пытается преобразовать API ядра Linux в API ядра Windows.

  2. Ubuntu, работающая в WSL2, больше похожа на контейнер. Он работает под реальным ядром Linux на виртуальной машине (к которой у вас нет доступа). Ubuntu работает внутри пространства имен на этой виртуальной машине. Сам по себе он не работает непосредственно на виртуальной машине.

  3. WSL имеет собственную систему инициализации. Его основная задача (кроме некоторых «обычных» задач инициализации Linux) — настроить взаимодействие между Linux и Windows. Например, это:

    • делает сеть Windows доступной для Ubuntu
    • добавляет путь Windows к среде
    • монтирует диски Windows в Ubuntu
  4. Эта инициализация выполняется как PID1 внутри экземпляра/пространства имен/контейнера UbuntuWSL.

  5. Запуск WSL не похож на загрузку виртуальной или физической машины. Многие из задач, которые Ubuntu обычно (обычно через Systemd) выполняет во время загрузки, либо не нужны для WSL, либо на самом деле вредны для его нормальной работы.

  6. При запуске WSL не существует понятия «логин». WSL определяет пользователя по умолчанию и автоматически запускает оболочку, определенную для этого пользователя в /etc/passwd. Пароль не запрашивается и не требуется.

Ограничения WSL

Имея это в виду, вот некоторые ограничения, о которых я могу думать:

  • init/Systemd: Ubuntu, работающая в WSL, не использует Systemd. Systemd требует, чтобы он работал как PID1, но инициализация WSL выполняется как PID1. Многие документы, сообщения в блогах и т. д., с которыми вы сталкиваетесь для различных задач (например, установка Docker), предполагают, что Systemd доступен. Есть несколько обходных путей, которые я упоминаю в этом ответе .

    Кроме того, программные пакеты, которые глубоко укоренились в Systemd и полагаются на него, просто не будут работать, если вы не прибегнете к взлому пространства имен, упомянутому в этом ответе. Гном — один из наиболее распространенных примеров.

    В качестве еще одного личного примера я пытался запустить cockpit(для веб-интерфейса libvirtd) в дистрибутиве, отличном от Systemd, несколько дней назад, и я просто не мог найти способ обойти его зависимость от Systemd.

    Это, безусловно, одна из основных областей путаницы для новых пользователей, приходящих в Ubuntu на WSL.

  • Запуск Systemd на WSL2: в связи с предыдущими пунктами, если вы пытаетесь использовать Systemd, процесс загрузки Systemd по умолчанию в Ubuntu (и почти в любом дистрибутиве) делает некоторые предположения, которые недействительны в WSL. Например:

    • Systemd удалит файлы в /tmp, но на тот момент при запуске WSL уже создал там симлинк для всем известного сокета X11 под Windows 11.

    • Systemd настроит некоторые binfmt_miscобработчики, перезаписывая обработчик WSL, который позволяет запускать двоичные файлы Windows под WSL.

    • Systemd переопределит пользовательскую среду, перезаписав добавленный к ней путь Windows.

    Если вы планируете запустить Systemd (даже с «вспомогательным» скриптом), я настоятельно рекомендую вам помнить, что он может мешать другим операциям Ubuntu в WSL, и планировать устранение неполадок, если и когда это произойдет.

  • Доступ к физическому оборудованию: В WSL у вас будет ограниченный доступ к оборудованию:

    • Последовательные порты: WSL1 имеет доступ к последовательным портам на некотором уровне, но только в том, что касается реализации системных вызовов. Тем не менее, на WSL1 можно запускать некоторое программное обеспечение, использующее последовательные порты, что невозможно на WSL2.

    • Физические диски: в Windows 10 вы можете монтировать только диски по сетевому протоколу или физические диски, которые подключены к Windows и отформатированы в NTFS. Необработанные диски и те, которые используют другие файловые системы, не могут быть смонтированы.

      WSL2 под Windows 11 имеет возможность монтировать дополнительные типы дисков.

    • Графика: в Windows 10 нет прямого доступа из Ubuntu на WSI к какому-либо графическому приложению или интерфейсу. Если вы хотите запустить графическое приложение Linux в Ubuntu на WSL, вы должны установить сторонний X-сервер в Windows и запустить X-клиент/приложение в WSL с соответствующими правами. DISPLAYнастройки. Смотрите этот ответ и этот ответ для более подробной информации.

      Опять же, в Windows 11 WSL2 теперь имеет возможность запускать графические приложения «из коробки».

    • Графический процессор: Аналогично, в Windows 10 нет доступа к физическому графическому процессору, поэтому задачи вычислений на графическом процессоре невозможны.

      Windows 11 также улучшает это, предоставляя ряд вычислительных задач на графическом процессоре, которые могут передаваться на физический графический процессор с помощью драйвера Windows.

    • USB: USB-устройства недоступны напрямую. Однако в WSL2 (как в Windows 10, так и в 11) ими можно поделиться из Windows с помощью USB/IP , а затем подключить в Ubuntu.

      Обратите внимание, что стандартное ядро ​​WSL2 не включает в себя большинство драйверов для USB-устройств. Например, даже базовые драйверы захвата мультимедиа (например, камеры) не включены. Однако вы можете собрать собственное ядро ​​для WSL2 и включить в него необходимые драйверы. Однако обратите внимание, что в настоящее время мне (и другим) не удалось захватить видео с USB-камеры в WSL. См. этот вопрос в Stack Overflow, чтобы узнать о прогрессе на сегодняшний день.

  • Загрузочное устройство Ubuntu: основной загрузочный виртуальный диск/раздел для Ubuntu в WSL должен иметь формат ext4. Хотя ядро ​​WSL2 поддерживает дополнительные файловые системы, такие как btrfs, их можно использовать только для дополнительных разделов.

  • Задачи, основанные на проверке подлинности/входе в систему: из-за (6) выше некоторые задачи, основанные на проверке подлинности, будут вести себя по-разному в WSL. Например, обычно вы редактируете /etc/security/limits.confповысить ограничения (например, количество открытых файлов, приоритет/удобство и т. д.) для пользователя. Однако этот файл обрабатывается PAM («подключаемым модулем аутентификации») во время входа пользователя в систему. Без аутентифицированного входа этот файл никогда не обрабатывается. См. Обходной путь в этом ответе , если вы столкнетесь с этим.

  • Услуги запуска:

    • Windows 10: без Systemd (или другого init), на который можно положиться, нет простого способа определить, какие службы должны запускаться по умолчанию в экземпляре WSL. Например, cronдемон не будет работать (источник этого вопроса). Обходной путь состоит в том, чтобы проверить и посмотреть, запущена ли служба при запуске вашей оболочки (например, ~/.bashrc) и запустите его, если нет. Смотрите для более подробной информации.

    • Windows 11: теперь по крайней мере включает возможность запуска задач при запуске. Также см. тот этот ответже ответ для деталей. Тем не менее, я могу порекомендовать вам запустить диспетчер процессов в качестве основных задач, используя этот метод, а затем использовать диспетчер процессов для запуска и управления другими необходимыми задачами. Я упоминаю, как это сделать в этом ответе на переполнение стека , используя supervisord, но подойдет любой супервизор процесса (конечно, не обязательно, чтобы он был PID1).

  • Сеть: хотя это может относиться к разделу «аппаратное обеспечение», здесь оно, вероятно, заслуживает отдельного упоминания. Сеть WSL2 в настоящее время работает под управлением виртуального коммутатора внутри Hyper-V, и этот коммутатор защищен NAT от остальной сети. Это означает, что вы не можете легко получить доступ к сетевым службам в WSL2 с других устройств (компьютеров, телефонов и т. д.) в локальной сети без дополнительных усилий.

    Самый простой обходной путь — использовать для этого WSL1, когда это возможно. Есть также несколько других обходных путей .

  • VPN: Аналогичным образом, при подключении к определенным VPN, которые отключают локальный трафик, WSL2 потеряет сеть, поскольку это «локальный» (но не локальный) сетевой трафик.

  • Производительность: В целом производительность под WSL2 довольно хорошая. Однако есть несколько предостережений:

    • WSL1: WSL1 немного снизил производительность своей файловой системы «псевдо-ext4/overlay». Тем не менее, WSL2 обеспечивает почти нативную производительность на файловых системах ext4.

    • WSL2: WSL2 сильно снижает производительность при доступе к файлам на дисках Windows, особенно к нескольким небольшим файлам. Проверка ядра WSL2 на диске NTFS занимает более 10 минут (в противном случае ~30 секунд). Настоятельно рекомендуется хранить файлы проекта в файловой системе ext4 или использовать WSL1 при доступе к дискам Windows.

    Я держу экземпляр WSL1 в первую очередь для работы с дисками Windows, когда это необходимо.

Я уверен, что вспомню еще несколько (или, возможно, кто-то укажет на них в комментариях), и я добавлю их, если это необходимо.

Опять же, с упомянутыми обходными путями, большинство из них не являются серьезными блокировщиками для большинства пользователей WSL. Однако они являются источником многих вопросов, на которые я ответил на сайтах Stack Exchange.

Другие вопросы по тегам