Где находятся файлы подсистемы linux в windows 10

I've installed wsl2 on my windows machine and I was not able to figure out where the files are actually stored. Note, that I don't mean that I wanna browse them inside the file explorer - I know i...

I’ve installed wsl2 on my windows machine and I was not able to figure out where the files are actually stored.
Note, that I don’t mean that I wanna browse them inside the file explorer — I know it can be done by typing in the explorer \wsl$.
If I would have to guess I would say the files are stored in the same hard-drive that the os is stored.

So actually I have two related questions.

  1. Where the files are stored?
  2. If they are stored in the hard drive of my os, can I somehow relocate my wsl to another hard drive?

EDIT:
I was able to locate the installation path, in my machine the path is:
C:UsersEliranAppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalState

Is there a way to mount this to another location?

Dweeberly's user avatar

Dweeberly

4,5782 gold badges21 silver badges39 bronze badges

asked Oct 3, 2020 at 14:56

Eliran Turgeman's user avatar

Eliran TurgemanEliran Turgeman

1,4442 gold badges11 silver badges28 bronze badges

6

All the files are stored in a ext4.vhd files in the installation directory, which you can’t mount directly onto windows as it is in ext4 (obv)

There’s two ways to change the location of the above mentioned vhd file the official, tedious way and an unofficial quick and dirty way

The official tedious way

  1. Export the distro to a location with wsl.exe --export <Distro> <FileName> from CMD/PowerShell
  2. Import the distro to a different location with wsl.exe --import <Distro> <InstallLocation> <FileName> [Options]

The problems with this is it’s quite time consuming and after you do this, pray that it exported and imported several gigabytes worth of thousands of files without any problems

The quick and dirty way

This involes an unofficial opensource WSL manager called lxrunoffline

To install it (takes like a min at max) read through the instructions by the dev here

If you installed it by manually downloading the binaries from the release page, make sure to install it to a directory in PATH, like C:Windows

Now the process is simple as lxrunoffline move -n <distroname> -d <destination-folder>

For example lxrunoffline move -n Ubuntu-20.04 -d G:wsl

Hope I helped

Edit: typo

answered Oct 6, 2020 at 5:31

zwxi's user avatar

1

I executed these commands in PowerShell to move my Ubuntu distro from C: to drive D:wsl-ubuntu :

PS C:Userssmarc> mkdir D:wsl-ubuntu  (create new location)
PS C:Userssmarc> wsl -l -v            (list wsl distros)
NAME                   STATE           VERSION
Ubuntu                 Running         2
PS C:Userssmarc> wsl --shutdown
PS C:Userssmarc> wsl -l -v            (verify if is stopped)
NAME                   STATE           VERSION
Ubuntu                 Stopped         2
PS C:Userssmarc> wsl --export Ubuntu ubuntu.tar  
PS C:Userssmarc> wsl --unregister Ubuntu
PS C:Userssmarc> wsl --import Ubuntu D:wsl-ubuntu .ubuntu.tar --version 2

and reboot the computer at the end.

The only problem I have is that the default user when I started the Ubuntu application is the root. I need to execute $ su sergio to enter in my personal user.

You can delete the ubuntu.tar at the end of process.

#edit 2021-04-13: As pointed out in the comments, I had forgotten the «—export» command.

answered Apr 12, 2021 at 20:51

Sergio Marcelo C Figueiredo's user avatar

6

This is an answer to your last question: use symbolic links

  • open command prompt as administrator
  • shut down wsl vm using wsl --shutdown
  • change folder to C:UsersEliranAppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
  • move the LocalState folder to another location like Z:wslUbuntu
  • create symbolic link with mklink /J LocalState Z:WSLUbuntuLocalState

I would also edit/create the .wslconfig file from your user folder to move the swap file to the folder where you store your WSL vm’s and maybe edit/add options for CPU cores and RAM assignment

[wsl2]
memory=4GB
processors=2
swap=1GB
swapFile=Z:\WSL\swap.vhdx
  • memory is the maximum amount your ram that WSL will use;
  • processors is the alocated cores to your WSL vm;
  • swap is the size of the swap file;
  • swapFile is the location of your swap and to my knowledge is used by all WSL vm’s; notice the double slashes in the path, they are mandatory for the path.

Start your WSL VM as you normally would.

answered Apr 30, 2021 at 18:18

Gregory Butler's user avatar

1

