Глава 9. Максимизируем возможность взаимодействия Windows

При работе с WSL вы можете обнаружить потребность применения утилит или файлов из Windows в в своём рабочем потоке и наоборот. К счастью, имеется несколько способов, которыми вы можете размыть имеющийся между вашим дистро WSL и Windows барьер, делая возможной более производительную среду нежели Windows или дистро Linux, которую предоставляют они сами по себе.

wslpath

wslpath это встроенный в WSL инструмент, который позволяет простое преобразование путей между эквивалентами WSL и Windows и наоборот (Рисунок 9-1):


> wslpath C:\\Users\\Hayden 
/mnt/c/Users/Hayden

> wslpath -w /mnt/c/Users/Hayden 
C:\Users\Hayden
		

wslpath полезен для задач сценариев в Windows из WSL, причём без необходимости синтаксического разбора и повторного выравнивания символов, в особенности всех таких как \ и /s, которые надлежит экранировать в sed и grep. wslpath в особенности мощен при работе на пару с wslenv, подробности по которой приводятся ниже.

 

Рисунок 9-1


Применение wslpath для преобразования путей между эквивалентами WSL и Windows

wslutilities

wslutilities это набор инструментария Патрика Ву, который был адаптирован некоторыми дистро, публикуемыми в Microsoft Store. По умолчанию Ubuntu и Pengwin содержат wslutilities. wslutilities доступны и для ряда прочих дистро, таких как SUSE, Alpine, Debian, CentOS и openSUSE. wslutilities содержат такие инструменты:

wslusc позволяет вам создавать некий ярлык для приложений Linux на рабочем столе Windows. Например, установим текстовый редактор GNOME gedit (Рисунок 9-2):


> sudo apt -y install gedit
		
 

Рисунок 9-2


Установка gedit

Затем подберём подходящую иконку для gedit выполнив поиск в /usr/share/icons иконки, содержащей название gedit (Рисунок 9-3):


> find /usr/share/icons/ -name "*gedit*.svg"
		
 

Рисунок 9-3


Поиск в /usr/share/icons иконок для gedit

После этого выполним wslusc, определяя что gedit это приложение с графическим интерфейсом при помощи флага -g; название закладки gedit через -n 'gedit'; описание иконки мы находим в -i вслед за своей командой gedit (Рисунок 9-4):


> wslusc -g -n 'gedit' -i /usr/share/icons/Humanity/apps/48/gedit-icon.svg gedit
		
 

Рисунок 9-4


Создание для gedit ярлыка в Windows при помощи wslusc

И теперь у вас имеется на вашем рабочем столе ярлык для gedit (Рисунок 9-4). Обратите внимание на то, что приложения с графическим интерфейсом всё ещё требуют запущенного в Windows X сервера пока в WSL не будет запущена официальная поддержка прикладных приложений с графическим интерфейсом.

wslsys предоставляет некоторые базовые системные сведения, полезные при заполнении отчётов об ошибках, связанных с WSL (Рисунок 9-5).

 

Рисунок 9-5


Предоставляемая wslsys системная информация

Для применения в сценариях вывод wslsys можно обрабатывать grep. Например


> wslsys | grep 'Theme' | sed 's/^.*: //'
		

возвратит просто “light” или “dark” для Темы Windows.

wslfetch это подобный neofetch инструмент, также предоставляющий сведения и о системе хоста Windows, например номер сборки Windows (Рисунок 9-6).

 

Рисунок 9-6


Заставка wslfetch

wslvar позволяет вам выполнять выборку переменных окружения Windows, таких как %APPDATA% и %USERPROFILE%. Например, если вы желаете совместно использовать некий сценарий, который выполняет запись в домашнюю папку пользователя Windows, вы не захотите твёрдо кодировать /mnt/c/Users/Hayden, ибо имена пользователей и путей прочих пользователей будут иными.

Вы можете применять сочетание wslpath и $(wslvar USERPROFILE) вместо выборки такого местоположения и последующего преобразования его в путь Linux, который бы понимал WSL, например (Рисунок 9-7):


> touch hello
> cp hello $(wslpath $(wslvar USERPROFILE))
		
 

Рисунок 9-7


Создание пустого файла с названием hello и его копирование в домашнюю папку вашего текущего пользователя Windows

