Не работает команда wsl

Содержание
  1. Настройка WSL2 для разработки
  2. Table of contents
  3. Introduction
  4. Автоматическое изменение IP в hosts
  5. Проблема с возвратом оперативной памяти
  6. Проблема с возвратом дискового пространства
  7. Опыт настройки и использования WSL (подсистемы Linux в Windows 10)
  8. Установка WSL и дистрибутива
  9. Установка X-сервера, Xfce и прочих GUI’шных приложений
  10. Взаимодействие окружения Windows и окружения подсистемы Linux
  11. Особенности, ограничения и подводные камни
  12. Итоги
  13. Устранение неполадок подсистемы Windows для Linux
  14. Регистрация сведений о проблеме, отчета об ошибке, запроса на функцию
  15. Проблемы с установкой
  16. Распространенные проблемы
  17. Я использую Windows 10 версии 1903, но не вижу параметры для WSL 2.
  18. Ошибка. 0x1bc, когда wsl —set-default-version 2
  19. Не удается получить доступ к файлам WSL из Windows
  20. Не удается запустить дистрибутив WSL 2, а в выходных данных отображается только WSL 2.
  21. Ошибка command not found при выполнении исполняемых файлов Windows в Linux
  22. «Ошибка: 0x80370102 The virtual machine could not be started because a required feature is not installed (Не удалось запустить виртуальную машину, так как не установлена необходимая функция).
  23. Bash утрачивает подключение к сети после подключения к сети VPN
  24. При запуске WSL или установке дистрибутива возвращается код ошибки
  25. Обновление WSL
  26. Ошибки apt-get upgrade
  27. «Ошибка: 0x80040306» при установке
  28. «Ошибка: 0x80040154» после обновления Windows
  29. Изменение отображаемого языка
  30. Проблемы установки после восстановления системы Windows
  31. Нет доступа к Интернету в WSL
  32. Ошибка «Отказ в разрешении» при проверке связи
  33. Bash перестал отвечать на запросы
  34. Проверка номера сборки
  35. Подтверждение включения WSL
  36. Проблемы с подключением к серверу OpenSSH
  37. «Указанная сборка не найдена». Это сообщение может появиться при включении дополнительного компонента WSL.
  38. Правильные (связанные с SSH) ошибки разрешений
  39. Выполнение команд Windows завершается сбоем в дистрибутиве
  40. Не удается выполнить загрузку после установки WSL 2
  41. Ошибки WSL 2, возникающие при отключении ICS
  42. Использование более старых версий Windows и WSL
  43. Удаление устаревшей версии WSL

Настройка WSL2 для разработки

Table of contents

Introduction

С выходом Windows 10 2004 (20H1) и обновления KB4556803 , после которого сборка ОС становится 19041.264 , появилась возможность использования WSL2 .

WSL2 — одно из долгожданных изменений в Windows 10 2004 (20H1) для разработчиков, т.к. теперь используется реальное ядро Linux , которое предоставляет полноценное окружение Linux на Windows .

WSL2 значительно производительнее WSL1 и поддерживает полную совместимость системных вызовов, т.е. теперь Docker на WSL2 работает без проблем.

Но после перехода на WSL2 появляются свои сложности и неудобства, такие как:

Изменение IP при перезагрузке WSL2 , т.е. для проброса домена в WSL2 необходимо после перезагрузки править файл hosts .

При использовании оперативной памяти WSL2 не отдает ее обратно в Windows . Т.е., когда WSL2 нужна оперативная память, то растет и потребление памяти виртуальной машиной, следовательно, память хоста будет уменьшаться. Но после завершения процесса, потребляющего память в WSL2 , она не будет возвращена на хост.

При использовании дискового пространства происходит такая же проблема, как и с оперативной памятью. При загрузке файла большого объема в WSL2 размер образа vhdx будет расти пропорционально, но при его удалении из WSL2 пространство, занимаемое образом, не уменьшится.

Рассмотрим каким образом можно бороться с данными проблемами.

Автоматическое изменение IP в hosts

При перезапуске WSL2 IP постоянно меняется и его приходится актуализировать в файле hosts . Посмотреть текущий IP можно командой:

Чтобы избежать ручной актуализации, напишем скрипт prepare-hosts , который будет производить обновление IP в файле hosts :

Для работы скрипта первоначально добавим хосты wsl2 и winhost , а также отметим комментарием #wsl2 те хосты, IP которых мы хотим подменять:

Запустим скрипт и получим обновленный результат:

IP прописались только к wsl2 , winhost и отмеченным комментарием #wsl2 хостам.

Для работы данного скрипта необходимо открыть в Windows права на редактирование файла %SystemRoot%\system32\drivers\etc\hosts для пользователя, который будет запускать данный скрипт в WSL2 .

Также можно прописать автоматический запуск данного скрипта при старте сессии пользователя в WSL2 .

Проблема с возвратом оперативной памяти

Решение данной проблемы состоит из двух шагов. Вначале зададим ограничение использования оперативной памяти в конфиге WSL2 . Создадим или откроем файл %UserProfile%\.wslconfig и добавим в него следующие опции:

Таким образом мы ограничили передачу памяти от хоста в параметре memory, но это решило только часть проблемы. Т.е. теперь WSL2 будет потреблять указанное в параметре memory количество памяти, но при ее использовании не будет спешить ее освобождать. Связано это с механизмом кэширования для ускорения работы при выполнении повторных действий. Для того, чтобы принудительно вернуть занятую память, используем простой скрипт memory-reclaim :

