WSL 发行版迁移与目录统一管理指南
适用场景:将散落在不同路径(如 C 盘默认目录、D 盘根目录)的 WSL 发行版统一迁移到指定父目录下的独立子目录中,便于备份、管理和空间监控。
一、前置检查
1.1 查看当前所有发行版状态
wsl --list --verbose
预期输出示例:
NAME STATE VERSION
docker-desktop Stopped 2
{Distro-Name-A} Running 2
* {Distro-Name-B} Stopped 2
注意:如果目标发行版状态为
Running,必须先停止后再操作。
1.2 查看实际存储路径
Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" `
| Get-ItemProperty `
| Select-Object DistributionName, BasePath
预期输出示例:
DistributionName BasePath
---------------- --------
docker-desktop \\?\C:\Users\{UserName}\AppData\Local\Docker\wsl\main
{Distro-Name-A} D:\
{Distro-Name-B} D:\WSL\{Distro-Name-B}
说明:
{Distro-Name-A}的文件直接散落在D:\根目录,需要迁移到子目录中统一管理。
二、迁移步骤
2.1 停止目标发行版
wsl -t {Distro-Name-A}
2.2 导出为 tar 备份
wsl --export {Distro-Name-A} D:\{Distro-Name-A}-backup.tar
参数说明:
{Distro-Name-A}:要迁移的发行版名称D:\{Distro-Name-A}-backup.tar:备份文件存放路径,建议放在非目标目录的临时位置
2.3 注销旧实例(⚠️ 危险操作)
wsl --unregister {Distro-Name-A}
警告:此操作会永久删除该发行版的原始虚拟磁盘(
ext4.vhdx)和注册表信息。务必确认 2.2 导出成功 且备份文件存在后再执行。
2.4 创建统一管理的子目录并重新导入
# 创建目标子目录
mkdir D:\WSL\{Distro-Name-A}
# 导入到新位置
wsl --import {Distro-Name-A} D:\WSL\{Distro-Name-A} D:\{Distro-Name-A}-backup.tar --version 2
参数说明:
--version 2:强制使用 WSL 2 后端(推荐)D:\WSL\{Distro-Name-A}:新的统一父目录下的子目录
2.5 验证迁移结果
# 查看发行版列表
wsl --list --verbose
# 查看存储路径是否已变更
Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" `
| Get-ItemProperty `
| Select-Object DistributionName, BasePath
预期输出:
DistributionName BasePath
---------------- --------
docker-desktop \\?\C:\Users\{UserName}\AppData\Local\Docker\wsl\main
{Distro-Name-A} D:\WSL\{Distro-Name-A}
{Distro-Name-B} D:\WSL\{Distro-Name-B}
2.6 清理临时备份文件
确认发行版能正常启动且数据完整后,删除备份:
Remove-Item D:\{Distro-Name-A}-backup.tar
三、迁移后的目录结构
D:\WSL\
├── {Distro-Name-A}\
│ └── ext4.vhdx
├── {Distro-Name-B}\
│ ├── ext4.vhdx
│ └── ...
└── (其他发行版)
所有发行版均位于
D:\WSL\下的独立子目录中,物理磁盘文件(ext4.vhdx)互不干扰,便于单独备份、压缩或迁移。
四、可选:恢复默认登录用户
通过 wsl --import 导入的发行版默认以 root 身份登录。若之前设置了普通用户,需重新指定:
{Distro-Name-A} config --default-user {UserName}
验证:
wsl -d {Distro-Name-A}
whoami
# 预期输出:{UserName}
五、重要注意事项
5.1 不建议迁移 docker-desktop
| 发行版 | 是否建议迁移 | 原因 |
|---|---|---|
| 自定义发行版(如 Ubuntu、Debian) | ✅ 可以 | 通过 wsl --export/import 完全可控 |
docker-desktop |
❌ 不建议 | 由 Docker Desktop 管理,迁移后可能导致容器、镜像丢失,或 Docker Desktop 无法识别路径 |
若
docker-desktop占用 C 盘空间过大,应在 Docker Desktop 设置 → Resources → WSL Integration 中调整磁盘位置,而非手动wsl --import。
5.2 磁盘空间预留
- 导出前确保目标盘有 发行版当前占用空间 × 2 的剩余空间(一份原文件 + 一份 tar 备份)
- 导入完成后,WSL 会自动将
ext4.vhdx精简为实际使用大小,但备份期间需要双倍空间
5.3 备份文件完整性
导出后建议校验文件大小,避免导出失败:
Get-Item D:\{Distro-Name-A}-backup.tar | Select-Object Length
正常应为 数百 MB 到数十 GB(视发行版数据量而定)。若只有几百字节,说明导出失败,需检查网络或磁盘权限。
六、快速命令速查表
| 目的 | 命令 |
|---|---|
| 停止发行版 | wsl -t {Distro-Name} |
| 导出备份 | wsl --export {Distro-Name} D:\backup.tar |
| 注销旧实例 | wsl --unregister {Distro-Name} |
| 导入到新目录 | wsl --import {Distro-Name} D:\WSL\{Distro-Name} D:\backup.tar --version 2 |
| 设置默认用户 | {Distro-Name} config --default-user {UserName} |
| 查看存储路径 | Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Get-ItemProperty | Select-Object DistributionName, BasePath` |
七、常见问题
Q1:迁移后启动报错 Error: 0x80040326
原因:ext4.vhdx 文件损坏或导出不完整。
解决:重新执行导出 → 注销 → 导入流程,确保导出过程中发行版处于 Stopped 状态。
Q2:迁移后找不到之前安装的软件或数据
原因:wsl --export 导出的是完整文件系统,数据不会丢失。若缺失,可能是导入了错误的 tar 包。
解决:检查 wsl --list 中是否存在同名旧实例,或从备份 tar 重新导入。
Q3:能否直接剪切 ext4.vhdx 到新目录?
不推荐。WSL 通过注册表记录 BasePath,直接剪切文件会导致注册表路径与实际文件位置不一致,启动时报错。必须通过 wsl --export/import 流程操作。

浙公网安备 33010602011771号