WSL в Windows: перенос на другой диск

Подсистема 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 файла с помощью командлета Optimize-VHD (из PowerShell модуля Hyper-V ). Иногда этого бывает достаточно:

optimize-vhd -Path <PATH_TO_VHD> -Mode full

Путь к 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

admin

Share
Published by
admin

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

2 месяца ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

2 месяца ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

2 месяца ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

2 месяца ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

2 месяца ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

2 месяца ago