Подсистема Windows для Linux (Windows Subsystem for Linux, WSL2) сегодня широко используется разработчиками, администраторами и простыми пользователями для запуска различных дистрибутивов (Ubuntu, Debian, OpenSUSE, Kali Linux, Alpine), инструментов и приложений Linux в среде Windows без использования виртуализации и двойной загрузки. В этой статье мы рассмотрим, как перенести файлы установленного WSL на другой диск или компьютер.
При установке WSL в Windows все файлы среды сохраняются на системный диск (C: как правило). Если размер системного диска недостаточен (небольшой SSD диск), то со временем размер файловой системы WSL может серьезно вырасти, и вы захотите перенести файлы WSL на другой диск. В Windows 10 и 11 вы можете перенести WSL на другой диск или компьютер несколькими способами.
В первую очередь определите текущий размер файловой системы WSL на вашем диске. Выведите список установленных дистрибутивов WSL на компьютере:
wsl --list --verbose
В нашем примере установлена только Ubuntu-20.04. Выполните следующую команду PowerShell, чтобы получить название UWP приложения с вашим дистрибутивом Linux:
Get-AppxPackage -Name "*Ubuntu20*" | Select PackageFamilyName
В моем примере название UWP пакета — CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc. Файловая система WSL данного дистрибутива Linux хранится в VHD файле ext4.vhdx в каталоге %USERPROFILE%AppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalStateext4.vhdx
Чтобы получить размер файла с помощью PowerShell, выполните:
$path= $env:USERPROFILE+ ”AppDataLocalPackages” + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + “LocalStateext4.vhdx”
Get-ChildItem -Path $path | fl @{Label="SizeGb"; Expression={$_.Length / 1Gb}}
Путь к VHD файлу данного дистрибутива WSL хранится в параметре BasePath ветки реестра
HKCUSoftwareMicrosoftWindowsCurrentVersionLxss{UUID}
.
Можно остановить WSL, переместить ext4.vhdx на другой диск и изменить путь к каталогу в реестре. Но этот сценарий не рекомендуется!
В современных билдах Windows 10 и 11 можно выполнить корректный перенос среды WSL с помощью встроенной процедуры экспорта и импорта.
Запустите среду wsl и проверьте имя пользователя:
wsl
whoami
В нашем примере это sysops.
Закройте все приложения, запущенные в среде Linux и консоли WSL:
wsl --shutdown
Чтобы создать резервную копию (экспортировать) вашу среду WSL и поместить ее на отдельный диск E:, выполните команды:
mkdir e:backup
wsl --export Ubuntu-20.04 e:backupubuntu.tar
Дождитесь окончания экспорта WSL (может занять длительное время). В целевом каталоге появится TAR архив с вашей средой WSL.
Теперь можно удалить файлы среды WSL на исходном диске:
wsl --unregister Ubuntu-20.04
Создайте каталог для вашего образа Linux на новом диске и импортируйте tar архив в WSL командой:
mkdir E:WSL
wsl --import Ubuntu-20.04 E:WSL E:backupubuntu.tar
Для входа в Ubuntu по умолчанию используется root. Чтобы сменить его на другое имя пользователя (мы получили его ранее), выполните:
cd $env:USERPROFILEAppDataLocalMicrosoftWindowsApps
.ubuntu2004.exe config --default-user sysops
Запустите вашу среду WSL:
wsl -d Ubuntu-20.04
Совет. Нужный дистрибутив WSL можно запустить из Windows Terminal.
Этот же сценарий можно использовать для переноса настроенного образа WSL на другие компьютеры.
Также для переноса WSL в Windows можно использовать стороннюю утилиту LxRunOffline (доступна на GitHub — https://github.com/DDoSolitary/LxRunOffline). Можно установить утилиту через Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install lxrunoffline
Вывести список доступных образов WSL:
lxrunoffline list
Завершаем все процессы:
wsl --shutdown
узнать текущий каталог, в котором хранится образ WSL:
lxrunoffline get-dir -n Ubuntu-20.04
Перенос WSL образ на другой диск:
lxrunoffline move -n Ubuntu-20.04 -d d:wsl2Ubuntu-20.04
После окончания переноса, запустите дистрибутив WSL. Командой:
wsl -d Ubuntu-20.04
или
lxrunoffline run -n Ubuntu-20.04 -w
В WIN 10 возможно установить в качестве подсистемы Linux — Ubuntu. Установка доступна в Microsoft Shop, и в настоящий момент на выбор имеются 18я и 20я версии. К сожалению, при установке нельзя выбрать куда будет размещена система. А установлена она будет в каталог C:/Users/root/AppData/Local/..
Типично, что Диск С: — это системный диск и его размещают на небольшом, но производительном SSD накопителе. Лишнего места там нет.
Вы можете решить проблему с местом, монтируя данные в Ubuntu с других дисков вашего PC, и предотвратите, тем самым, разрастание объема WSL Ubuntu на диске C:. Но более последовательным решением будет перенос файлов в другое место.
Все операции выполняются из консоли. Сначала посмотрим список установленных подсистем:
Обратите внимание, что Ubuntu 18 использует 1ю версию wsl, а 20я версия уже 2ю.
Шаг 1. Экспорт нужной WSL
Получив список WSL, мы узнаем имя контейнера и займемся экспортом. Статус контейнера должен быть — «stopped».
wsl —export Ubuntu—18.04 «d:ubuntu.tar» |
Операция может потребовать много времени. В результате вы получите архив.
Шаг 2. Удаление контейнера
Теперь можно удалить Ubuntu, освободив занимаемые ей ресурсы на диске C:. Используем команду —unregister:
wsl —unregister Ubuntu—18.04 |
Шаг 3. Импорт WSL
Остаётся снова создать контейнер, но уже там, где мы этого хотим.
wsl —import Ubuntu—18.04 «e:ubuntu1804-root» «d:ubuntu.tar» —version 1 |
В качестве небольшого замечания: eсли вы планируете монтировать что то в ubuntu, то wsl v1 работает гораздо быстрее при необходимости взаимодействия с родительской файловой системой в сравнении с wsl 2.
Шаг 4. Запуск WSL
Прямо из консоли запустите ваш контейнер следующей командой:
А файл экспорта (архив d:ubuntu.tar) уже можно удалить.
Точно так же переносятся данные desktop docker. Выполните аналогичные манипуляции с контейнером docker-desktop-data.
wsl
Написать комментарий
Данная запись опубликована в 06.03.2022 20:47 и размещена в Программирование.
Вы можете перейти в конец страницы и оставить ваш комментарий.
В 2016 году в Windows 10 появилась новая функция WLS, представляющая собой слой совместимости, позволяющий запускать из командной строки приложения, скомпилированные для Linux. В следующих версиях Windows функционал WSL был существенно расширен, так, в подсистеме Linux второй версии появилась возможность запуска приложений Linux с графическим интерфейсом. По умолчанию все программные файлы этой виртуальный среды устанавливаются на системный диск.
С учетом количества установленных приложений размер среды может занять на диске значительное место и, если диск небольшой, пользователь может задуматься о необходимости переноса WSL на другой накопитель, например, с небольшого SSD на HDD большего объема.
Такая возможность в Windows 10 и 11 присутствует, причем выполнить перенос можно несколькими способами.
Первый способ предполагает ручное перемещение файла-контейнера ext4.vhdx из его расположения по умолчанию:
%USERPROFILE%AppDataLocalPackagesназвание_дистрибутиваLocalState
На другой диск с последующим изменением параметра BasePath в ключе реестра:
HKCUSoftwareMicrosoftWindowsCurrentVersionLxss{UUID}
Значение которого как раз представлено этим самым путем к контейнеру ext4.vhdx.
Вы просто перемещаете контейнер с виртуальной файловой системой и прописываете в параметре BasePath новый путь.
Использовать этот способ, однако, не рекомендуется из-за высокой вероятности получить ошибку.
Для перемещения WSL на другой диск или раздел можно с помощью встроенной процедуры экспорта и импорта, но еще удобнее использовать для этих целей бесплатную тулзу LxRunOffline, скачав ее со страницы разработчика:
github.com/DDoSolitary/LxRunOffline
Распаковав архив с утилитой и перейдя в запущенной от имени администратора командной строке в папку с исполняемым файлом LxRunOffline.exe (файлы из архива рекомендуется скопировать в папку WSL на диске С) и завершив все процессы WSL, выполните такую команду:
Lxrunoffline.exe move -n Ubuntu-20.04 -d G:wslUbuntu
Ubuntu-20.04 в данном примере это название дистрибутива Linux, а последняя часть команды — путь к новой папке Ubuntu на диске D.
Если нужно получить названия дистрибутива, используем команду LxRunOffline.exe list.
Загрузка…
It’s important to understand that there are multiple components involved in a WSL installation, and whether you can «move» or change their installation location differs for each of those components:
-
The
wsl.exe
command, which is what you mainly appear to be asking about, is built-in to Windows in recent releases. You didn’t (and can’t) actually install or uninstall the actualwsl.exe
through any of the Windows Features or Apps & Features settings. It is present when you install Windows. -
The base Windows Subsystem for Linux («lxss», to some degree), which is also built into Windows as a «Windows Feature». As a Windows Feature, it can be enabled or disabled, but not, to my knowledge, uninstalled. As you can see in my post here, this takes up very little disk space.
-
The WSL2 Virtual Machine Platform, which is also a Windows feature.
Like all other Windows features, no, you can’t change the location where the files live. Most will be under System32
. The fact that you were in that directory when you enabled the feature has nothing to do with it.
I can’t recall which of the files in the C:WindowsSystem32lxss
directory are there when Windows is installed.
The other components, which are not built-in to Windows, are:
-
The WSL2 Linux kernel. This is actually what was removed when you uninstalled the «Windows Subsystem for Linux Update». I agree that it is confusingly named.
This official kernel is also installed in a subdirectory with the other WSL binaries, in
C:WindowsSystem32lxsstools
. While you can’t change the folder where this kernel is installed, you can move it to another directory if you’d like and create a file in your Windows (not Linux) user profile directory named.wslconfig
with the following contents:[wsl32] kernel="C:pathtokernel"
You can also compile additional kernels and place them whereever you like, pointing to the one you want to launch in the
.wslconfig
. -
One or more WSL distributions.
When you install a distribution using
wsl --install -d <distro>
or from the Microsoft Store, it is installed by default in%USERPROFILE%AppDataLocalPackages<PackageName>
. These can be «moved» by exporting them and re-importing them.From PowerShell:
mkdir D:WSLimages # For example mkdir D:WSLinstances<newDistroName> cd D:WSL wsl -l -v # Verify distro name to export wsl --export <distroname> .images<distroname>.tar wsl --import <newDistroName> .instances<newDistroName> .images<distroname>.tar wsl --set-default <newDistroName>
You’ll also need to set the default username in that copied instance via the
/etc/wsl.conf
file as discussed in this answer.It might also be possible to forcibly move the distribution files from your
AppData
folder to another location and then update the registry corresponding registry location (HKCU:SoftwareMicrosoftWindowsCurrentVersionLxss
). However, I have not tested this, nor seen anyone else try it. If you want to give it a shot, make sure you have a backup viawsl --export
above.
It’s important to understand that there are multiple components involved in a WSL installation, and whether you can «move» or change their installation location differs for each of those components:
-
The
wsl.exe
command, which is what you mainly appear to be asking about, is built-in to Windows in recent releases. You didn’t (and can’t) actually install or uninstall the actualwsl.exe
through any of the Windows Features or Apps & Features settings. It is present when you install Windows. -
The base Windows Subsystem for Linux («lxss», to some degree), which is also built into Windows as a «Windows Feature». As a Windows Feature, it can be enabled or disabled, but not, to my knowledge, uninstalled. As you can see in my post here, this takes up very little disk space.
-
The WSL2 Virtual Machine Platform, which is also a Windows feature.
Like all other Windows features, no, you can’t change the location where the files live. Most will be under System32
. The fact that you were in that directory when you enabled the feature has nothing to do with it.
I can’t recall which of the files in the C:WindowsSystem32lxss
directory are there when Windows is installed.
The other components, which are not built-in to Windows, are:
-
The WSL2 Linux kernel. This is actually what was removed when you uninstalled the «Windows Subsystem for Linux Update». I agree that it is confusingly named.
This official kernel is also installed in a subdirectory with the other WSL binaries, in
C:WindowsSystem32lxsstools
. While you can’t change the folder where this kernel is installed, you can move it to another directory if you’d like and create a file in your Windows (not Linux) user profile directory named.wslconfig
with the following contents:[wsl32] kernel="C:pathtokernel"
You can also compile additional kernels and place them whereever you like, pointing to the one you want to launch in the
.wslconfig
. -
One or more WSL distributions.
When you install a distribution using
wsl --install -d <distro>
or from the Microsoft Store, it is installed by default in%USERPROFILE%AppDataLocalPackages<PackageName>
. These can be «moved» by exporting them and re-importing them.From PowerShell:
mkdir D:WSLimages # For example mkdir D:WSLinstances<newDistroName> cd D:WSL wsl -l -v # Verify distro name to export wsl --export <distroname> .images<distroname>.tar wsl --import <newDistroName> .instances<newDistroName> .images<distroname>.tar wsl --set-default <newDistroName>
You’ll also need to set the default username in that copied instance via the
/etc/wsl.conf
file as discussed in this answer.It might also be possible to forcibly move the distribution files from your
AppData
folder to another location and then update the registry corresponding registry location (HKCU:SoftwareMicrosoftWindowsCurrentVersionLxss
). However, I have not tested this, nor seen anyone else try it. If you want to give it a shot, make sure you have a backup viawsl --export
above.
Другое
891
Kali Linux WSL может быть установлен только на диск C. В некоторых ситуациях это может быть затруднительно. Далее я покажу, как перенести Kali Linux на другой раздел диска.
Еще по теме: Брутфорс SSH с помощью Metasploit на Kali Linux
Установка Kali Linux с помощью подсистемы Windows WSL
Если вы решите установить Kali Linux с помощью подсистемы Windows для Linux WSL, система автоматически установит ОС на диск C, но не каждый комп имеет большой объем памяти на диске C.
На пример, мой компьютер, который я решил использовать для этой цели, имеет только один SSD-диск размером 512гб, где раздел C намного меньше раздела D. Поэтому я задумался о переносе Kali Linux Windows WSL на диск D. Теперь, зная как это сделать, я хочу поделиться с вами.
Как перенести Kali Linux Windows WSL на другой диск
Шаги по переносу Kali Linux с диска C на другой диск:
Шаг 1: Сначала установите Kali Linux с помощью магазина Windows (см. также Установка Kali Linux в Windows под WSL).
Шаг 2: Открываем редактор реестра Windows, нажав на сочетание клавиш «Win + R» и команду
regedit. Найдите ветку:
HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionLxss |
Шаг 3: Откройте ветку Lxss. Кликните правой кнопкой мыши на параметре
BasePath и выберите «Изменить», затем скопируйте путь в буфер обмена. Это местоположение файла Kali Linux.
Шаг 4: Перейдите в папку с образом жесткого диска ext4. Переместите файл в другой раздел диска. Я перенес его на диск D и поместил в созданную мною папку «Kali-WSL».
Шаг 5: Вернитесь в редактор реестра и измените местоположение файла образа ext4 в параметре BasePath.
Теперь попробуйте открыть Kali Linux WSL, и если вы правильно сделали, проблем с запуском Kali Linux с другого раздела диска не возникнет.
Кстати, вы также можете периодически копировать образ ext4 в качестве резервной копии Kali Linux.
Еще по теме:
- Как изменить обои экрана блокировки Kali Linux
- Хакерский телефон с помощью Termux и Kali Linux
ВКонтакте
OK
Telegram
Viber
Я только что обновил Windows 10 на своем ноутбуке до Redstone 1. Итак, я провел тест подсистемы Linux (также известной как WSL, LXSS или Bash в Windows). В принципе, все в порядке, но есть проблема в том, что корневая файловая система WSL находится в пути %LocalAppData%
(например, C:UsersxyzAppDataLocal
), где также находится моя ОС Windows. Он занимает много места на жестком диске SSD в моем ноутбуке, и я надеюсь, что смогу переместить его на внешний жесткий диск.
Есть еще одна проблема. Поскольку другие разделы жесткого диска смонтированы как DriveFS, он не поддерживает некоторые функции файловой системы Linux, такие как chmod
, а некоторые из моих сценариев сборки проекта Linux работают только в VoIFS, который находится только в /
и { {X2}}.
Поэтому я попытался переместить всю WSL RootFS на другой жесткий диск. Сначала я попытался создать NTFS Junction (жесткую ссылку) для C:UsersxyzAppDataLocallxss
. Я полностью удалил WSL и запустил mklink
для RootFS на другом жестком диске, и когда я снова переустанавливаю WSL, он не может создать нового пользователя и сообщает об ошибке с кодом 0x80070003.
Затем я поискал и получил следующее: перемещение файловой системы Linux — проблема № 449. Похоже, что перемещение и создание жесткой ссылки для WSL RootFS работает только до Windows 10 Build 14388, оно не работает в Windows 10 Build 14393 RTM. Единственный способ — переместить всю %LocalAppData%
на внешний жесткий диск, но я не могу этого сделать, так как я пользователь ноутбука и не могу везде носить с собой внешний жесткий диск!
Итак, я хотел бы спросить, есть ли другие способы переместить WSL из моего системного раздела? Если я не могу этого сделать, могу ли я создать дополнительный рабочий каталог VoIFS в некоторых других местах и скомпилировать свой материал?
Спасибо и привет, Джексон
2 ответа
Лучший ответ
Если вы используете Windows 10 версии 1903 (обновление от апреля 2019 г.) или более поздней версии, вы можете попробовать инструмент командной строки WSL с параметры export
и import
. Если вы используете старую версию Windows 10, вы можете переместить дистрибутив на другой диск с помощью lxRunOffline.
Использование инструмента командной строки WSL
В Windows 10 версии 1903 (обновление за апрель 2019 г.) или более поздней версии вы можете использовать инструмент командной строки wsl.exe
.
1. Экспортируйте дистрибутив. Создайте файл .tar
с дистрибутивом для перемещения с помощью wsl.exe --export
wsl.exe --export <DistributionName> <Tar-FileName>
Например, чтобы экспортировать дистрибутив Ubuntu
, вы можете использовать
C:> wsl.exe --export Ubuntu c:dataubuntu.tar
2. Импортируйте дистрибутив в целевую папку. Затем вы можете импортировать экспортированный дистрибутив в другую папку.
wsl.exe --import <DistributionName> <Folder-To-Install> <Tar-FileName>
Например, чтобы импортировать экспортированный Ubuntu
в новый дистрибутив UbuntuCustom
, вы можете использовать
C:> wsl.exe --import UbuntuCustom d:wslUbuntuCustom c:dataubuntu.tar
ПРИМЕЧАНИЕ. Вы можете проверить скрипт для перемещения дистрибутивов WSL, использующих эти команды, по адресу https: //github.com/pxlrbt/move-wsl
Использование LxRunOffline
В любой версии Windows 10 вы можете переместить дистрибутив на другой диск с помощью lxRunOffline.
1. Установите разрешения для целевой папки. Во-первых, я думаю, вы должны установить некоторые разрешения для папки, в которую будет перемещен дистрибутив. Вы можете использовать icacls <dir> /grant "<user>:(OI)(CI)(F)"
для установки необходимых разрешений.
C:> whoami
testjaime
C:> icacls D:wsl /grant "jaime:(OI)(CI)(F)"
ПРИМЕЧАНИЕ. В дополнение к указанным выше разрешениям я активировал длинные имена путей в Windows.
2. Переместите распространение. Используя lxrunoffline move
.
C:wsl> lxrunoffline move -n Ubuntu-18.04 -d d:wslinstalledUbuntu-18.04
Вы можете проверить папку установки, используя
C:wsl> lxrunoffline get-dir -n Ubuntu-18.04
d:wslinstalledUbuntu-18.04
3. Запустите распространение. после перемещения распределения вы можете запустить распространение с помощью wsl
или того же lxrunoffline
C:wsl> lxrunoffline run -n Ubuntu-18.04 -w
user@test:~$ exit
logout
C:wsl> wsl
user@test:/mnt/c/wsl$ exit
logout
102
Jaime
30 Мар 2020 в 02:11
WSL (в настоящее время) не поддерживает перемещение или установку дистрибутива на несистемные диски. Однако это сценарий, который мы изучаем в будущих выпусках Windows.
Обратите внимание, что, начиная с Fall Creators Update (FCU), дистрибутивы теперь устанавливаются через магазин Windows, загружаются и расширяются в разные папки (то есть не в% localappdata% lxss).
ПРИМЕЧАНИЕ. Пока мы работаем над улучшением этого сценария в будущих выпусках Windows, пожалуйста, НЕ вставляйте в папки дистрибутива из Windows или приложений Windows: https://blogs.msdn.microsoft. com / commandline / 2016/11/17 / do-not-change-linux-files-using-windows-apps-and-tools /
8
Rich Turner
24 Окт 2017 в 20:31