Exporting and Importing WSL Linux Distributions on Windows 10
Joe • July 12, 2020
learning linux windows wslI've recently spent a lot of dedicated time exploring Windows 10 as a development environment. The best part of this process has been becoming familiar with Windows Subsystem for Linux, or WSL. With WSL 2.0 Microsoft is shipping a complete Linux kernel with Windows 10. Getting started with WSL is a few steps through the Windows Features menu to ensure you have enabled WSL services, then into the Microsoft store to download and install a distribution such as Ubuntu 20.04. If you're familiar with web development on macOS you're likely familiar with installing Homebrew to install command-line tools. Think of WSL as that Homebrew layer but instead of installing macOS binaries you're installing and running Linux binaries alongside Windows.
Once you have started configuring your WSL environment you can use the Powershell CLI to list the distributions you currently have via wsl -l
(also wsl.exe -l
):
PS C:\Users\halo\Code> wsl -l
Windows Subsystem for Linux Distributions:
docker-desktop-data (Default)
docker-desktop
Ubuntu-20.04
PS C:\Users\halo\Code>
You can see Ubuntu-20.04
alongside two other distributions that come from Docker Desktop on Windows. Since this existing distro is already customized I want to export it so I can reimport it later. Think of this export as a snapshot of the system or an image of a running virtual machine. To export our distro we'll use the --export
flag and provide a distribution name and a filename to use:
wsl --export Ubuntu-20.04 Ubuntu-20.04-07-12-20.tar
winrar a -afzip Ubuntu-20.04-07-12-20.tar.zip Ubuntu-20.04-07-12-20.tar
PS C:\Users\halo\Code>
Note: You may be able to run Compress-Archive -Path DISTRO.tar -DestinationPath DISTRO.tar.zip
, however if your WSL export is over 2GB uncompressed (like mine is): this Stack Overflow article explains the issue. This is why I'm using winrar
CLI to compress the file to a zip file.
We can check on our compression via dir
:
PS C:\Users\halo\Code> dir
Directory: C:\Users\halo\Code
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 7/12/2020 11:50 3522938880 Ubuntu-20.04-07-12-20.tar
-a---- 7/12/2020 12:28 1565740517 Ubuntu-20.04-07-12-20.tar.zip
Normally you won't need to compress this archive unless you want to keep it around for long term storage and backups. You can safely skip this step if you'd like.
Now we're ready to remove our Ubuntu-20.04 distribution. If you have compressed your distro's tar file go ahead and uncompress is os we can import it via the WSL CLI.
wsl --unregister Ubuntu-20.04
Unregistering...
PS C:\Users\halo\Code> wsl -l
Windows Subsystem for Linux Distributions:
docker-desktop-data (Default)
docker-desktop
PS C:\Users\halo\Code>
Now our Ubuntu-20.04 distribution has been removed. If you want to install a clean copy of the Ubuntu 20.04 you can install and launch it from the Microsoft Store
To reimport our previously configured distribution we won't need the Microsoft store. We'll reimport the distro via the WSL command in PowerShell:
wsl.exe --import Ubuntu-20.04 C:\Users\halo\wsl\Ubuntu-20.04 Ubuntu-20.04-07-12-20.tar
PS C:\Users\halo> ubuntu2004.exe config --default-user halo
PS C:\Users\halo> wsl.exe --list
Windows Subsystem for Linux Distributions:
docker-desktop-data (Default)
docker-desktop
Ubuntu-20.04
PS C:\Users\halo>
The install location parameter is where the virtual hard drive or ext4.vhdx
is stored. I'm keeping mine in C:\Users\halo\wsl\<DISTRO>
.
PS C:\Users\halo\Code> wsl -l
Windows Subsystem for Linux Distributions:
docker-desktop-data (Default)
docker-desktop
Ubuntu-20.04
You'll note that we also ran the command ubuntu2004.exe config --default-user halo
to set our default user to halo
, if you skip this step you'll be logged into root when opening the WSL distro or running WSL commands.
The last thing we should do is set our renamed distro to the default WSL:
PS C:\Users\halo> wsl --set-default Ubuntu-20.04
PS C:\Users\halo>
Now when we run wsl bash ...
commands Windows will use the Ubuntu-20.04 distro by default.
Happy Linuxing on Windows 10!
As Seen On
Recent Posts
- PHP to Rust via Copilot
- Compiling Python 3.12 from Source Tarball on Linux
- HTML Form Processing with PHP - php[architect] Magazine August 2014
- The Workshop: Local Dev with Lando - php[architect] Magazine November 2022
- Getting back into the swing of things
- All Posts
Categories
- ansible
- apache
- applesilicon
- aws
- blackwidow
- cakephp
- community
- composer
- conferences
- copilot
- data-storage
- day-job
- devops
- docker
- fpv
- general
- github
- givecamp
- homestead
- jigsaw
- joindin
- keyboard
- laravel
- learning
- linux
- maker
- mamp
- mentoring
- music
- nonprofit
- opensource
- packages
- php
- phparch
- projects
- provisioning
- python
- razer
- rust
- s3
- security
- slimphp
- speaking
- static-sites
- storage
- testing
- tiny-whoop
- today-i-learned
- training
- ubuntu
- vagrant
- version-control
- windows
- writing
- wsl
- wsl2
- zend-zray