Подсистема 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%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
Чтобы получить размер файла с помощью PowerShell, выполните:
$path= $env:USERPROFILE+ ”\AppData\Local\Packages\” + (Get-AppxPackage -Name "*Ubuntu20*").PackageFamilyName + “\LocalState\ext4.vhdx”
Get-ChildItem -Path $path | fl @{Label="SizeGb"; Expression={$_.Length / 1Gb}}
Путь к VHD файлу данного дистрибутива WSL хранится в параметре BasePath ветки реестра
HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{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:\backup\ubuntu.tar
Дождитесь окончания экспорта WSL (может занять длительное время). В целевом каталоге появится TAR архив с вашей средой WSL.
Теперь можно удалить файлы среды WSL на исходном диске:
wsl --unregister Ubuntu-20.04
Создайте каталог для вашего образа Linux на новом диске и импортируйте tar архив в WSL командой:
mkdir E:\WSL
wsl --import Ubuntu-20.04 E:\WSL\ E:\backup\ubuntu.tar
Для входа в Ubuntu по умолчанию используется root. Чтобы сменить его на другое имя пользователя (мы получили его ранее), выполните:
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps
.\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:\wsl2\Ubuntu-20.04
После окончания переноса, запустите дистрибутив WSL. Командой:
wsl -d Ubuntu-20.04
или
lxrunoffline run -n Ubuntu-20.04 -w
Language: [🇪🇸] Español — [🇺🇸] English
If the C:
drive is running out of space or do you like to have your files on a different disk than your Operating System, we can move our WSL2 file system to another drive in a few steps.
Prerequisites
If we are using a username different than root
, we need to know it running the command (WSL side):
# Linux Terminal
whoami
Enter fullscreen mode
Exit fullscreen mode
Also, we need to know the distro name and WSL version, running the command on PowerShell (Windows side):
#PowerShell
wsl --list --verbose
Enter fullscreen mode
Exit fullscreen mode
Knowing the username: equiman
, the linux distribution: Ubuntu
, and confirming that we are using the WSL 2
version, we are ready to…
Move
All next steps need to be done on PowerShell (Windows side).
First, we need to close all terminals that are using WSL, and then shut it down to avoid data corruption running the command.
# PowerShell
wsl --shutdown
Enter fullscreen mode
Exit fullscreen mode
Next, we are going to create a backup from our Ubuntu
linux distribution.
# PowerShell
mkdir D:\backup
wsl --export Ubuntu D:\backup\ubuntu.tar
Enter fullscreen mode
Exit fullscreen mode
Don’t worry if you do not see progress indicators. This can take a while depending on how much data you have. Maybe it’s a good idea to take a rest.
When finished, first of all, and more important ensure that the D:\backup\ubuntu.tar
file exists. Then we need to unregister the linux distribution from the C:
drive. It will also release the disk space taken by WSL.
⚠️ Beware that everything that was stored on the WSL drive will be lost, and the command won’t ask for a confirmation, so make sure you backup everything you need first!
# PowerShell
wsl --unregister Ubuntu
Enter fullscreen mode
Exit fullscreen mode
And then, import it again on our new disk. I’ll use the D:
disk as an example.
# PowerShell
mkdir D:\WSL
wsl --import Ubuntu D:\WSL\ D:\backup\ubuntu.tar
Enter fullscreen mode
Exit fullscreen mode
Use the
"
(double-quote) character to surround the paths if they have blank spaces
By default Ubuntu will use root
as the default user, to switch to our user we need to run these commands.
# PowerShell
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps
ubuntu config --default-user equiman
Enter fullscreen mode
Exit fullscreen mode
Ensure replacing
equiman
with yours.
Restart WSL by running the command:
# PowerShell
wsl --distribution Ubuntu
Enter fullscreen mode
Exit fullscreen mode
Recover
If something goes wrong in the process, don’t worry, we can restore our WSL disk from the backup.
Didn’t You skip the backup step? right?
Just repeat the steps after backup.
That’s All Folks!
Happy Coding 🖖
В 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 и размещена в рубрике Программирование.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Как смонтировать папку из WSL образа
Июль 21, 2023 г.
В WSL обычно уже смонтированы все диски системы в папке /mnt, и вы легко получаете нужные файлы из родительской системы windows, хотелось бы иметь и обратную возможность. Рассмотрим как выполнить монтирование файлов wsl в файловую систему windows.
…
Читать
If you are using Windows 10 version 1903 (April 2019 Update) or later, you can try the WSL command line tool with the export
and import
options. If you are using an older Windows 10 version, you can move the distribution to another drive using lxRunOffline.
Using the WSL command line tool
In Windows 10 version 1903 (April 2019 Update) or later, you can use the wsl.exe
command line tool.
1. Export the distribution. Create a .tar
file with the distribution to move using wsl.exe --export
wsl.exe --export <DistributionName> <Tar-FileName>
For instance, to export an Ubuntu
distribution, you can use
C:\> wsl.exe --export Ubuntu c:\data\ubuntu.tar
2. Import the distribution into the target folder. Then, you can import the exported distribution into another folder
wsl.exe --import <DistributionName> <Folder-To-Install> <Tar-FileName>
For instance, to import the exported Ubuntu
into a new UbuntuCustom
distribution, you can use
C:\> wsl.exe --import UbuntuCustom d:\wsl\UbuntuCustom c:\data\ubuntu.tar
NOTE: You may check an script for moving WSL distros that use these commands at https://github.com/pxlrbt/move-wsl
3. Delete old installation (optional)
wsl.exe --unregister <OriginalDistributionName>
4. Set up the default user
Edit /etc/wsl.conf
and add:
[user]
default = <your username>
5. Run new distribution
wsl.exe -d <NewDistributionName>
Using LxRunOffline
In any Windows 10 version, you can move the distribution to another drive using lxRunOffline.
1. Set permissions to the target folder. First, I think you must set some permissions to the folder where the distribution will be moved. You may use icacls <dir> /grant "<user>:(OI)(CI)(F)"
to set the proper permissions.
C:\> whoami
test\jaime
C:\> icacls D:\wsl /grant "jaime:(OI)(CI)(F)"
NOTE: In addition to the above permissions, I have activated the long path names in Windows.
2. Move the distribution. Using lxrunoffline move
.
C:\wsl> lxrunoffline move -n Ubuntu-18.04 -d d:\wsl\installed\Ubuntu-18.04
You may check the installation folder using
C:\wsl> lxrunoffline get-dir -n Ubuntu-18.04
d:\wsl\installed\Ubuntu-18.04
3. Run the distribution. after moving the distribution, you can run the distribution using wsl
or the same lxrunoffline
C:\wsl> lxrunoffline run -n Ubuntu-18.04 -w
user@test:~$ exit
logout
C:\wsl> wsl
user@test:/mnt/c/wsl$ exit
logout
Scenario
WSL is a great stuff! 😍 But sometimes, it may take up too much space in C drive, especially its ext4
file system. So in this article, I’d like to show how to move it to another drive so as to release drive storage pressure.
Reference: https://woshub.com/move-wsl-another-drive-windows/
Procedures
Step 1. Preparation
First, you should make sure you know your username and password of WSL. If not, just open it, and use whoami
command to find it out. Then, your WSL should be shutdown. In PowerShell, run the following command to make sure your WSL is down.
1 |
wsl --list --verbose |
If the output is like , it means your WSL is down. If not, run wsl --shutdown
to … shut it down. 😌
Notice: Here, remember the name of your distribution.
Then, create some directories. For example, here, I created Backup\
for intermediate file backup, and Storage\
for the final location.
Step 2. Export WSL File System
Now, it’s time to export WSL to another place. So, open your PowerShell, and execute the following command. Remember to replace the directory with your own.
1 |
wsl --export Ubuntu-20.04 E:\IDE\WSL\Backup\ubuntu.tar |
If everything goes well, you will see this.
Step 3. Import WSL File System
Before your import stuffs, there are few steps to go. First, you got to unregister your WSL temporarily.
1 |
wsl --unregister Ubuntu-20.04 |
And you will see the following output.
Then, you can start import. Remember the directory we created before? Will place our file system there.
1 |
|
And you will se this.
Step 4. Finishing up
Now, finally, we got to set up our WSL again. There won’t be any output on success.
1 |
cd $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps |
Notice: If you’re using Ubuntu 20.04, the executable file should be
ubuntu2004.exe
. Otherwise, please usels
command to check it by yourself.
Ta-da!🎉 Now you can run WSL again!
Easy, huh?