I’ve installed wsl2 on my windows machine and I was not able to figure out where the files are actually stored.
Note, that I don’t mean that I wanna browse them inside the file explorer — I know it can be done by typing in the explorer \wsl$.
If I would have to guess I would say the files are stored in the same hard-drive that the os is stored.

So actually I have two related questions.

  1. Where the files are stored?
  2. If they are stored in the hard drive of my os, can I somehow relocate my wsl to another hard drive?

EDIT:
I was able to locate the installation path, in my machine the path is:
C:UsersEliranAppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalState

Is there a way to mount this to another location?

Dweeberly's user avatar

Dweeberly

4,5782 gold badges21 silver badges39 bronze badges

asked Oct 3, 2020 at 14:56

Eliran Turgeman's user avatar

Eliran TurgemanEliran Turgeman

1,4442 gold badges11 silver badges28 bronze badges

6

All the files are stored in a ext4.vhd files in the installation directory, which you can’t mount directly onto windows as it is in ext4 (obv)

There’s two ways to change the location of the above mentioned vhd file the official, tedious way and an unofficial quick and dirty way

The official tedious way

  1. Export the distro to a location with wsl.exe --export <Distro> <FileName> from CMD/PowerShell
  2. Import the distro to a different location with wsl.exe --import <Distro> <InstallLocation> <FileName> [Options]

The problems with this is it’s quite time consuming and after you do this, pray that it exported and imported several gigabytes worth of thousands of files without any problems

The quick and dirty way

This involes an unofficial opensource WSL manager called lxrunoffline

To install it (takes like a min at max) read through the instructions by the dev here

If you installed it by manually downloading the binaries from the release page, make sure to install it to a directory in PATH, like C:Windows

Now the process is simple as lxrunoffline move -n <distroname> -d <destination-folder>

For example lxrunoffline move -n Ubuntu-20.04 -d G:wsl

Hope I helped

Edit: typo

answered Oct 6, 2020 at 5:31

zwxi's user avatar

1

I executed these commands in PowerShell to move my Ubuntu distro from C: to drive D:wsl-ubuntu :

PS C:Userssmarc> mkdir D:wsl-ubuntu  (create new location)
PS C:Userssmarc> wsl -l -v            (list wsl distros)
NAME                   STATE           VERSION
Ubuntu                 Running         2
PS C:Userssmarc> wsl --shutdown
PS C:Userssmarc> wsl -l -v            (verify if is stopped)
NAME                   STATE           VERSION
Ubuntu                 Stopped         2
PS C:Userssmarc> wsl --export Ubuntu ubuntu.tar  
PS C:Userssmarc> wsl --unregister Ubuntu
PS C:Userssmarc> wsl --import Ubuntu D:wsl-ubuntu .ubuntu.tar --version 2

and reboot the computer at the end.

The only problem I have is that the default user when I started the Ubuntu application is the root. I need to execute $ su sergio to enter in my personal user.

You can delete the ubuntu.tar at the end of process.

#edit 2021-04-13: As pointed out in the comments, I had forgotten the «—export» command.

answered Apr 12, 2021 at 20:51

Sergio Marcelo C Figueiredo's user avatar

6

This is an answer to your last question: use symbolic links

  • open command prompt as administrator
  • shut down wsl vm using wsl --shutdown
  • change folder to C:UsersEliranAppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
  • move the LocalState folder to another location like Z:wslUbuntu
  • create symbolic link with mklink /J LocalState Z:WSLUbuntuLocalState

I would also edit/create the .wslconfig file from your user folder to move the swap file to the folder where you store your WSL vm’s and maybe edit/add options for CPU cores and RAM assignment

[wsl2]
memory=4GB
processors=2
swap=1GB
swapFile=Z:\WSL\swap.vhdx
  • memory is the maximum amount your ram that WSL will use;
  • processors is the alocated cores to your WSL vm;
  • swap is the size of the swap file;
  • swapFile is the location of your swap and to my knowledge is used by all WSL vm’s; notice the double slashes in the path, they are mandatory for the path.

Start your WSL VM as you normally would.

answered Apr 30, 2021 at 18:18

Gregory Butler's user avatar

1

Единственная корневая файловая система находилась здесь до обновления Windows 10 Fall Creators (выпущенного в октябре 2017 года):

%USERPROFILE%AppDataLocalLxssrootfs

Например, C:UsersVigoAppDataLocalLxssrootfs

