WSL - 如何备份与迁移发行版

随着我们日常使用 WSL ,已安装的发行版的虚拟磁盘所占用的空间会日益膨胀。而默认情况下,Windows 系统会将其放置在 C 盘中,这就可能导致 C 盘空间不足的问题。

此外,在我们日常使用 WSL 的过程中,可能需要对已经完成配置的发行版备份,以便向他人分享或在其他设备上快速部署,省去重新配置的时间与精力。

本篇文章将给出上述两个场景的通用应对措施,分为两个部分:

  1. 导出发行版;
  2. 导入发行版。

导出发行版

1. 检查发行版状态

右键开始菜单,打开 终端 ,使用如下命令查看已安装发行版的运行状态,该命令会列出所有已安装发行版的名称、运行状态以及 WSL 版本。

wsl -l -v

查看已安装发行版的运行状态

检查要导出的发行版的运行状态,当且仅当其运行状态为 Stopped 时才能将其导出。

若要导出的发行版的运行状态为 Running ,请先运行如下命令将其关闭。

wsl --terminate <发行版名称>

其中 <发行版名称> 为此前检查发行版运行状态时列出的发行版名称,而非其在开始菜单内的应用名称。运行结束后请重新检查发行版运行状态。

2. 导出压缩包

确保要导出的发行版的运行状态为 Stopped 后,使用如下命令将发行版的虚拟磁盘以压缩包形式导出到指定位置。

wsl --export <发行版名称> <压缩包存放路径>

导出消耗的时间依据发行版虚拟磁盘的大小而定,一般在几分钟内即可完成导出。上述命令执行完毕后,你可以在你指定的存放压缩包的位置找到导出的压缩包,其命名应为 <发行版名称>.tar 。(请确保文件资源管理器已开启显示文件扩展名的功能。)随后,你可以将其拷贝、分发,或着存储到你备份资料的移动硬盘或云盘中。

导入发行版

1. 注销原有发行版

若设备中已安装了相同的发行版,在导入发行版前需将其删除。

注意:此部分仅在迁移发行版时需要实施,如果你并没有在迁移发行版,请直接跳过此部分。

使用如下命令注销发行版。

wsl --unregister <发行版名称>

上述命令执行完毕后,请再次检查已安装发行版状态,确保成功注销原有发行版。

2. 导入压缩包

使用如下命令导入压缩包。

wsl --import <发行版名称> <发行版虚拟磁盘存放路径> <压缩包存放路径> --version 2

其中 --version 2 用于指定 WSL 版本为 WSL2 ,发行版名称可以自定义,但不推荐使用自定义程度很高的名称,推荐保持原有名称。此外,十分建议直接将发行版的虚拟磁盘存放在非 C 盘的其他磁盘中。导入消耗的时间依据发行版虚拟磁盘的大小而定,一般在几分钟内即可完成导入。

3. 设置默认用户

在导入发行版后,该发行版默认以 root 用户登录。

使用如下命令设置默认用户。

<发行版可执行程序名称>.exe config --default-user <用户名>

其中,用户名为导出前登录发行版所用的用户的用户名,一般为安装时创建的用户的用户名;发行版可执行程序名称依据导入发行版时的发行版名称而定,一般为发行版名称去除 -. 的部分 ,下面仅给出部分示例。

若导入的发行版为安同 OS ,导入时的发行版名称为 AOSCOS ,则此处发行版可执行程序名称为 AOSCOS ,此时上述命令可写为:

AOSCOS.exe config --default-user <用户名>

若导入的发行版为 Ubuntu 22.04 ,导入时的发行版名称为 Ubuntu-22.04 ,则此处发行版可执行程序名称为 Ubuntu2204 ,此时上述命令可写为:

Ubuntu2204.exe config --default-user <用户名>

设置完成后,即可正常使用该发行版。