Windows subsystem for Linux 2 (WSL2)
Set up Windows subsystem for Linux 2 (WSL2) for Linux development experience in Windows 10 and 11.
Instal WSL2
Open powershell with administrator privilege, run the following command in the host. This will install Ubuntu by default. Reboot after completion.
wsl --installWSL2 post-install (optional) setup
Backup the virtual disk
To pack the virtual disk of the WSL system.
wsl --export Ubuntu .\Ubuntu\ext4.tarTo move the WSL virtual disk file to another disk (in this example, D:\), run the following commands in Windows 1 2:
wsl --export Ubuntu .\Ubuntu\ext4.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\Ubuntu\ .\Ubuntu\ext4.tarSet default login user
Edit /etc/wsl.conf in the WSL. You may need to set the default user if you have moved the virtual disk file of the WSL distribution.
[user]
default=usernameHost settings for WSL
Edit .wslconfig 3 in your Windows home directory (%USERPROFILE%).
For example,
[wsl2]
memory=20GB # How much memory to assign to the WSL2 VM.
swap=8GB # How much swap space to add to the WSL2 VM. 0 for no swap file.
swapfile=C:\\temp\\wsl-swap.vhdx # Sets swap file path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx. Useful if your C drive has limited disk space.Auto reclaim RAM and disk space
Edit .wslconfig 3 in your Windows home directory (%USERPROFILE%). 4
[experimental]
autoMemoryReclaim=dropCache # Reclaim RAM usage
sparseVhd=true # Reclaim virtual disk (vhd) usageMaintenance
Update kernel
To (manually) update the WSL kernel, run the following commands with administrator privileges:
wsl --shutdown
wsl --updateReclaim virtual disk space
Optimize-VHD
Note
Optimize-VHD command is not available in Windows Home edition.
To reclaim disk space from virtual hard disks (VHDs), run the following commands with administrator privileges 5:
wsl --shutdown
Optimize-VHD -Path <path-to.vhdx> -Mode FullExport and re-import
Alternatively, export the VHD as a tar file and reimport it again.
Caveats about WSL2
Poor filesystem performance across OSes
Cross-OS file access (e.g., accessing /mnt/c in WSL) is more than one order of magnitude (10x) slower than accessing natively (e.g., /home/user/).
https://learn.microsoft.com/zh-tw/windows/wsl/basic-commands#import-and-export-a-distribution ↩︎
https://learn.microsoft.com/zh-tw/windows/wsl/wsl-config ↩︎ ↩︎
https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/ ↩︎
https://blog.miniasp.com/post/2023/05/14/Shrink-your-WSL2-Virtual-Disks-and-Docker-Images-and-Reclaim-Disk-Space ↩︎