Другие точки монтирования расположены на один уровень выше в каталоге lxss . Например, ваш собственный home каталог в Linux будет находиться в папке %USERPROFILE%AppDataLocalLxsshome .

Начиная с обновления Fall Creators, можно установить более одного экземпляра Linux и запустить их параллельно. Существующий экземпляр (он же устаревший) останется в своем каталоге, но новые созданные экземпляры находятся в:

%USERPROFILE%AppDataLocalPackages<distribution_specific_name>_<random_string>LocalStaterootfs

Например, моя установка Ubuntu 18.04 находится под

CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc

каталог.

Предупреждение: не создавайте, не изменяйте и не удаляйте файлы, расположенные под конкретным деревом lxss или дистрибутива, из Windows.

Изучение и чтение файлов — единственная безобидная операция. См. Эту страницу блога Microsoft для деталей.

Обратите внимание, что начиная с Build 1903, существует альтернативный способ доступа к файлам работающего дистрибутива, в котором не обнаружены ранее упомянутые проблемы.

Просто используйте путь \wsl$<distribution_specific_name> и вы сможете создавать и изменять файлы. AppData по-прежнему не поддерживается для доступа к файлам в сборке 1903.

Windows 10 версии 1903 содержит ряд интересных изменений и улучшений, внесенных в функцию WSL. К ним относятся дополнительные дистрибутивы в Магазине, возможность просматривать файлы WSL в Проводнике и многое другое.

Возможность запуска Linux в Windows 10 обеспечивается функцией WSL. WSL это — Windows Subsystem for Linux, которая изначально была ограничена только Ubuntu. Современные версии WSL позволяют устанавливать и запускать несколько дистрибутивов Linux из Microsoft Store.

После включения WSL вы можете устанавливать различные версии Linux из Магазина, используя следующие ссылки:

Ссылки на дистрибутивы в магазине microsoft:

  Ubuntu  | openSUSE Leap  | SUSE Linux Enterprise Server | Debain GNU / Linux | Kali Linux

В Windows 10 версии 1903 вы можете легко получить доступ ко всем файлам в ваших дистрибутивах Linux с помощью проводника Windows. На момент написания статьи эта функция реализована в сборке Windows 10 18836. Она находится на пути к ветви 19h1, поэтому мы увидим ее в следующей сборке. Вот как это можно сделать.

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

Шаг 1: Включить функцию WSL (Подситема Windows для Linux)

Шаг 2: Установите какой-нибудь дистрибутив, например Ubuntu, и запустите его.

Подробнее в нашей статье: Руководство по установке и запуску — Ubuntu Bash в Windows 10.

Шаг 3: Находясь в каталоге Linux FS, введите^

explorer.exe .

Откроется окно проводника, расположенное внутри вашего дистрибутива Linux.

Доступ к файлам Linux в Windows 10

Теперь вы можете получить доступ к любым файлам Linux, так же, как и к любому другому файлу через проводник. Это включает в себя такие операции, как: перетаскивание файлов в другие места, копирование и вставка и даже использование пользовательских записей контекстного меню, добавленных Notepad ++, VSCode или другим программным обеспечением.

Проводник показывает файлы дистрибутива как виртуальный сетевой ресурс по пути \ wsl $ <running_distro_name> .

Команда WSL активно исследует способы улучшения обнаруживаемости файлов Linux внутри Проводника. Ход их работы уже можно увидеть в Windows 10 Build 18836, которая показывает файловую систему WSL / Linux в File Explorer.

Доступ к файлам Linux в командной строке

В дополнение к Проводнику вы можете использовать классическую командную строку и инструменты PowerShell для доступа к файлам Linux. Точно так же вам нужно перейти к \wsl${имя дистрибутива}, где {имя дистрибутива} — это имя работающего дистрибутива.

WSL в PowerShell

Известные вопросы

Это новая функция, и некоторые ее части могут не работать идеально. Вот некоторые известные проблемы, о которых мы хотим сообщить вам при использовании этой функции:

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

Поскольку файловый сервер 9P работает внутри каждого дистрибутива, он доступен только тогда, когда этот дистрибутив работает. Команда ищет способы решить эту проблему.

