1. 释放 C 盘空间:将 WSL 迁移到其他盘
WSL 默认安装在 C 盘。随着你安装 Java 环境、依赖包以及大型 AI 模型,它会生成一个巨大的 .vhdx 虚拟磁盘文件。如果你的 C 盘吃紧,可以将其整体搬迁到非系统盘(如 D 盘)。
迁移步骤(以迁移到 D:\WSL 为例):
bash
关闭 WSL:
wsl --shutdown
导出当前的子系统(文件夹需要提前手动创建哦):
wsl --export Ubuntu D:\wsl_export\ubuntu.tar (注意:Ubuntu 是你的发行版名称)
注销旧的子系统(这会删除 C 盘的数据):
wsl --unregister Ubuntu
重新导入到新位置:
wsl --import Ubuntu D:\WSL\ D:\wsl_export\ubuntu.tar
这个操作完 C盘从之前的47G,导出时变为36G,注销后变成60G了。
2. 整理完的操作
wsl: 使用镜像网络模式时,wsl2.localhostForwarding 设置无效,这其实是一个配置冲突的提示,而不是报错。
- 为什么会出现这个提示?
这是因为你在 .wslconfig 文件中同时开启了两个功能:
networkingMode=mirrored(镜像网络模式):这是 WSL2 较新的高级模式,让 WSL 直接使用 Windows 的网络栈。
localhostForwarding=true:这是旧版默认网络模式下的配置,用于将 Linux 端口映射到 Windows。
在"镜像模式"下,Linux 和 Windows 共享 IP,localhost 本身就是互通的,所以旧的转发设置就变得多余且冲突了。
- 如何优化你的 .wslconfig
为了消除警告并确保网络稳定,建议你按以下步骤调整配置文件:
在 Windows 中按下 Win + R,输入 %UserProfile% 并回车。
找到或创建 .wslconfig 文件,用记事本打开。
推荐配置如下(针对 Java 开发优化):
bash
Ini, TOML
[wsl2]
# 既然你想用镜像模式,就保持这个
networkingMode=mirrored
# 移除或注释掉 localhostForwarding,因为它在镜像模式下无效
# localhostForwarding=true
# 推荐开启以下镜像模式配套功能
# 允许 WSL 里的服务监听 Windows 上的所有 IP
hostAddressLoopback=true
# 自动同步代理设置(如果你开发需要科学上网,这个非常有用)
autoProxy=true
[experimental]
# 自动回收空闲内存,这对 16G 内存的机器非常友好
autoMemoryReclaim=gradual
# 允许在 Windows 上直接访问 WSL 的服务
sparseVhd=true
保存文件后,在 PowerShell 中执行 wsl --shutdown 重启生效。
- 镜像模式(Mirrored)的优势
作为一个 Java 开发者,开启 mirrored 模式后你会发现:
本地调试更简单: 你在 WSL 里启动一个 Spring Boot 项目(8080端口),直接在 Windows 浏览器输入 localhost:8080 就能访问,不需要处理复杂的 IP 转换。
VPN 支持更强: 以前 Windows 开了代理,WSL 经常上不了网,镜像模式下它们共用网络环境,兼容性好得多。
- 核心大招:压缩 VHDX 磁盘 (Shrink)
这是最关键的一步。WSL2 的磁盘文件(包括 Ubuntu 和 Docker)有个特性:它像气球,吹大容易,放气难。 即使你在 Docker 里删除了 20GB 的镜像,Windows 上的 .vhdx 文件大小依然不会变。
你需要手动"脱水":
彻底关闭所有 WSL 实例:
在 PowerShell 执行:wsl --shutdown
进入磁盘管理工具:
输入 diskpart 并回车。
在弹出的窗口中依次输入:
bash
# 这里的路径换成你 E 盘中 docker-desktop-data 的那个 vhdx 路径
select vdisk file="E:\Docker\data\ext4.vhdx"
# 以只读方式挂载
attach vdisk readonly
# 开始压缩(这一步可能需要几分钟,取决于文件大小)
compact vdisk
# 卸载
detach vdisk
exit
效果立竿见影。
- 迁移后的"后遗症"检查
既然你刚迁移完,别忘了检查这个关键点:
默认用户检查: 如果你发现进去变成了 root 用户(看不到你之前的代码文件夹了),请在 Ubuntu 终端执行:
bash
sudo nano /etc/wsl.conf
加入以下内容:
Ini, TOML
[user]
default=你的用户名
然后重启 WSL 即可找回你的身份。
3. 压缩虚拟磁盘空间 (瘦身)
WSL 的磁盘文件(ext4.vhdx)有一个特性:只会增大,不会自动缩小。即使你在 Linux 里删除了文件,Windows 上的磁盘占用也不会释放。
如果你最近删除了很多东西,可以手动压缩:
关闭 WSL:wsl --shutdown
搜索并运行 Windows 自带的 diskpart 工具。
按顺序输入以下命令:
select vdisk file="C:\Users\你的用户名\AppData\Local\Packages...\ext4.vhdx" (具体路径可以在资源管理器搜 ext4.vhdx)
attach vdisk readonly
compact vdisk
detach vdisk
4. 日常清理建议
作为一个开发者,你可能产生了不少缓存,可以运行以下命令释放一些零散空间:
清理 Docker 缓存 (如果你在用):docker system prune -a
清理 Linux 包管理缓存: sudo apt clean
清理 Maven 仓库: 检查 ~/.m2/repository 是否堆积了过期的依赖。