Original from https://blog.iany.me/2020/06/move-wsl-to-another-drive/.
I thought the article is absolutely wonderful, so I reprinted it (and translated it into Chinese). This article just saved my system disk, thank the original author Ian Yang~

下面这个例子会手把手带领你安装一个 Ubuntu 虚拟机,并将它的存储位置迁移到 D:\WSL\Ubuntu.

第一步 安装 Ubuntu 虚拟机

这一步是可选的,因为您也许已经安装过虚拟机了。

在 Microsoft Store 中安装 Ubuntu。启动它以初始化默认实例。根据提示创建Ubuntu中使用的用户。

第二步 将虚拟机迁移到指定位置

使用如下命令导出实例并导入目标目录:

1
2
3
4
5
6
7
cd D:\
mkdir WSL
cd WSL
wsl --export Ubuntu ubuntu.tar
wsl --unregister Ubuntu
mkdir Ubuntu
wsl --import Ubuntu Ubuntu ubuntu.tar

注意:这些命令同时也会取消注册 Ubuntu 为默认虚拟机。

让我们来看看这些命令的含义吧:

  • wsl --export Ubuntu ubuntu.tar: 将名为 Ubuntu 的 WSL 实例导出到当前目录下的 ubuntu.tar 文件中,所以你会得到文件 D:\WSL\ubuntu.tar.
  • wsl --unregister Ubuntu: 取消注册名为 Ubuntu 的 WSL 实例。
  • wsl --import Ubuntu Ubuntu ubuntu.tar: 第一个 Ubuntu 指的是新创建的实例名称,第二个 Ubuntu 是实例保存位置。最后一个参数传入由wsl --export导出的文件路径。这将导入ubuntu.tar文件并使用D:\WSL\Ubuntu路径来保存该 WSL 的数据。

哦对了,此时您可以安全的卸载从 MS Store 里安装的虚拟机了。

第三步 重新用回初始用户

在导出导入这番折腾后,新实例默认使用root。

您也许想继续使用在第 1 步中注册的那个用户,这可以通过注册表进行配置。

在注册表中跳转到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss 路径,找到 DistributionName为“Ubuntu”的一项,将DefaultUid这一项设置为 1000(十进制) 或者 3e8(十六进制)。

第四步 迁移到 WSL2

使用 wsl -l -v 检查新创建的实例是否使用 WSL2。使用 wsl --set-version Ubuntu 2 指令将名为 Ubuntu 的实例升级到版本 2。

第五步 试试 wsl

wsl -d Ubuntu

另一种解决方案是使用 ♯LxRunOffline