Доступ к файлам Linux рассматривается так же, как и доступ к сетевому ресурсу, и все правила доступа к сетевым ресурсам будут по-прежнему применяться,

  • Например: при использовании CMD cd \wsl$Ubuntuhome не будет работать (поскольку CMD не поддерживает пути UNC, так как текущие каталоги), однако будет работать copy \wsl$Ubuntuhomesomefile.txt C:dev
  • Старые правила по-прежнему применяются, вы не должны получать доступ к файлам Linux внутри папки AppData!
  • Если вы пытаетесь получить доступ к своим файлам Linux через папку AppData, вы используете обход сервера 9P, что означает, что у вас не будет доступа к файлам Linux, и вы можете повредить ваш дистрибутив Linux.

Примечание: Сервер 9P — это сервер, который содержит протоколы, поддерживающие метаданные Linux, включая разрешения. Демон инициализации WSL теперь включает сервер 9P. Существует служба Windows и драйвер, который действует как клиент и взаимодействует с сервером 9P (который работает внутри экземпляра WSL). Клиент и сервер обмениваются данными через сокеты AF_UNIX, поскольку WSL позволяет взаимодействовать между приложением Windows и приложением Linux, используя AF_UNIX.

К написанию данной статьи меня побудил вопрос на Тостере, связанный с 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, поэтому ставлю его:

apt install nano

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

nano /etc/apt/sources.list

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

deb http://mirror.yandex.ru/ubuntu/ xenial main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial main universe  restricted

deb http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted

deb http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted

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

apt update && apt upgrade

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

addgroup --gid 1000 user1
adduser --home /home/user1 --shell /bin/bash --uid 1000 -G user1,sudo user1

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

cd /home/user1
su user1
passwd
nano .bashrc

Мой базовый .bashrc выглядит так

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm|xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    if [[ ${EUID} == 0 ]] ; then
        PS1='${debian_chroot:+($debian_chroot)}[33[01;31m]h[33[01;34m] W $[33[00m] '
    else
        PS1='${debian_chroot:+($debian_chroot)}[33[01;32m]u@h[33[00m] [33[01;34m]w $[33[00m] '
    fi
else
    PS1='${debian_chroot:+($debian_chroot)}u@h w $ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="[e]0;${debian_chroot:+($debian_chroot)}u@h wa]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '''s/^s*[0-9]+s*//;s/[;&|]s*alert$//''')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

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

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

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

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

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

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

locale-gen ru_RU
locale-gen ru_RU.UTF-8
update-locale

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

apt install -y xfce4-session xfce4-notifyd xfce4-appfinder xfce4-panel xfce4-quicklauncher-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin xfce4-settings xfce4-terminal xfce4-taskmanager mousepad

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

  1. config.xlaunch — файл настроек для VcXsrv
    <?xml version="1.0" encoding="UTF-8"?>
    <XLaunch
    WindowMode="MultiWindow"
    ClientMode="NoClient"
    LocalClient="False"
    Display="0"
    LocalProgram="xcalc"
    RemoteProgram="xterm"
    RemotePassword=""
    PrivateKey=""
    RemoteHost=""
    RemoteUser=""
    XDMCPHost=""
    XDMCPBroadcast="False"
    XDMCPIndirect="False"
    Clipboard="True"
    ClipboardPrimary="True"
    ExtraParams=""
    Wgl="True"
    DisableAC="False"
    XDMCPTerminate="False"
    />
  2. x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:

    WScript.CreateObject("Shell.Application").ShellExecute "wsl", "cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session", "", "open", 0

    Поясню, что здесь происходит. Мы говорим 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)

  3. start.bat — batch файл для запуска, по желанию его можно засунуть в автозагрузку
    start config.xlaunch
    wscript x-run.vbs

Далее можем запустить наш 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:

wsl md5sum < d:file.txt

Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%PackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscLocalStaterootfs. Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что 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, поэтому буду пробовать ставить.

Сайт KV.BY опубликовал статью о подсистеме Windows Subsystem for Linux (WSL), предназначенной для запуска Linux-программ в ОС Windows 10. Упор в статье сделан на последнюю версию этой подсистемы WSL2.

Windows – это Linux

Как говорили древние греки, всё меняется и ничто не остаётся на месте. Многие ещё помнят те времена, когда операционная система GNU/Linux была для «Майкрософт» чем-то вроде красной тряпки для быка. Бывший руководитель рэдмондского гиганта Стив Балмер называл всё, что связано с детищем Линуса Торвальдса, не иначе как «раковой опухолью». Однако прошло не так уж и много времени после таких заявлений, и вот уже как три года корпорация «Майкрософт» является платиновым участником консорциума Linux Foundation – организации, занимающейся развитием и стандартизацией ядра Linux.