wslview регистрирует себя в качестве браузера по умолчанию в WSL, который при запуске откроет соответствующий URL в установленном по умолчанию браузере Windows. Например, приводимое ниже откроет указанный URL в Microsoft Edge, установленном по умолчанию браузере, который настроен в моём Windows 10 (Рисунок 9-8):


> wslview http://boxofcables.dev
		
 

Рисунок 9-8


Применение wslview для открытия URL интернета в установленном по умолчанию браузере Windows

Тем не менее, wslview не останавливается только на URL. Вы можете применять wslview для открытия любого файла из WSL при помощи установленного по умолчанию для такого типа файлов приложения в Windows. Например, приводимое далее откроет файл в Notepad, установленном по умолчанию в Windows 10 редакторе для файлов .txt (Рисунок 9-9):


> echo 'hello Patrick' > textfile.txt
> wslview textfile.txt
		
 

Рисунок 9-9


Открытие файла a.txt при помощи Notepad в Windows при помощи wslview

Перенаправление между приложениями Windows и Linux

Перенаправление это механизм, в котором вы можете получать вывод из исполняемой команды и запитывать его как входные данные для другой команды. Зачастую это носит название “конвейера” (“piping”) и он обычен для применения в командной строке. В оболочке Linux он обычно помечается символом |, который в большинстве раскладок клавиатур доступен через shift+\.

Другой распространённый шаблон состоит в применении содержимого некого файла в качестве входных данных для команды или для записи выходных данных из команды в файл. Это, как правило, обозначается символами << и >>. (Это два символа < и два символа >, а не единственные символы кавычек « и ».)

Конвейер

при использовании механизма конвейера могут создаваться цепочки выполняющие сложные действия команд без требования от вас написания некой программы для выполнения всего процесса. Например, вы можете применять gzip для сжатия файла, преобразовать его в кодировку base64 с тем, чтобы он подходил для отображения или отправки в текстовом формате и направить этот текст base64 в gnupg для его подписи с помощью ключа “PGP” и печати полученного результата в вашем терминале.

Соответствующая команда, описывающая цепочку событий такова (Рисунок 9-10)


> gzip --stdout /etc/hosts | base64 | gpg --clear-sign
		
 

Рисунок 9-10


Конвейер для сжатия файла, преобразовывающий его в текст и затем подписывающий при помощи PGP

Если у вас нет ключа GPG, вы можете создать его при помощи


> gpg --full-gen-key
		

Если вы получите сообщение об ошибке “gpg: signing failed: Inappropriate ioctl for device”, тогда установите


> export GPG_TTY=$(tty)
		

Этот пример показывает как мы получаем вывод от стоящей слева от символа | команды и “отправляем конвейером” этот вывод в команду справа. В данном случае мы пользуемся механизмом конвейера дважды, когда в первый раз мы получаем вывод от gzip и передаём его в base64, а второй раз получаем вывод из команды base64 и передаём его в gpg. Мы можем делать это с отдельной программой, которая сохраняет вывод и запитать им входные данные своей следующей команды. Мы могли бы написать такую программу, однако, наш механизм конвейера намного проще для немедленного восприятия и может быть записан быстро и просто.

Конвейер между Windows и WSL

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

 

Конвейер от WSL к Windows

В качестве простого примера мы можем воспользоваться clip.exe из Windows в сочетании с конвейером из WSL для быстрого помещения текста в буфер обмена Windows для его использования при помощи функциональной возможности вставки в предпочитаемые вами программы.


> cowsay "Hi readers!" | clip.exe
		

Это снабдит нас следующим в нашем буфере обмена для вставки при помощи Ctrl+V (Рисунок 9-11):


 -------------
> Hi readers! <
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
		
 

Рисунок 9-11


Копирование вывода конвейера к clip.exe в Notepad

По умолчанию, значение переменной PATH из Windows передаётся в WSL с тем, чтобы вы могли выполнять программы применяя те же самые ожидания, как если бы вы исполняли их непосредственно из командной строки Windows. Для тех исполняемых файлов, которые не находятся во вложении в PATH вы также можете применять их полное местоположение.

Эквивалентом предыдущего с применением полного местоположения clip.exe было бы


> cowsay "Hi readers!" | /mnt/c/Windows/System32/clip.exe
		

Расширяя это, мы могли бы заменить clip.exe неким коротким сценарием PowerShell, который пользуется API “Component Object Model” (COM) Windows для составления некого нового электронного сообщения в Microsoft Outlook с необходимым текстом из своего конвейера, вставляемым в его тело.

