WSL 安装到其他盘 / 迁移到其他盘:完整避坑指南

WSL 安装到其他盘 / 迁移到其他盘:完整避坑指南

很多人装完 WSL2 才发现,C盘空间被吃得干干净净。ubuntu2404.tar 动不动就 10GB+,加上后期的开发环境、Docker 镜像,C盘分再多都不够用。

这篇文章讲两件事:

  1. 从零开始在 D/E 盘安装 WSL(不占用 C 盘)
  2. 把已有的 WSL 迁移到其他盘(完整搬家,包含所有数据)

前置要求

确保系统满足以下条件:

  • Windows 10 2004 以上,或 Windows 11
  • 已在「Windows 功能」中开启「适用于 Linux 的 Windows 子系统」和「虚拟机平台」
  • BIOS/UEFI 中已开启 CPU 虚拟化(Intel VT-x / AMD-V)
# 以管理员身份运行 PowerShell,检查是否已开启
dism.exe /online /get-features | findstr "Linux"

如果显示 Microsoft-Windows-Subsystem-LinuxVirtualMachinePlatformEnabled,说明环境就绪。


方法一:从零开始在非系统盘安装 WSL

第一步:下载 Linux 发行版

不要用 wsl --install(默认装到 C 盘),手动下载 tar.gz 镜像:

  1. 打开 WSL手动安装教程
  2. 下载你喜欢的发行版,例如 Ubuntu 24.04 LTS:
  3. 地址:https://cloud-images.ubuntu.com/wsl/
  4. jammy(Ubuntu 22.04)或 noble(Ubuntu 24.04)目录
  5. 下载 .tar.gz 文件(约 300-700MB)

第二步:安装到指定目录

假设下载的镜像是 ubuntu-24.04-server-cloudimg-amd64-wsl.rootfs.tar.gz,放到 D:\WSL\Images\ 目录下:

# 创建 WSL 根目录
New-Item -ItemType Directory -Path D:\WSL\Instances -Force
New-Item -ItemType Directory -Path D:\WSL\Images -Force

# 导入发行版到指定路径
wsl --import Ubuntu-24.04 D:\WSL\Instances\Ubuntu-24.04 D:\WSL\Images\ubuntu-24.04-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

关键参数说明:

参数 含义
Ubuntu-24.04 发行版名称(可自定义)
D:\WSL\Instances\Ubuntu-24.04 发行版的安装目录(这里放所有数据)
D:\WSL\Images\ubuntu-24.04.tar.gz 原始镜像文件路径
--version 2 强制使用 WSL2

导入完成后,WSL 的所有数据都会存储在 D:\WSL\Instances\Ubuntu-24.04\ 下,包括那个会不断膨胀的 ext4.vhdx 虚拟磁盘。

第三步:设置默认用户

导入的发行版默认以 root 登录。如果需要用普通用户:

# 先进入 WSL 设置用户
wsl -d Ubuntu-24.04 -e bash -c "echo 'yourname:yourpassword' | chpasswd && usermod -m -d /home/yourname yourname"

# 或者简单一点,直接用 root,后续创建用户
wsl -d Ubuntu-24.04

推荐创建一个普通用户并设为默认:

# 在 WSL 终端内执行
useradd -m -s /bin/bash yourname
echo "yourname:yourpassword" | chpasswd
echo "yourname ALL=(ALL) ALL" >> /etc/sudoers

# 退出后,在 Windows PowerShell 设置默认用户
ubuntu2404 config --default-user yourname

⚠️ 注意:ubuntu2404 要替换成你导入时用的发行版名称。如果名称含空格,用引号包起来。

第四步:验证安装位置

# 查看所有发行版及安装路径
wsl --list -v

# 进入 WSL 测试
wsl -d Ubuntu-24.04

# 在 WSL 内查看磁盘挂载情况
df -h

确认 ext4.vhdx 在 D 盘:

# Windows 下查看 VHDX 文件位置
Get-ChildItem D:\WSL\Instances\Ubuntu-24.04\ -Recurse -Filter "*.vhdx"

第五步:设置默认发行版

# 把新安装的 WSL 设为默认
wsl --set-default Ubuntu-24.04

# 以后直接输 wsl 就能进入这个版本
wsl

方法二:把已有的 WSL 迁移到其他盘

假设你的 WSL 目前在 C 盘,现在想搬到 D/E 盘。整个过程是:导出 → 删除原版 → 导入到新位置

⚠️ 迁移过程中原 WSL 会暂时不可用,建议先关闭所有 WSL 终端和相关程序。

第一步:查看当前 WSL 状态

# 列出所有发行版
wsl --list -v

# 确认要迁移的发行版名称和当前挂载点
# 假设要迁移的是 "Ubuntu-22.04"

第二步:导出(备份为 tar 文件)

# 创建一个足够大的目录存放备份
New-Item -ItemType Directory -Path D:\WSL\Backup -Force

# 导出发行版(这步比较慢,10-30分钟不等)
wsl --export Ubuntu-22.04 D:\WSL\Backup\Ubuntu-22.04-backup.tar

💡 备份文件会占用和原 VHDX 同等大小的空间,确保目标磁盘有足够空间。