Мало того, в операционной системе Windows 10 появилась специальная программная подсистема Windows Subsystem for Linux (WSL). Эта подсистема позволяет в Windows запускать программы GNU/Linux в двоичном исполняемом формате ELF-64. В результате пользователям десятых «Форточек» становятся доступно программное обеспечение Linux-дистрибутивов, начиная со скриптов Bash и заканчивая службами наподобие Docer.

Windows Subsystem for Linux
Windows Subsystem for Linux

Поводом для произошедших перемен в политике корпорации, без сомнения, стала популярность мобильной операционной системы Android, основанной на ядре Linux. Но причина, по которой в Рэдмонде произошёл поворот в сторону Linux-сообщества, лежит не только в области мобильных операционных систем.

«Developers, developers, developers!»

Существует два способа запускать Linux-приложения в Windows. Первый способ предполагает перекомпиляцию Linux-программ в исполняемый формат exe-файлов. Благо большая часть программ Open Source является кроссплатформенной и свободно собирается под разные операционные системы. Примером первого способа можно назвать проекты Cygwin или MinGW – коллекции специально скомпилированных для Windows приложений UNIX.

Второй способ предполагает использование эмуляции и виртуализации, что позволяет запускать полноценный Linux-дистрибутив в специальной виртуальной среде. WSL – это и есть второй способ. Здесь используются как эмуляция ядра Linux, так и технологии виртуализации.

Но, прежде чем мы рассмотрим особенности второго способа, отметим, что в Windows 10 присутствует и первый способ. С недавнего времени тихо и незаметно в штатный состав «Десятки» входят три классические консольные UNIX-утилиты curl.exe, tar.exe, openssh.exe.

Утилиты curl.exe, tar.exe, openssh.exe в Windows 10
Утилиты curl.exe, tar.exe, openssh.exe в Windows 10

Выбор этих консольные утилит явно указывает на тот класс пользователей, ради которых «Майкрософт» и затеяла всю эту эпопею с запуском в «Форточках» программ Linux. Программы Curl, tar и openssh – популярные инструменты у веб-разработчиков. Именно для них и для веб-разработки создают в Рэдмонде подсистему Windows Subsystem for Linux.

Как правило, веб-разработчики используют для своей работы Windows. Однако их клиенты и заказчики в основном пользуются хостингом на Linux. И для веб-разработчики в среде Windows приходится использовать что-то вроде Denver и XAMP, или же запускать программы виртуализации VMware и VirtualBox, или же использовать на компьютере двойную загрузку с системами Linux. Или уже наметилась устойчивая тенденция для веб-разработки переходить на Mac OS, в которой имеется полноценное POSIX-ядро, позволяющее без лишних телодвижений запустить все консольные скрипты и программы, необходимых для современных веб-кодеров.

Поэтому основная цель WSL – удержать веб-разработчиков на Windows, предоставив им удобную и комфортную среду запуска всех консольных скриптов, программ и примеров с GitHub и StackOwerflow. (Кстати GitHub с недавних пор тоже под контролем Microsoft).

Главная особенность WSL

Технологиями виртуализации давно никого не удивишь. Если подсистема WSL основана на технологиях виртуализации, то возникает основной вопрос: чем Windows Subsystem for Linux лучше того же VirtualBox?

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

Ниже рассмотрим эту бесшовность и прозрачность более детально. Все инструкции в этой статье для работы с WSL актуальны для сборки Windows 10 18917 и более поздних версий. Проверить номер своей сборки Windows 10 можно командой «ver» в приложении «Командная строка».

Настройка WSL

Настраивать подсистему WSL практически не нужно. Виртуальная среда WSL в процессе работы настроится автоматически и незаметно для пользователя.

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

Включение WSL
Включение WSL

WSL работает только в 64-разрядных версии Windows 10, начиная с редакции «Домашняя» для процессоров x64 и ARM. Подсистема не работает в безопасном S-режиме Windows 10.

Загрузка дистрибутива

Как известно программы для Linux распространяются в составе дистрибутивов, наиболее популярными из которых можно назвать Fedora, Debian, Ubuntu, OpenSUSE. Поэтому чтобы начать работу с WSL следует загрузить и установить базовый набор приложений какого-либо дистрибутива и затем штатным менеджером пакетов установить нужные программы.