Здесь для создания отличий исходного кода мы воспользуемся git format-patch, подпишем его своим собственным ключом PGPи поместим подписанный результат в тело электронного сообщения в Microsoft Outlook:


> git format-patch --stdout HEAD~1 | \
GPG_TTY=$(tty) gpg --clear-sign | \
powershell.exe '
  $M=(New-Object -ComObject Outlook.Application).CreateItem(0);
  $M.Body=$input | %{$r=""}{$r+="$_`n"}{$r}; $M.BodyFormat=1;
  $M.Display()'
		

Мы можем сохранить этот код PowerShell в некий файл для повторного применения; давайте назовём его sendmail.ps1 и передадим значение пути вместо того чтобы переписывать его дословно всякий раз когда он нам понадобится (Рисунок 9-12).

 

Рисунок 9-12


Сохранение кода PowerShell в повторно применяемой файле, который может вызываться из WSL

[Замечание]Замечание

Слеши / применяются для разделения файлового пути потому как Bash из WSL будет воспринимать обратный слеш \ как некий специальный символ, требующий двойного обратного слеша \\ вместо него - PwerShell подходит для этого, но прочие программы могут оказаться менее снисходительными.

Для создания нового сообщения Outlook из вывода своей команды мы можем затем выполнить такое (Рисунок 9-13):


> git format-patch --stdout HEAD~1 | GPG_TTY=$(tty) gpg --clear-sign | powershell.exe -File C:/Users/Hayden/sendmail.ps1
		
 

Рисунок 9-13


Новое окно компоновки электронного письма Outlook с выводом “git format-patch”, вставленном в тело этого электронного письма

 

Конвейер от Windows к WSL

Во многом схожим образом с конвейером из WSL в Windows мы можем осуществлять и обратную операцию. Мы можем выполнить команду в Windows и отправить конвейером её вывод в другую команду в WSL. Давайте рассмотрим ситуацию, при которой мы бы желали найти все службы Windows, которые относятся к Xbox. Для достижения этого мы воспользуемся “cmdlet” Get-Service PowerShell и отправим конвейером его вывод в grep из WSL для фильтрации этого вывода только для строк, содержащих слово Xbox (Рисунок 9-14):


PS C:> Get-Service | wsl.exe -d Ubuntu-20.04 grep Xbox
		
 

Рисунок 9-14


Применение PowerShell для перечисления служб Windows и фильтрации полученного результата при помощи “grep” в WSL

Мы также можем получить вывод от своей команды WSL и передать его обратно в другой cmdlet PowerShell. Заменяя grep на аналогичную команду awk, которую мы также можем применять для выделения только второго столбца, мы можем запускать и останавливать все эти службы совместно. Ниже я показываю это для запуска и останова службы ssh-agent с применением фильтрации своего текста на ssh от имени Администратора.

 

Рисунок 9-15


Применение PowerShell для запуска службы ssh-agent в Windows посредством фильтрации списка служб через “AWK” в WSL

Если вы получите сообщение "Start-Service: Service 'OpenSSH Authentication Agent (ssh-agent)' cannot be started due to the following error: Cannot start service 'ssh-agent' on computer '.'.", тогда вам придётся разрешить запуск вручную ssh-agent (Рисунок 9-15):


PS C:> Set-Service ssh-agent -StartupType Manual
		

Перенаправление файла

Перенаправление файлов позволяет вам сохранять вывод некой команды в файл или применять файл в качестве входных данных для команды. Некий файл для входных данных обозначается в Bash символом <, за которым следует название файла, содержимое которого вы бы хотели применить как ввод для команды, в то время как файл для вывода, наоборот, указывается при помощи символа > с идущим за ним названием файла для того файла, в котором надлежит сохранять вывод этой команды.

В качестве простого примера перенаправления файла мы воспользуемся содержимым /etc/hosts в качестве входных сведений для команды base64; мы записываем это как


> base64 < /etc/hosts
		

При помощи base64 было бы проще записать base64 /etc/hosts без перенаправления соответствующего файла, однако это помогает только командам, которые допускают применение названия файла в качестве параметра. Это к тому же не проиллюстрировало бы перенаправления файла.

Подобным образом, для сохранения вывода команды tar, которая создаёт архивы любого числа файлов, мы записываем это как


> tar c /etc/hosts > hosts.tar
		

И снова, tar обладает встроенным параметром, с которым проще выполнять это действие так:


> tar cf hosts.tar /etc/hosts
		

И командная строка Windows, и PowerShell, оба, также поддерживают понятие перенаправлений файлов, что означает, что мы можем применять его для перенаправления файла в командной строке или окне PowerShell в команду WSL. Ниже мы получаем содержимое файла Windows hosts и копируем его дословно в файл hosts в нашем дистро WSL по умолчанию:


> wsl.exe -u root tee /etc/hosts < C:\Windows\System32\drivers\etc\hosts
		

Heredoc

Помимо перенаправления файлов Bash предоставляет функциональную возможность с названием “heredoc”. Это позволяет вам записывать входные данные из множества строк в команду без необходимости вначале записывать текст в файл. “heredoc” определяется при помощи << с идущим следом любым уникальным словом, которое будет применяться для указания положения конца такого входного текста. heredoc требует своего нахождения в самом конце соответствующей команды или конвейера, для которого он применяется в качестве входных данных. Чтобы указать конец входных данных требуется поместить само такое слово, причём без идущих перед ним пробелов или табуляций и оно может быть любым словом, которое вы пожелаете, только если оно не встречается естественным образом в самом тексте. Распространённым индикатором конца входных данных является EOF.

Например, вот образец простой команды для вывода на печать введённого текста обратно в консоль чтобы показать как это работает:


> cat <<ENDOFINPUTINDICATOR
Hi readers!
The next line indicates the end of this input text
ENDOFINPUTINDICATOR
		

Мы можем воспользоваться этой функциональной возможностью для отправки любого произвольного текста в свои команды, включая команды Windows. Ниже приводится некий пример (Рисунок 9-16), применяющий sendmail.ps1 , которым мы пользовались ранее в разделе Конвейер между Windows и WSL для написания нового электронного сообщения в своём терминале (Рисунок 9-17):


PS C:> powershell.exe -File C:/Users/Hayden/sendmail.ps1 <<EOF
Hi, Readers
This text will be used as the body or a new email message in Microsoft Outlook. Congratulations on learning about Heredocs.
Best regards,
Hayden
EOF
		
 

Рисунок 9-16


Написание и отправка электронного письма из WSL с применением PowerShell

 

Рисунок 9-17


Написание и отправка электронного письма из WSL с применением PowerShell

Переменные среды

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

Например, вы можете определить подобную переменную JAVA_HOME, указывает на местоположение установленной среды времени исполнения Java, при пересечении границы между Windows и WSL производится переход установкой переменной WSLENV в значение JAVA_HOME/p.

ы можете добавить любое число названий переменных среды в своей конфигурации WSLENV, разделяя записи двоеточием. В данном случае у нс имеются описанными JAVA_HOME и OneDrive (Рисунок 9-18).

 

Рисунок 9-18


Установка диалога настройки переменной среды Windows при помощи “WSLENV”

Значение /p каждой предыдущей настроенной переменной сообщает WSL о трансляции между путями Windows и WSL в значениях каждой из таких переменных. Например, для предыдущей установке WSLENV в Windows, значения переменных в Windows выглядят как:


C:\Program Files\AdoptOpenJDK\jdk-14.0.2.12-hotspot\
C:\Users\Hayden\OneDrive
 	   

В то время как в WSL они выглядят следующим образом по причине трансляции путей, на которую указывает /p:


/mnt/c/Program Files/AdoptOpenJDK/jdk-14.0.2.12-hotspot/
/mnt/c/Users/Hayden/OneDrive
 	   

Дополнительно к /p имеются и прочие суффиксы. Вот все применяемые суффиксы:

  • /p - Указывает, что значение переменной должен обладать значением, трактуемым как путь и транслироваться между эквивалентными представлениями Windows и WSL.

  • /l - Указывает что эта переменная должна трактоваться в качестве разделяемой двоеточием списком путей в WSL или разделяемым точкой с запятой списками путей в Windows. Как и /p, каждый индивидуальный путь в этом списке между представлениями Windows и WSL.

  • /u - Указывает что данная переменная должна передаваться из Windows в WSL, но не из WSL в Windows.

  • /w - Указывает обратное /u. Это переменная должна передаваться из WSL в Windows, но не из Windows в WSL.

Вы также можете комбинировать /u и /w, либо /p или /l. Например, ниже приводятся некоторые варианты, которые вы можете применять, но это не исчерпывающий перечень:

  • /pu - Эта переменная содержит некий путь, подлежащий трансляции и такая переменная должна распространяться только из Windows в WSL.

  • /lw - Эта переменная содержит список путей для трансляции и такая переменная должна распространяться только из WSL в Windows.