Запустив данный скрипт с root -правами, WSL2 начнет процесс освобождения памяти. Можно запускать данный скрипт по требованию или же настроить cron , по которому скрипт будет периодически запускаться и производить возврат памяти.

Проблема с возвратом дискового пространства

Предупреждение: выполнение следующих команд может привести к потере данных, поэтому выполняйте их при крайней необходимости, сделав предварительный бэкап!

Для решения проблемы с возвратом дискового пространства можно воспользоваться следующими вариантами:

Для не Home версии Windows выполняем следующие команды в консоли Windows :

Для любой версии Windows подойдет также следующая последовательность команд:

Предупреждение: выполнение перечисленных команд может привести к потере данных, поэтому выполняйте их при крайней необходимости, сделав предварительный бэкап!

Мы рассмотрели варианты решения проблем, которые возникают при работе с WSL2 . Возможно в будущих релизах они будут устранены на системном уровне, а пока можно воспользоваться приведенными выше решениями.

Источник

Опыт настройки и использования WSL (подсистемы Linux в Windows 10)

К написанию данной статьи меня побудил вопрос на Тостере, связанный с WSL. Я, после нескольких лет использования систем на ядре Linux, около полугода назад перешел к использованию Windows 10 на домашнем ПК. Зависимость от терминала и Linux окружения в моей работе практически сразу привели меня к вопросу: или ставить виртуалку или попробовать WSL. Я выбрал второе, и остался вполне доволен.

Под катом я расскажу как установить и настроить WSL, на какие я наткнулся проблемы и ограничения, как запускать Linux приложения из Windows и наоборот, а так же как интегрировать элементы окружения Xfce в окружение рабочего стола Windows.

Никогда не думал, что однажды вернусь на Windows, но повод попробовать мне дали стечения обстоятельств: жена, далекая от IT, дергала почти каждый раз, когда у нее возникала необходимость воспользоваться компом; проснулась ностальгия по одной игре, но она никак не хотела адекватно работать под wine; а тут еще мне подарили коробочную Windows 10 Pro. WSL я поставил чуть ли не сразу после установки системы, поигрался несколько вечеров, понял, что продукт для моих задач годный, но хочется более привычный терминал и вообще некоторых удобств.

Установка WSL и дистрибутива

Сразу оговорюсь, в интернете можно найти описание установки с помощью выполнения команды lxrun /install в командной строке или консоли PowerShell. Данный способ больше не работает (после выхода WSL в стабильный релиз). Насколько мне известно, сейчас WSL можно установить только из Microsoft Store вместе с предпочитаемым дистрибутивом.

Так же отмечу, что когда установку производил я, на выбор были доступны дистрибутивы OpenSUSE, SUSE Linux Enterprise и Ubuntu 16.04 — последний я и установил. Сейчас также доступны Ubuntu 18.04, Debian 9 и Kali Linux, возможно появятся и другие дистрибутивы. Действия по установке могут отличаться. Так же, часть проблем описанных в статье может быть уже исправлена.

Находим в магазине желаемый дистрибутив и устанавливаем. Установка пройдет быстро, так как скачает только эмулятор ядра Linux и утилиту для запуска подсистемы, которая окажется в системной папке в трех экземплярах: wsl.exe, bash.exe и ubuntu.exe (вместо ubuntu будет имя Вашего дистрибутива). Все они равнозначны и делают одно и то же — запускают собственный эмулятор терминала, в нем linux’овый bash работающий под эмулятором ядра. При первом же запуске нас попросят придумать логин и пароль для пользователя по умолчанию, а после произойдет непосредственно установка дистрибутива. В качестве пользователя по умолчанию указываем root без пароля — это потребуется для дальнейших шагов. Безопасность не пострадает, кроме того при подготовке материалов к статье, в англоязычном туториале, я наткнулся на информацию, что новые версии WSL теперь делают пользователем по умолчанию root без пароля без лишних вопросов.

Дожидаемся установки. Далее первым делом стоит обновить зеркала apt на ближайшие. Для этого понадобится CLI текстовый редактор. В комплекте только vi, я же больше предпочитаю nano, поэтому ставлю его:

sudo вводить не требуется, так как мы уже под root’ом. Отредактируем файл /etc/apt/sources.list:

У меня лучше всего работают зеркала Яндекса, поэтому мой файл выглядит так:

Нажимаем Ctrl+O для сохранения и Ctrl+X для выхода. Теперь можно обновить систему до актуального состояния:

После обновления можно создать нашего основного пользователя. В данной статье я назову его user1, Вы же можете задать привычное имя:

Далее переходим в папку юзера, зайдем под ним, установим пароль и отредактируем файл

Все, подсистема готова к использованию… почти.

Установка X-сервера, Xfce и прочих GUI’шных приложений

Первая же проблема, на которую я натолкнулся — bash-completion в предлагаемом эмуляторе терминала работал, мягко говоря, некорректно. Кроме того, данный эмулятор не умеет вкладки, а каждый его экземпляр запускает все в новом пространстве процессов, с отдельным init’ом (который кстати не заменить). Мне захотелось нормальный эмулятор терминала, некоторых других GUI приложений, а так же панельку, чтоб это все быстро запускать.