Дистрибутивы Linux для WSL устанавливаются прямо из магазина приложений Windows Store так же, как и программы Windows. По поисковому запросу «linux» в магазине появится список дистрибутивов для выбора. На текущий момент в магазине представлено уже около дюжины дистрибутивов. Выбираем нужный дистрибутив, – например Ubuntu-18.04, – и нажимаем кнопку «Получить».

Ubuntu-18.04 в Windows Store
Ubuntu-18.04 в Windows Store

Загрузится около 200 мегабайт файлов для базовой системы. В главном меню «Пуск», в «плитках» и на рабочем столе наравне с иконками Windows-программ появится иконка Linux-дистрибутива.

Иконки дистрибутива Linux в Windows 10
Иконки дистрибутива Linux в Windows 10

Удаление дистрибутива происходит также как и удаление Windows-программ – через контекстное меню «плитки» дистрибутива в меню «Пуск».

Отметим, что в редакциях Windows 10 для предприятий, в которых нет Windows Store, дистрибутивы Linux для WSL можно скачать и установить посредством специальных команд Power Shell. В этой статье для краткости мы данный метод рассматривать не станем.

Первый запуск WSL

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

При первом запуске установленного дистрибутив откроется приложение «Командная строка», в котором запустится командный интерпретатор установленного дистрибутива – обычно это bash. Будет предложено подождать одну или две минуты для завершения установки. На последнем этапе после завершения установки необходимо создать новую учетную запись пользователя Linux-системы, который будет использоваться по умолчанию подсистемой WSL, и задать пароль. После чего с установленной системой Linux можно работать.

Начальная инициализация WSL-дистрибутива
Начальная инициализация WSL-дистрибутива

Запустить установленную систему Linux можно в приложении «Командная строка» с помощью команд «bash.exe», «wsl.exe» или «<имя дистрибутива>.exe» (не во всех дистрибутивах работает). Самой продвинутой является команда «wsl.exe», так как с её помощью доступны все возможные операции с подсистемой WSL.

Список установленных дистрибутивов задаётся командой «wsl» с помощью опции «-l» или «—list»:

wsl -l
Пример вывода команды “wsl -l”
Пример вывода команды “wsl -l”

Установка дистрибутива по умолчанию, который будет запускаться командами «bash.exe», «wsl.exe» без параметров, происходит с помощью опций «-s» («—setdefault»):

wsl -s <название дистрибутива>

Если для дистрибутива задано несколько учётных записей, то для запуска от имени определенного пользователя имеются опции «-u» («—user»):

wsl -u <имя пользователя>

Запуск определенного дистрибутива по названию с помощью опций «-d» («—distribution»):

wsl -d <название дистрибутива>

WSL1 и WSL2

После установки и первого запуска любой системы обычно всегда делается обновление ПО. Например, для Ubuntu обновление делается командами:

sudo apt-get update & apt-get upgrade

В первых версиях WSL пользователи столкнулись с неприятным фактом, что это обновление происходило очень медленно. Операция замены пары сотен мегабайт могла затянуться на долгое время. Резкое снижение производительности было характерно также и для других приложений, требующих большого числа файловых операций – Git, Node.js и других.

Такая низкая скорость файловых операций объяснялась тем, что первая версия WSL использовала эмуляцию ядра Linux на уровне API Windows. Также подсистема WSL эмулировала метаданные файловой системы дистрибутива Linux.

На практике оказалось, что такая эмуляция не обеспечивает высокую скорость файловых операций для систем Linux. Поэтому, начиная со сборки Windows 10 18917, используется новая архитектура WSL2, которая основана на технологиях виртуализации Microsoft Hyper-V. Другими словами теперь для каждого установленного дистрибутива Linux подсистема WSL запускает отдельную легковесную виртуальную машину и отдельный виртуальный диск. При этом для этой виртуальной машины используется настоящее ядро Linux, а не эмуляция на уровне системных вызовов Windows. В результате для WSL2 удалось повысить производительность файловых операций по сравнению с WSL1 на порядок.

На текущий момент в Windows 10 присутствуют обе версии подсистемы – и WSL1, и WSL2. Рекомендуется использовать WSL2.

Чтобы проверить, какие версии WSL использует каждый дистрибутив, используйте для команды «wsl.exe» опции «-l -v» («—list —verbose»):

wsl -l -v
Пример вывода команды “wsl -l -v”
Пример вывода команды “wsl -l -v”