Монтирование файловой системы в WSL2

Файловые системы поступают во множестве форм, причём Windows не поддерживает специфичные для Linux. Мы можем применять WSL2 для доступа к таким ранее не доступным местам и выставлять их в приложения Windows через особенный путь \\wsl$ WSL в Windows и узел Linux в Проводнике Windows (Рисунок 9-19).

 

Рисунок 9-19


Проводник Windows, отображающий узел Linux с установленными дистро WSL

Совместные файлы Windows

Совместные файлы Windows поддерживаются через drvfs, которая передаёт известные местоположения Windows в среду WSL. Прежде всего, позвольте нам посмотреть как это делается при помощи соответствия Windows Share для Буквенных устройств в Windows:

  1. В Windows перейдите в элемент Сеть (Network) в проводнике Windows.

  2. Перейдите к тому объекту сервера, который удерживает ваш совместный ресурс.

  3. Кликните правой кнопкой по своему совместному ресурсу и выберите “Подключить сетевой диск” (“Map network drive”).

  4. В своём новом окне выберите Z: и затем закройте этот диалог.

    1. Введите имя своего пользователя и его пароль для этого совместного ресурса, если они будут запрошены или вам приходится применять альтернативные полномочия.

  5. В WSL выполните sudo mkdir /mnt/z; sudo mount -t drvfs Z: /mnt/z.

  6. Вы можете теперь найти файлы своих сетевых совместных ресурсов по пути /mnt/z.

  7. Для обеспечения того, чтобы это устройство могло бы повторно монтироваться при повторных запусках WSL, добавьте в /etc/fstab следующую строку: Z: /mnt/z drvfs defaults 0 0

В качестве альтернативы установки соответствия Совместного ресурса (Share) Буквенному устройству, мы можем воспользоваться значением пути “UNC” при вызове mount. Основное предостережение состоит в том, что Windows будет применять установленный по умолчанию набор полномочий и они не могут перекрываться при данном методе. Если вам требуется применять другие полномочия, вам следует воспользоваться предыдущим методом соответствия Буквенным устройствам.

  1. В WSL выполните приводимое ниже, обеспечив замену вашими данными \\server\share-name на значение UNC пути вашего совместного ресурса:

    
    > sudo mkdir /mnt/file-share; sudo mount -t drvfs '\\server\share-name' /mnt/file-share
    		
  2. Чтобы гарантировать что ваше устройство повторно монтируется при перезапусках WSL в /etc/fstab добавьте следующее:

    
    > \\server\share-name /mnt/file-share drvfs defaults 0 0
    		

SSHFS и прочие файловые системы на основе FUSE

Одной из замечательных функциональных возможностей Linux является то, что вы можете применять WSL2 с поддержкой для файловых систем на основе “FUSE”. FUSE это сокращение для “Filesystem in User space”, когда реальный драйвер файловой системы запускается как программа вместо того чтобы выступать частью своего ядра. Это означает, что вы можете применять всякую файловую систему, которая обладает драйвером FUSE не изучая как это сделать и не применяя предварительно собранное индивидуальное ядро. Отличной допускающей FUSE файловой системой выступает “SSHFS”, которая пользуется подключениями Безопасной оболочки (Secure Shell) к удалённому ПК и выставляет такую удалённую файловую систему локально.

Для монтирования некой файловой системы SSHFS мы должны прежде всего изменить файл /etc/fuse.conf чтобы добавить строку, содержащую user_allow_other. Это сделает для нас возможным применять параметр allow_root при монтировании такой файловой системы. Обратите внимание, что это требует установки sshfs и выработки ключей ssh.

Теперь мы можем вызывать sshfs, а потом создание папки, которой владеет той пользователь, который исполняет sshfs:


> sshfs -o idmap=user,uid=1000,gid=1000,allow_root server:/root/test /mnt/test
		

Применяя в WSL файловые системы на основе FUSE с предписанным параметром allow_root в момент монтирования, мы делаем возможным для Проводника Windows видеть файлы с помощью узла Linux в боковой панели. Такая файловая система выставляется через значение \\wsl$\distro\path\to\mountpoint пути UNC (Рисунок 9-20).

 

Рисунок 9-20