Читайте также:  Не работает сотовая сеть мегафон

Когда я гуглил этот вопрос, я наткнулся на множество проблем, вроде необходимости перевода dbus на tcp протокол. На данный момент всех этих проблем нет. В подсистеме нормально работают unix-domain-socket’ы и все спокойно общается через них.

Первым делом нам понадобится X-сервер, притом установленный в основную систему (в Windows). Лично я использую для этих целей VcXsrv — порт X11 на Windows. Официальный сайт указанный в about самой утилиты его сейчас не предоставляет, поэтому гуглим установщик и устанавливаем все по умолчанию.

Пока идет установка возвращаемся в терминал WSL, командой exit выходим обратно в root’а. Первым делом настроим русские локали:

Далее установим некоторые компоненты Xfce. Можно конечно установить его целиком из мета-пакета, но большинство компонентов нам не понадобится, а модульная архитектура Xfce позволяет нам поставить только необходимое:

Запускать каждый раз окружение руками не очень удобно, поэтому я автоматизировал данный процесс. Для этого в основной системе создадим в удобном для нас месте папку, а в ней 3 файла для запуска:

    config.xlaunch — файл настроек для VcXsrv

x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:

Поясню, что здесь происходит. Мы говорим VBscript выполнить приложение wsl с параметром cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session , папка запуска нам не важна, поэтому пустая строка, действие open — запуск, 0 — скрытый режим. Самому wsl мы отдаем команду на выполнение: переход в папку пользователя, затем с установкой переменных окружения DISPLAY (дисплей X-сервера) и LANG (используемая локаль) мы запускаем xfce4-session от имени нашего пользователя user1 (благодаря команде su)

  • start.bat — batch файл для запуска, по желанию его можно засунуть в автозагрузку
  • Далее можем запустить наш start.bat и настроить панель Xfce под себя. Замечу, что здесь я наткнулся на еще одну проблему — панель прекрасно отображается поверх всех окон, но вот выделить себе место, как панель на рабочем столе Windows она не может. Если кто знает решение данной проблемы, поделитесь в комментариях.

    Ну и под конец данной части, скриншот моего рабочего стола:

    Взаимодействие окружения Windows и окружения подсистемы Linux

    Запускать Linux приложения напрямую из Windows можно через те же 3 команды — bash, wsl или ubuntu. Не забываем, что по умолчанию запуск идет от root, поэтому стоит понижать привилегии через su , так же нужно не забывать передавать переменную окружения DISPLAY=:0 если приложению требуется X-сервер. Так же нужно менять папку, из которой должно работать приложение, через cd внутри WSL. Пример, посчитаем md5 для file.txt на диске D средствами Linux’овой md5sum:

    Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs . Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что Windows не умеет работать с правами и владельцами файловой системы Linux.

    Из Linux так же можно запускать Windows приложения. Просто запускаем exe-шник и он выполнится в основной системе.

    Диски Windows монтируются в /mnt в соответствии со своими буквами в нижнем регистре. Например диск D будет смонтирован в /mnt/d . Из Linux можно свободно читать и писать файлы Windows. Можно делать на них симлинки. Права у таких файлов всегда будут 0777, а владельцем будет root.

    Сетевой стек у подсистемы общий с Windows. Сервер поднятый в Linux будет доступен на localhost в Windows и наоборот. Однако unix-domain-socket для Windows будет просто пустым файлом, работать с этим можно только внутри Linux. Выход во внешнюю сеть у Linux так же есть, в том числе можно слушать порты, если этого не запрещает фаервол.
    ifconfig в Linux и ipconfig в Windows выдают одинаковую информацию о сетевых интерфейсах.

    Из диспетчера задач Windows можно спокойно прибить процесс внутри подсистемы Linux. Однако Linux увидит только свои процессы.

    Особенности, ограничения и подводные камни

    Ядро Linux в WSL не настоящее. Это всего лишь прослойка-эмулятор, которая часть Linux-специфичных задач выполняет сама, а часть проксирует напрямую в ядро winNT. Большая часть api в нем реализована, но не все. Свое ядро собрать не получится, как и не получится подключить модули ядра (.ko, Kernel Object).

    Init процесс у WSL тоже свой и заменить его, например, на system.d не выйдет. У меня давно есть желание написать менеджер демонов на go, который бы работал с файлами юнитов system.d и предоставлял бы схожий интерфейс, да все руки не доходят.

    Нет поддержки openFUSE, соответственно примонтировать виртуальную или удаленную файловую систему не получится. Так же нельзя сделать mount из файла, mount вообще ничего кроме bind здесь, похоже, не умеет.

    Так же нет никакой возможности разбить файловую систему Linux на несколько разделов/дисков.

    Прямой доступ к железу практически отсутствует. Все таки мы находимся в песочнице Windows, а не в полноценном Linux. /dev и /sys заметно пустуют, в них лишь проц да виртуальные устройства. Доступ к GPU — только через X-сервер, напрямую — никак, так что нейросети обучать придется в Windows.

    В JS разработке столкнулся с тем, что electron.js отказался запускаться в WSL, пришлось дублировать окружение node.js в Windows.

    Итоги

    Статья получилась довольно длинной, надеюсь, что она окажется еще и полезной.
    WSL для меня лично оказался инструментом вполне юзабельным, решающим мои задачи fullstack backend разработчика. Виртуалка с Linux за полгода так и не понадобилась. По общим ощущениям Windows+WSL намного функциональнее, чем Linux+Wine.

    Пока писал статью, обнаружил, что в Microsoft Store появилась сборка WSL с Debian 9.3, данный дистрибутив мне более симпатичен, чем Ubuntu, поэтому буду пробовать ставить.

    Источник

    Устранение неполадок подсистемы Windows для Linux

    Мы рассмотрели некоторые распространенные сценарии устранения неполадок с WSL, но также вы можете просмотреть сведения о проблемах, опубликованные в репозитории продуктов WSL в GitHub.

    Регистрация сведений о проблеме, отчета об ошибке, запроса на функцию

    • Выполнять поиск сведений о существующих проблемах, чтобы найти информацию, связанную с возникшей проблемой. Обратите внимание, что в строке поиска можно удалить is:open, чтобы включить в результаты поиска проблемы, которые уже были решены. Рассмотрите возможность комментирования или одобрения любых открытых проблем, чтобы выразить свою заинтересованность в их продвижении в качестве приоритетных.
    • Регистрировать сведения о новых проблемах. Если вы обнаружили проблему с WSL, о которой нет упоминаний, вы можете нажать зеленую кнопку New issue (Новая проблема), а затем выбрать элемент WSL — Bug Report (WSL — отчет об ошибках). Вам нужно будет включить название проблемы, номер сборки Windows (выполните cmd.exe /c ver , чтобы узнать номер текущей сборки), независимо от того, используете ли вы WSL 1 или WSL 2, текущую версию ядра Linux (выполните wsl.exe —status или cat /proc/version ), номер версии дистрибутива (выполните lsb_release -r ), а также любые другие версии используемого программного обеспечения, сведения о действиях для воспроизведения, ожидаемом поведении, фактическом поведении, а также журналы диагностики, если они доступны и применимы. Дополнительные сведения см. в разделе, посвященном вкладу в WSL.
    • Отправить запрос на функцию, нажав зеленую кнопку New issue (Новая проблема) и выбрав Feature request (Запрос на функцию). Вам нужно будет ответить на несколько вопросов, описывающих ваш запрос.

    Кроме того, вы можете сделать следующее:

    • Зарегистрировать сведения о проблеме с документацией, используя репозиторий документов WSL. Чтобы внести изменения в документацию по WSL, ознакомьтесь с руководством для участников разработки портала «Документация» Майкрософт.
    • Зарегистрировать сведения о проблеме с Терминалом Windows, используя репозиторий продуктов Терминала Windows, если проблема связана с Терминалом Windows, консолью Windows или пользовательским интерфейсом командной строки.

    Проблемы с установкой

    Сбой установки с ошибкой 0x80070003

    • Подсистема Windows для Linux работает только на системном диске (обычно это диск C: ). Убедитесь, что дистрибутивы хранятся на системном диске.
    • Выберите элементы Параметры ->Система —>Хранилище->Другие параметры хранилища: Изменить место сохранения нового содержимого.

    Сбой WslRegisterDistribution с ошибкой 0x8007019e

    • Дополнительный компонент «Подсистема Windows для Linux» не включен.
    • Выберите Панель управления ->Программы и компоненты ->Включение или отключение компонентов Windows и установите флажок Подсистема Windows для Linux или используйте командлет PowerShell, упомянутый в начале этой статьи.

    Сбой установки с ошибкой 0x80070003 или ошибкой 0x80370102.

    • Убедитесь, что в BIOS вашего компьютера включена виртуализация. Расположение этого параметра зависит от компьютера, но обычно он находится в разделе настроек ЦП в BIOS.
    • Для WSL2 требуется, чтобы ЦП поддерживал функцию преобразования адресов второго уровня (SLAT), которая появилась в процессорах Intel Nehalem (Intel Core 1-го поколения) и AMD Opteron. Более старые ЦП (например, Intel Core 2 Duo) не смогут запускать WSL2, даже если платформа виртуальной машины успешно установлена.

    При попытке обновления возникает ошибка Invalid command line option: wsl —set-version Ubuntu 2 .

    • Убедитесь, что у вас включена подсистема Windows для Linux и используется сборка Windows 18362 или выше. Чтобы включить WSL, выполните эту команду в командной строке PowerShell с правами администратора: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux .

    Запрошенную операцию не удалось выполнить из-за ограничения системы виртуального диска. Файлы виртуального жесткого диска должны быть распакованными, незашифрованными и не разреженными.

    • Снимите флажок Compress contents (Сжимать содержимое) (а также флажок Encrypt contents (Шифровать содержимое), если он установлен), открыв папку профиля для дистрибутива Linux. Он должен находиться в подпапке файловой системы Windows, для примера: USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited. .
    • В этом профиле дистрибутива Linux должна находиться папка LocalState. Щелкните эту папку правой кнопкой мыши, чтобы отобразить меню параметров. Выберите Properties (Свойства) > Advanced (Дополнительно) и убедитесь, что флажки Compress contents to save disk space (Сжимать содержимое для экономии места на диске) и Encrypt contents to secure data (Шифровать содержимое для защиты данных) не установлены. Если вы увидите запрос на применение параметров к текущей папке или ко всем вложенным папкам и файлам, выберите вариант только для текущей папки, так как вы очищаете только флаг сжатия. После этого команда wsl —set-version будет работать правильно.
    Читайте также:  Как правильно настроить зеркало бокового вида

    В этом примере папка LocalState для дистрибутива Ubuntu 18.04 расположена по адресу C:\Users \AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc

    Чтобы получать обновленные сведения, проверьте ветку № 4103 в документации GitHub WSL, где отслеживается эта проблема.

    Термин WSL не распознан как имя командлета, функции, файла скрипта или действующей программы.

    • Убедитесь, что установлен дополнительный компонент Подсистема Windows для Linux. Кроме того, эта ошибка возникнет, если вы используете устройство ARM64 и выполняете эту команду в PowerShell. Вместо этого запустите wsl.exe из PowerShell Core или командной строки.

    Error: Windows Subsystem for Linux has no installed distributions (Ошибка. Для подсистемы Windows для Linux не установлены дистрибутивы).

    • Если эта ошибка возникает после установки дистрибутивов WSL, выполните следующие действия:
    1. Запустите дистрибутив минимум один раз, прежде чем вызывать его из командной строки.
    2. Проверьте, не выполняются ли две отдельные учетные записи пользователей. Выполнение основной учетной записи пользователя с повышенными разрешениями (в режиме администратора) не должно приводить к этой ошибке. Но следует убедиться, что вы случайно не запустили встроенную учетную запись администратора, поставляемую в Windows. Это отдельная учетная запись пользователя, для которой установленные дистрибутивы WSL не будут отображаться по умолчанию. Дополнительные сведения см. в статье Включение и отключение встроенной учетной записи администратора.
    3. Исполняемый файл WSL устанавливается только в собственный системный каталог. При выполнении 32-разрядного процесса в 64-разрядной системе Windows (в ARM64 в любом несобственном сочетании) для размещенного несобственного процесса доступна другая папка System32. (Этот 32-разрядный процесс в 64-разрядной системе Windows хранится на диске в папке \Windows\SysWOW64.) Чтобы получить доступ к собственной папке System32 из размещенного процесса, найдите виртуальную папку \Windows\sysnative . Хотя фактически эта папка не будет присутствовать на диске, сопоставитель путей в файловой системе найдет ее.

    Error: This update only applies to machines with the Windows Subsystem for Linux (Ошибка. Это обновление применяется только к компьютерам с подсистемой Windows для Linux).

    • Чтобы установить пакет обновления MSI для ядра Linux, нужно сначала включить WSL. В случае сбоя отображается следующее сообщение: This update only applies to machines with the Windows Subsystem for Linux .
    • Есть три возможные причины, по которым вы видите это сообщение:

      Вы используете старую версию Windows, которая не поддерживает WSL 2. Требования к версиям и ссылки пакеты обновления см. на шаге 2.

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

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

      Error: WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel . (Ошибка. Для WSL 2 требуется обновление компонента ядра. Дополнительные сведения см. здесь: https://aka.ms/wsl2kernel ).

      • Эта ошибка возникает, если пакет ядра Linux отсутствует в папке %SystemRoot%\system32\lxss\tools. Чтобы устранить ошибку, установите пакет обновления MSI для ядра Linux, как описано на шаге 4 в этих инструкциях по установке. Возможно, вам потребуется удалить пакет MSI в разделе Установка и удаление программ, а затем снова установить его.

      Распространенные проблемы

      Я использую Windows 10 версии 1903, но не вижу параметры для WSL 2.

      Скорее всего, это связано с тем, что на компьютере еще не установлены исправления для WSL 2. Чтобы решить эту проблему самым простым способом, перейдите в параметры Windows, нажмите кнопку «Проверить наличие обновлений» и установите последние обновления в системе. Изучите полные инструкции по получению исправления для старой версии.

      Если после нажатия кнопки «Проверить наличие обновлений» вы не получили обновление, можно установить исправления KB4566116 вручную.

      Ошибка. 0x1bc, когда wsl —set-default-version 2

      Это может произойти, если язык интерфейса или язык системы не является английским.

      Фактическая ошибка для 0x1bc :

      См. сведения о проблеме 5749.

      Не удается получить доступ к файлам WSL из Windows

      Файловый сервер протокола 9p предоставляет службу на стороне Linux, которая позволяет Windows получить доступ к файловой системе Linux. Если вы не можете получить доступ к WSL с помощью \\wsl$ в Windows, возможно, это вызвано неправильным запуском 9P.

      Чтобы убедиться в этом, можно проверить журналы запуска с помощью команды dmesg |grep 9p . Если ошибки есть, отобразятся сведения о них. Выходные данные выглядят следующим образом:

      Дополнительные сведения об этой ошибке см. в этом потоке GitHub.

      Не удается запустить дистрибутив WSL 2, а в выходных данных отображается только WSL 2.

      Если язык интерфейса не английский, возможно, отображается усеченная версия текста ошибки.

      Чтобы устранить эту проблему, перейдите по адресу https://aka.ms/wsl2kernel и установите ядро вручную, следуя инструкциям на этой странице документации.

      Ошибка command not found при выполнении исполняемых файлов Windows в Linux

      Пользователи могут запускать исполняемые файлы Windows, например notepad.exe, прямо в среде Linux. Но иногда это действие приводит к ошибке «Команда не найдена», как показано ниже:

      Если в переменной $PATH нет обязательных путей Win32, подсистема взаимодействие не сможет найти EXE-файл. Чтобы проверить это, выполните echo $PATH в среде Linux. В выходных данных вы должны увидеть путь к win32 (например, /mnt/c/Windows). Если вы не видите эти пути Windows, скорее всего переменная PATH перезаписана оболочкой Linux.

      Ниже приведен пример файла /etc/profile на ОС Debian, который вызывал такую проблему:

      Чтобы решить эту проблему в среде Debian, нужно удалить приведенные выше строки. Вы также можете добавить значения в переменную $PATH во время назначения, как показано ниже, но это может вызвать другие проблемы с WSL и VSCode.

      Дополнительные сведения см. в описании проблем 5296 и 5779.

      «Ошибка: 0x80370102 The virtual machine could not be started because a required feature is not installed (Не удалось запустить виртуальную машину, так как не установлена необходимая функция).

      Включите компонент платформы виртуальных машин Windows и убедитесь, что в BIOS включена виртуализация.

      Если компьютер является виртуальной машиной, включите вложенную виртуализацию вручную. Запустите PowerShell с правами администратора и выполните следующую команду:

      Следуйте рекомендациям производителя компьютера, чтобы включить виртуализацию. Как правило, для проверки того, что эти функции включены в ЦП, может использоваться BIOS системы. Инструкции для этого процесса могут быть разными для разных компьютеров, один из примеров вы можете изучить в этой статье от Bleeping Computer.

      Перезагрузите компьютер после включения дополнительного компонента Virtual Machine Platform .

      Кроме того, если у вас установлены сторонние гипервизоры, (например, VMware или VirtualBox), убедитесь, что это последние версии, поддерживающие HyperV (VMware 15.5.5+ и VirtualBox 6+), или что они выключены.

      Узнайте больше о том, как настроить вложенную виртуализацию при запуске Hyper-V на виртуальной машине.

      Bash утрачивает подключение к сети после подключения к сети VPN

      Если после подключения к VPN в Windows оболочка Bash утрачивает подключение к сети, попробуйте воспользоваться этим обходным решением в Bash. Это решение позволит вручную переопределить разрешение DNS с помощью /etc/resolv.conf .

      1. Запишите DNS-сервер виртуальной частной сети. Для этого выполните ipconfig.exe /all
      2. Создайте копию существующего resolv.conf, выполнив sudo cp /etc/resolv.conf /etc/resolv.conf.new
      3. Разорвите связь с текущим файлом resolv.conf, выполнив команду sudo unlink /etc/resolv.conf .
      4. sudo mv /etc/resolv.conf.new /etc/resolv.conf
      5. Откройте /etc/resolv.conf и сделайте следующее.
        a. Удалите из файла первую строку с текстом «# This file was automatically generated by WSL. To stop automatic generation of this file, remove this line.» (Этот файл был автоматически создан WSL. Чтобы остановить автоматическое создание этого файла, удалите данную строку).
        b. Добавьте запись DNS из пункта 1 выше в качестве первой записи в списке DNS-серверов.
        c. Закройте файл.

      После отключения VPN необходимо будет отменить изменения в /etc/resolv.conf . Для этого сделайте следующее.

      1. cd /etc
      2. sudo mv resolv.conf resolv.conf.new
      3. sudo ln -s ../run/resolvconf/resolv.conf resolv.conf

      При запуске WSL или установке дистрибутива возвращается код ошибки

      Выполните эти инструкции, чтобы получить подробные журналы и сообщить о возникшей проблеме на портале GitHub.

      Обновление WSL

      Есть два компонента подсистемы Windows для Linux, которые могут требовать обновления.

      Чтобы обновить саму подсистему Windows для Linux, используйте команду wsl —update в PowerShell или CMD.

      Чтобы обновить определенные двоичные файлы пользователя дистрибутива Linux, используйте команду apt-get update | apt-get upgrade в дистрибутиве Linux, который требуется обновить.

      Ошибки apt-get upgrade

      Некоторые пакеты используют функции, которые еще не реализованы. Например, udev пока не поддерживается и вызывает несколько ошибок apt-get upgrade .

      Чтобы устранить проблемы, связанные с udev , выполните следующие действия.

      Введите приведенный ниже код в /usr/sbin/policy-rc.d и сохраните изменения.

      Добавьте разрешения на выполнение в /usr/sbin/policy-rc.d :

      Выполните следующие команды:

      «Ошибка: 0x80040306» при установке

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

      1. Выполните файл cmd.exe.
      2. Щелкните правой кнопкой мыши строку заголовка и выберите «Свойства», затем снимите флажок «Использовать прежнюю версию консоли».
      3. Нажмите кнопку «ОК».

      «Ошибка: 0x80040154» после обновления Windows

      Компонент «Подсистема Windows для Linux» может быть отключен во время обновления Windows. В этом случае данную функцию Windows необходимо включить заново. Инструкции по включению подсистемы Windows для Linux см. в статье Руководство по установке.

      Изменение отображаемого языка

      Установщик WSL попытается автоматически изменить языковой стандарт Ubuntu в соответствии с языковым стандартом установки Windows. Если это нежелательно, можно выполнить приведенную ниже команду, чтобы изменить языковой стандарт Ubuntu после завершения установки. Чтобы это изменение вступило в силу, потребуется повторно запустить bash.exe.

      В приведенном ниже примере языковой стандарт изменяется на EN-US.

      Проблемы установки после восстановления системы Windows

      1. Удалите папку %windir%\System32\Tasks\Microsoft\Windows\Windows Subsystem for Linux .
        Примечание. Не делайте этого, если дополнительный компонент полностью установлен и работает.
      2. Включите дополнительный компонент WSL (если он еще не включен).
      3. Выполните перезагрузку.
      4. Выполните команду lxrun /uninstall /full
      5. Установите Bash.

      Нет доступа к Интернету в WSL

      Некоторые пользователи сообщили о проблемах с определенными приложениями брандмауэра, блокирующими доступ к Интернету в WSL. Сообщили о следующих брандмауэрах:

      1. Kaspersky;
      2. AVG;
      3. Avast.
      4. Symantec Endpoint Protection

      В некоторых случаях отключение брандмауэра обеспечивает доступ. В некоторых случаях доступ блокируется просто при наличии установленного брандмауэра.

      Если вы используете брандмауэр в Microsoft Defender, снимите флажок Blocks all incoming connections, including those in the list of allowed apps (Блокировать все входящие подключения, включая те, которые внесены в список разрешенных приложений), чтобы разрешить доступ.

      Ошибка «Отказ в разрешении» при проверке связи

      В выпуске Windows Anniversary Update, версия 1607 для проверки связи в WSL требуются права администратора. Чтобы выполнить проверку связи, запустите Bash для Ubuntu в Windows от имени администратора или запустите bash.exe из командной строки или сеанса PowerShell с привилегиями администратора.

      В более поздних версиях Windows (сборка 14926+) права администратора не требуются.

      Bash перестал отвечать на запросы

      Если при работе с Bash вы обнаружите, что Bash перестал отвечать на запросы (или взаимозаблокирован), помогите нам диагностировать проблему путем сбора и передачи дампа памяти. Обратите внимание на то, что выполнение этих действий приведет к сбою системы. Не делайте этого, если вас это не устраивает, либо предварительно сохраните результаты своей работы.

      Сбор дампа памяти

      Измените тип дампа памяти на «Полный дамп памяти». При изменении типа дампа запишите текущий тип.

      Выполните эти действия, чтобы настроить аварийное завершение с помощью клавиатуры.

      Воспроизведите взаимоблокировку или прекращение ответа на запросы.

      Выполните аварийное завершение системы с помощью последовательности клавиш из пункта 2.

      Произойдет аварийное завершение системы и будет собран дамп памяти.

      После перезагрузки системы отправьте memory.dmp на адрес электронной почты secure@microsoft.com. По умолчанию файл дампа находится в папке %SystemRoot%\memory.dmp или C:\Windows\memory.dmp, если C: является системным диском. В письме укажите, что дамп предназначен для команды разработчиков WSL или Bash в Windows.

      Восстановите исходное значение типа дампа памяти.

      Проверка номера сборки

      Чтобы узнать архитектуру компьютера и номер сборки Windows, выберите
      Параметры > Система > О программе

      Найдите поля Сборка ОС и Тип системы.

      Чтобы найти номер сборки Windows Server, выполните в PowerShell следующую команду.

      Подтверждение включения WSL

      Вы можете убедиться, что подсистема Windows для Linux включена, выполнив в PowerShell следующую команду.

      Проблемы с подключением к серверу OpenSSH

      Попытка подключения к серверу SSH завершается следующей ошибкой: «Connection closed by 127.0.0.1 port 22» (Подключение закрыто узлом 127.0.0.1 через порт 22).

      Убедитесь, что сервер OpenSSH работает

      Завершите работу службы sshd и запустите sshd в режиме отладки.

      Проверьте журналы запуска и убедитесь, что ключи сервера доступны и в журнале нет сообщений, как показано ниже.

      Если вы видите такие сообщения и в разделе /etc/ssh/ отсутствуют ключи, потребуется повторно создать ключи или просто очистить и установить сервер OpenSSH.

      «Указанная сборка не найдена». Это сообщение может появиться при включении дополнительного компонента WSL.

      Данная ошибка связана с неправильным состоянием установки. Чтобы устранить эту проблему, выполните следующие действия.

      Если вы используете команду включения компонента WSL в PowerShell, попробуйте использовать графический пользовательский интерфейс. Для этого откройте меню «Пуск», выполните поиск фразы «Включение или отключение компонентов Windows», а затем из списка выберите «Подсистема Windows для Linux». Этот дополнительный компонент будет установлен.

      Обновите версию Windows, выбрав «Параметры» > «Обновления» и щелкнув «Проверить наличие обновлений».

      Если оба способа не помогли и вам нужно использовать WSL, рассмотрите возможность обновления на месте, переустановив Windows 10 с установочного носителя и выбрав параметр «Сохранить все», чтобы сохранить свои приложения и файлы. Инструкции по такой установке можно найти на странице Переустановка Windows 10.

      Правильные (связанные с SSH) ошибки разрешений

      Если вы видите эту ошибку:

      Чтобы устранить эту проблему, добавьте следующий текст в файл /etc/wsl.conf :

      Обратите внимание, что добавление этой команды будет включать метаданные и изменять разрешения для файлов Windows, показанных в WSL. См. сведения о разрешениях файловой системы.

      Выполнение команд Windows завершается сбоем в дистрибутиве

      Некоторые дистрибутивы, доступные в Microsoft Store, еще не полностью поддерживают выполнение команд Windows. Если при выполнении powershell.exe /c start . или любой другой команды Windows возникает ошибка -bash: powershell.exe: command not found , ее можно устранить, выполнив следующие действия:

      1. В дистрибутиве WSL выполните echo $PATH .
        Если /mnt/c/Windows/system32 отсутствует, что-то переопределяет стандартную переменную PATH.
      2. Проверьте параметры профиля с помощью cat /etc/profile .
        Если присутствует назначение переменной PATH, измените файл, чтобы закомментировать блок назначения PATH, используя символ # .
      3. Проверьте, существует ли файл wsl.conf ( cat /etc/wsl.conf ), и убедитесь, что он не содержит appendWindowsPath=false . В противном случае закомментируйте эту строку.
      4. Перезапустите дистрибутив, введя wsl -t , после чего следует имя дистрибутива, либо выполните wsl —shutdown в cmd или PowerShell.

      Не удается выполнить загрузку после установки WSL 2

      Мы осведомлены о проблемах, из-за которых пользователям не удается выполнить загрузку после установки WSL 2. Пока мы полностью диагностировали эту проблему, от пользователей поступали сообщения о том, что помочь в ее устранении может изменение размера буфера или установка правильных драйверов. Просматривайте новейшие сведения об этой проблеме на сайте GitHub.

      Ошибки WSL 2, возникающие при отключении ICS

      Совместное использование подключения к Интернету (ICS) — обязательный компонент WSL 2. Служба ICS используется сетевой службой узлов (HNS) для создания базовой виртуальной сети. На ее основе в WSL 2 реализуется работа с NAT, DNS и DHCP, а также совместное использование подключения к узлу.

      Если отключить службу ICS (SharedAccess) или ICS через групповую политику, нельзя будет создать сеть WSL службы HNS. Это приведет к сбоям при создании нового образа WSL версии 2 и возникновению указанной ниже ошибки при попытке преобразовать образ версии 1 в образ версии 2.

      Для систем, требующих использования WSL 2, нужно оставить службу ICS (SharedAccess) в состоянии запуска по умолчанию «Вручную (активировать запуск)», а любую политику, запрещающую ICS следует перезаписать или удалить. Отключение службы ICS приведет к нарушению работы WSL 2. Мы не рекомендуем отключать ICS, но некоторые части ICS можно отключить с помощью этих инструкций.

      Использование более старых версий Windows и WSL

      Есть несколько отличий, которые следует учитывать, если вы используете более раннюю версию Windows и WSL, например Windows 10 Creators Update (октябрь 2017 г., сборка 16299) или Anniversary Update (август 2016 г., сборка 14393). Рекомендуется выполнить обновление до последней версии Windows, но если это невозможно, ознакомьтесь с некоторыми из описанных ниже различий.

      Особенности взаимодействия команд:

      • bash.exe заменен на wsl.exe ; Команды Linux можно запускать из командной строки Windows или из PowerShell, но для ранних версий Windows необходимо использовать команду bash . Например: C:\temp> bash -c «ls -la» . Команды WSL, передаваемые в bash -c , перенаправляются в процесс WSL без изменения. Пути к файлам должны быть указаны в формате WSL, кроме того, необходимо внимательно экранировать соответствующие знаки. Пример: C:\temp> bash -c «ls -la /proc/cpuinfo» или C:\temp> bash -c «ls -la \»/mnt/c/Program Files\»» .
      • Чтобы узнать, какие команды доступны для определенного дистрибутива, выполните команду [distro.exe] /? . Например, с Ubuntu: C:\> ubuntu.exe /? .
      • путь Windows включен в переменную $PATH WSL.
      • При вызове средства Windows из дистрибутива WSL в ранних версиях Windows 10 необходимо указать путь к каталогу. Например, чтобы вызвать приложение Windows «Блокнот» из командной строки WSL, введите /mnt/c/Windows/System32/notepad.exe .
      • Чтобы изменить пользователя по умолчанию для использования root этой команды в PowerShell, введите C:\> lxrun /setdefaultuser root и выполните Bash.exe, чтобы выполнить вход: C:\> bash.exe . Сбросьте пароль с помощью команды $ passwd username для паролей для дистрибутивов и закройте командную строку Linux: $ exit . В командной строке Windows или PowerShell сбросьте настройки пользователя по умолчанию до стандартной учетной записи пользователя Linux: C:\> lxrun.exe /setdefaultuser username .

      Удаление устаревшей версии WSL

      Если первоначально вы установили WSL в Windows 10 Creators Update (октябрь 2017 г., сборка 16299), рекомендуется перенести все необходимые файлы, данные и пр. из старого дистрибутива Linux в более новый дистрибутив, установленный с помощью Microsoft Store. Чтобы удалить устаревший дистрибутив с компьютера, выполните следующую команду в командной строке или экземпляре PowerShell: wsl —unregister Legacy . Кроме того, вы можете вручную удалить устаревший дистрибутив, удалив папку %localappdata%\lxss\ (и все ее содержимое) с помощью проводника Windows или PowerShell: rm -Recurse $env:localappdata/lxss/ .

      Источник

    Оцените статью