Установить WSL 2 для отдельного дистрибутива можно опцией «—set-version»:

wsl --set-version <название дистрибутива> 2

Чтобы задать WSL 2 по умолчанию для всех устанавливаемых в дальнейшем дистрибутивов Linux, используйте опцию «—set-default-version»:

wsl --set-default-version 2

Одиночное и смешанное выполнение программ

Самое важное и интересное в WSL – это одиночное и смешанное выполнение программ Linux из среды Windows и наоборот.

Чтобы выполнить какую-либо программу из установленного дистрибутива Linux, совсем не обязательно запускать терминальную сессию Linux. Можно просто передать имя Linux-программы в качестве аргумента для wsl.exe и она будет выполнена прямо в контексте командной строки Windows.

c:>wsl uname
Linux
c:>
Примеры одиночного выполнения Linux-программ
Примеры одиночного выполнения Linux-программ

При этом программа для Linux выполнится в том же каталоге, в котором находится интерпретатор «Командная строка», от имени пользователя WSL по умолчанию с правами вызывавшего её интерпретатора. То есть если «Командная строка» запущена с правами Администратора Windows, то и запущенная здесь программа для Linux будет иметь права Администратора.

Возможно и обратное – вызов двоичных файлов Windows из консоли Linux. Поэтому из командного интерпретатора Linux, например, набрав команду «notepad.exe» можно запустить «Блокнот», который будет запущен с правами активного пользователя Windows.

$ notepad.exe "C:WSLWSL.txt"
Запуск “Блокнота” из консоли Linux
Запуск “Блокнота” из консоли Linux

Мало того, можно объединять программы Linux и программы Windows через механизм конвейера pipe. То есть можно соединять выход Linux-программы с входом Windows-программы и наоборот.

Пример 1, cmd. Выход Windows-программы «dir» направляем на вход Linux-утилиты «grep»:

C:>dir | wsl grep "Windows"
28.10.2019  03:36    
          Windows
28.10.2019  03:41              Windows.old

Пример 2, bash. Выход Linux-программы «cat» направляем на вход Windows-утилиты «findstr»:

$ cat /etc/lsb-release | findstr.exe "DESCRIPTION"
 DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

Такая тесная интеграция программ Windows и Linux с помощью WSL позволяет, например, писать смешанные скрипты BASH и Power Shell. Или интегрировать инструменты Linux в средства разработки Windows.

Доступ к файлам

WSL предоставляет доступ из оболочки bash Linux ко всем дискам и всей файловой системе Windows. Локальные диски автоматически монтируются в каталог «/mnt». Например, диск «C:» монтируется как «/mnt/c».

USB-флэшки не монтируются автоматически в каталог «/mnt». Их нужно монтировать с помощью плагина drvfs. Например, монтирование флэш-диска H:

$ sudo mkdir /mnt/h
$ sudo mount -t drvfs h: /mnt/h

Файлы WSL-дистрибутивов Linux можно найти в папке «C:Usersимя_пользователяAppDataLocalPackages». Они будут находиться в папках с названиями вида «CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc». Если используется версия WSL1, то файлы Linux-системы там будут находиться как есть в прямом доступе из Windows. Но категорически не рекомендуется их трогать в обход WSL, так как Windows не обработает специфические метаданные этих файлов.

В случае версии WSL2 в папке дистрибутива будет расположен файл образа виртуального жёсткого диска. Если в командном интерпретаторе запустить команду «explorer.exe .» с точкой в качестве аргумента, то откроется «Обозреватель» Windows, в котором отобразится файловая система текущего дистрибутива Linux как сетевой ресурс вида «wsl$<название дистрибутива>».

WSL-диск как сетевой ресурс Windows
WSL-диск как сетевой ресурс Windows

Другими словами, передать приложению Windows какой-либо файл из WSL-дистрибутива можно по сетевому пути к этому файлу.

C:>notepad wsl$Ubuntu-18.04homemikWSL.txt

Сеть и сетевые приложения

Версия WSL1 использует IP-адрес Windows. Сетевой стек у подсистемы WSL1 общий с Windows. Сервер, поднятый в Linux, будет доступен на localhost в Windows и наоборот.

Если дистрибутив использует версию WSL2, то уже потребуется найти IP-адрес виртуальной машины, чтобы подключить дистрибутив по этому IP-адресу. Это можно сделать, выполнив в Linux-системе команду «ip addr» и через поиск строки «eth0» найти адрес по значению «inet».