Доступ к смонтированной файловой системе SSHFS через Проводник Windows

Основная магия этого допустима любую файловую систему FUSE, которая изначально не поддерживается естественным путём в Windows, например, SSHFS, можно применять из любого приложения Windows, которое поддерживает открытие пути UNC. Например, мы можем открыть в notepad.exe некий файл в удалённом сервере через WSL2 (Рисунок 9-21).

 

Рисунок 9-21


Окно notepad.exe, отображающее возможность открытия файла из смонтированной файловой системы “sshfs” внутри WSL2

Естественные файловые системы Linux в образе диска или &qout;Разделе&qout;

Это мощная функциональная возможность, поэтому не пользуйтесь ею, если она вам некомфортна.

С учётом сказанного, Linux поддерживает огромный массив файловых систем, причём некоторые из них более узнаваемы чем иные. Обычно предполагаются ext2/3/4, XFS и и btrfs. При наличии WSL2 мы способны смонтировать эти файловые системы в своём дистро и затем выполнять доступ к ним из Windows. Это означает, что через WSL2 Windows теперь поддерживает все натуральные файловые системы Linux.

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


> cat /proc/filesystems
		
 

В разделе

Если у вас имеется жёсткий диск с естественным разделом Linux н нём, тогда вы имеете возможность выставить его в своём дистро WSL2 воспользовавшись параметром --mount из wsl.exe. Это имеет единственное предостережение, что здесь требуется чтобы такой раздел пребывал бы на диске, который в настоящий момент не используется Windows, например, когда этот раздел является вторым разделом в вашем загрузочном диске Windows.

Вам следует знать, значение пути к внутреннему диску Windows при использовании wsl.exe –mount, который вы можете обнаружить выполнив в своём окне PowerShell такую команду:


PS C:> wmic diskdrive list brief
		

Это отобразит вывод подобный такому (Рисунок 9-22).

 

Рисунок 9-22


Вывод команды “wmic”, отображающей доступные физические диски

После того как вы обнаружили свой DeviceID, который выглядит как \\.\PHYSICALDRIVEn, где n это начинающийся с 0 номер, вы можете построить необходимую команду wsl.exe следующим образом:


> wsl.exe --mount \\.\PHYSICALDRIVE1 --partition 2
		
 

В образе диска (файл VHDX)

Вместо применения физического диска или раздела вы можете воспользоваться образом виртуального жёсткого диска, хранимого в виде файла .vhdx. Обычно они создаются системой виртуализации Hyper-V Windows, для которой WSL2 представляет собой очень особый вариант.

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

Для монтирования в Windows файла .vhdx выполните приводимое ниже в окне PowerShell после того как вы обеспечили замену <pathToVHDX> на свой файл .vhdx:


PS C:> > Write-Output \\.\PhysicalDrive$((Mount-VHD -Path <pathToVHDX> -PassThru | Get-Disk).Number)
		

Это смонтирует соответствующий файл виртуального диска и затем выведет на печать его название \\.\PhysicalDrive, которое вы можете применять в командах wsl.exe --mount.

 

Параметры монтирования

В качестве необязательных вы также можете добавлять любые из приводимых ниже параметров, которые отражают их двойников из Linux:

  1. Задать значение файловой системы в случае невозможности её автоматического выявления:

    
    -t <FileSystem> 
    		

    Например:

    
    > wsl.exe --mount \\.\PHYSICALDRIVE1 --partition 2 -t ext4
    		
  2. Определить любые параметры монтирования файловой системы Linux:

    
    -o >options> 
    		

    Например:

    
    > wsl.exe –mount \\.\PHYSICALDRIVE1 --partition 2 -o noatime,uid=1000,gid=1000
    		
  3. Вы можете пробросить всё устройство целиком вместо отдельного раздела при помощи

    
    --bare
    		

    Это требует чтобы вы опустили параметры --partition, -t и -o. Например:

    
    > wsl.exe –mount \\.\PHYSICALDRIVE1 --bare
    		

Когда вы смонтировали файловую систему в WSL2, применяются обычные методы доступа из Windows, такие как узел Linux в Проводнике и установленные пути \wsl$ UNC.

После того как вы завершите работу со своим диском или дисковым образом, вы можете удалить его из WSL2 при помощи команды --unmount:


wsl.exe --unmount >DiskPath> 
		

Например:


> wsl.exe --unmount \\.\PHYSICALDRIVE1
		

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


> wsl.exe --unmount