第三步:注销原发行版

# 重要:先确认备份已经完成!
wsl --unregister Ubuntu-22.04

执行后,C 盘上的所有数据会被删除。如果备份文件损坏,这一步是不可逆的。

第四步:导入到新目录

# 导入到 D 盘的新位置
wsl --import Ubuntu-22.04 D:\WSL\Instances\Ubuntu-22.04 D:\WSL\Backup\Ubuntu-22.04-backup.tar --version 2

第五步:重新设置默认用户

和全新安装一样,导入后默认是 root,需要重新设置默认用户:

# 先启动一次确认 root 可用
wsl -d Ubuntu-22.04

# 在 WSL 内创建用户后,PowerShell 设置默认
ubuntu2004 config --default-user yourname

第六步:验证

# 确认 VHDX 在新位置
Get-ChildItem D:\WSL\Instances\Ubuntu-22.04\ -Recurse -Filter "*.vhdx" | Select-Object FullName, Length

# 进入 WSL 测试
wsl -d Ubuntu-22.04

进阶技巧

技巧 1:给 VHDX 磁盘扩容

WSL 的虚拟磁盘默认最大 1TB,但实际初始大小只有几十 GB,会随着使用自动扩展。如果想手动扩容:

# 关闭 WSL
wsl --shutdown

# 使用 diskpart 扩展 VHDX(假设路径是 D:\WSL\Instances\Ubuntu-22.04\ext4.vhdx)
diskpart
select vdisk file="D:\WSL\Instances\Ubuntu-22.04\ext4.vhdx"
attach vdisk
expand vdisk maximum=512000  # 扩展到 512GB(单位是 MB)
detach vdisk
exit

进入 WSL 后还需要扩展文件系统:

sudo resize2fs /dev/sda <size>G
# 或者不指定大小,用满整个空间
sudo resize2fs /dev/sda

技巧 2:多个发行版共享镜像目录

如果你需要安装多个 Ubuntu 版本,可以共用一个镜像目录,每次 wsl --import 时指定不同的实例目录:

# 安装 Ubuntu 22.04
wsl --import Ubuntu-22.04 D:\WSL\Instances\Ubuntu-22.04 D:\WSL\Images\ubuntu-22.04.tar.gz --version 2

# 安装 Ubuntu 24.04(镜像同一个)
wsl --import Ubuntu-24.04 D:\WSL\Instances\Ubuntu-24.04 D:\WSL\Images\ubuntu-24.04.tar.gz --version 2

两个实例完全独立,互不影响。

技巧 3:Windows 资源管理器直接访问 WSL 文件

在文件资源管理器地址栏输入:

\\wsl$\Ubuntu-22.04\home\yourname

就可以像访问普通文件夹一样访问 WSL 内部文件。也可以右键「映射网络驱动器」把它挂载成盘符。

技巧 4:.wslconfig 全局配置

C:\Users\你的用户名\.wslconfig(注意前面有个点)可以设置 WSL 全局参数:

[wsl2]
# 限制 WSL2 使用的内存和 CPU
memory=8GB
processors=4

# 设置交换空间大小
swap=4GB

# 禁用 IPv6(如果不需要)
# ipv6=false

# 限制最大虚拟磁盘大小
# vhd极限size=512GB

修改后需要重启 WSL:

wsl --shutdown
wsl

常见问题

Q:导出时提示「拒绝访问」?

确保所有 WSL 终端已关闭,且没有程序正在访问 WSL 文件。用 wsl --shutdown 完全关闭。

Q:导入后找不到 .ssh 或 .gitconfig 等配置?

迁移是完整复制,/home/yourname/ 下的所有文件都会保留。检查一下是不是 WSL 的默认用户变了导致 home 目录路径不一致。

Q:想同时保留原版和迁移版可以吗?

可以。导出后不要 --unregister,直接 --import 成一个新名字:

wsl --import Ubuntu-22.04-New D:\WSL\Instances\Ubuntu-22.04-New D:\WSL\Backup\Ubuntu-22.04-backup.tar --version 2

Q:wsl –import 报错「已存在」?

说明同名发行版已经存在。换个名字或者先 wsl --unregister 原名 再来。

Q:迁移后 Docker Desktop 里看不到 WSL?

Docker Desktop 2.4+ 自带了 WSL 集成。如果看不到:

# 查看 Docker Desktop 的 WSL 集成
wsl --list -v

# 在 Docker Desktop 设置 → Resources → WSL Integration 里勾选对应发行版

总结

场景 操作
从零安装到 D 盘 下载 tar.gz → wsl --import 指定路径
迁移已有 WSL wsl --export 备份 → wsl --unregister 注销 → wsl --import 到新路径
扩容 VHDX diskpart 扩展虚拟磁盘 + WSL 内 resize2fs
多个发行版 共用镜像目录,分别导入不同实例目录

核心就一条命令:wsl --import。把镜像下载到非系统盘,用这条命令指定安装路径,C 盘就不会再被 WSL 吃掉了。

如果内容对您有帮助,欢迎打赏

您的支持是我继续创作的动力

前往打赏页面

评论区

评论已关闭