$ ip addr | grep eth0
 5: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
     inet 172.18.14.6/20 brd 172.18.15.255 scope global eth0

Дальше можно в Linux запустить, для примера, http-сервер Python командой «python3 -m http.server» и обратиться к нему из браузера Windows по полученному IP.

Доступ к веб-серверу Python для WSL из Windows
Доступ к веб-серверу Python для WSL из Windows

WSL и программы с графическим интерфейсом

WSL — это средство, предназначенное для пользователей, которым требуется запускать программы командной строки Bash и Core Linux в Windows. WSL не имеет штатных средств для запуска приложений Linux с графическим интерфейсом GNOME, KDE и т. д.

Тем не менее, энтузиасты вполне успешно запускают графические программы в WSL, устанавливая и запуская сторонние порты X-сервера для Linux – например VcXsrv.

VcXsrv – X-сервер для Windows
VcXsrv – X-сервер для Windows

В сети Интернет немало инструкций по запуску в WSL графических Linux-программ. Большая часть этих инструкций написана для WSL1, но с появлением второй версии подсистемы они устарели. Ниже последовательность действий для настройки X-сервера VcXsrv для подсистемы WSL2.

  1. Находим в Сети, скачиваем и устанавливаем X-сервер VcXsrv.
  2. В WSL-дистрибутиве через пакетный менеджер устанавливаем какую-нибудь программу с графическим интерфейсом – например, Nautilus GNOME.
  3. В настройках брандмауэра Защитника Windows «Пуск > Параметры > Обновление и безопасность > Безопасность Windows > Брандмауэр и защита сети» отключаем брандмауэр для опции «Общедоступная сеть».
  4. В Linux находим IP-адрес сервера имен nameserver, прописанный в «/etc/reslv.conf».
$ cat /etc/resolv.conf
 This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
 [network]
 generateResolvConf = false
 nameserver 172.20.240.1
  1. Экспортируем переменную DISPLAY со значением nameserver из reslv.conf и номером экрана «0».
export DISPLAY=172.20.240.1:0
  1. Запускаем в Windows VcXsrv. Устанавливаем «0» для «Display number» и галочку для «Disable access control».
  2. В Linux из командной строки запускаем графическую программу.
WSL и программы Linux с графическим интерфейсом
WSL и программы Linux с графическим интерфейсом

Само собой, приведенный способ в запуска программ Linux с графическим интерфейсом в скором времени тоже устареет. Хотя бы потому, что подобный способ не соответствует главной задумке Windows Subsystem for Linux: использовать только штатные компоненты Windows и не требовать их сложной настройки.

Microsoft добавила поддержку Windows Subsystem для Linux (WSL) в Windows 10 с Windows 10 v1607. Это позволило пользователям устанавливать различные дистрибутивы Linux, такие как Ubuntu, SUSE Linux, Kali Linux и другие, на устройства Windows 10. В обновлении функции v1903 не только WSL получает настоящее ядро, но также будет присутствовать возможность доступа к файлам Linux в Windows 10 с помощью проводника .

Содержание

  1. Доступ к подсистеме Windows для файлов Linux в Windows
  2. 1] Использование проводника внутри терминала WSL
  3. 2] Запуск рута из проводника

Доступ к подсистеме Windows для файлов Linux в Windows

Существует два способа доступа к файлам подсистемы Windows для Linux с помощью проводника в Windows 10:

  1. Открытие проводника из терминала WSL.
  2. Запуск рута из проводника.

1] Использование проводника внутри терминала WSL

  1. Откройте терминал WSL.
  2. Перейдите в корневой каталог или верхнюю папку внутри Терминала.
  3. Введите explorer.exe и нажмите Enter, чтобы открыть это местоположение в проводнике.

2] Запуск рута из проводника

Это относительно прямой метод.

  1. Запустите проводник.
  2. Введите Linux и нажмите Enter в адресной строке Проводника.
  3. Он смонтирует хранилище для дистрибутивов Linux, установленных на вашем компьютере.
  4. Файлы видны в проводнике.

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

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

Like this post? Please share to your friends:
  • Где находятся файлы подкачки в windows 10
  • Где находятся стандартные фото в windows 10
  • Где находятся файлы магазина windows 10
  • Где находятся стандартные фоны windows 10
  • Где находятся файлы корзины windows 10