返回列表

WSL2 Ubuntu 深度优化与无损迁移指南

2026-07-20 WSL2 Ubuntu 迁移

在长期使用 WSL2 作为本地开发环境或 AI 试验场时,随着 Docker 镜像和项目依赖的暴增,C 盘空间极易告急。同时,Windows Terminal 的标签管理与默认用户权限也经常需要根据开发习惯进行调整。

本指南提供了一套不破坏现有数据、纯手动挡掌控的“瘦身与净化”三部曲。

🛑 核心前置步骤:关闭 WSL

在进行任何底层迁移或配置修改前,必须确保 WSL 虚拟化引擎完全关闭,否则会导致文件被锁死或数据损坏。

在 Windows 的 PowerShell(注意:是 Windows 侧,不是 Linux 内部)中运行以下命令强行关闭所有实例:

PowerShell

wsl --shutdown

一、 核心减肥:无损迁移 Ubuntu 至 D 盘(或 E 盘)

WSL2 默认将系统安装在 C 盘的隐藏用户文件夹中,随着使用会演变成几十 GB 的巨型虚拟盘文件(ext4.vhdx)。我们通过“导出再导入”的方式,将其安全搬家。

1. 确认当前的 WSL 系统名称

在 Windows PowerShell 中运行以下命令,查看当前注册的系统名字和运行状态:

PowerShell

wsl -l -v

输出示例:

Plaintext

NAME STATE VERSION * Ubuntu Stopped 2

确保状态为 Stopped。这里的名字 Ubuntu 就是我们接下来要操作的目标。

2. 导出(打包)现有系统

找一个空间充足的盘符(以 D:\WSL\Backup 为例),将整个 Ubuntu 打包压缩为一个备份文件:

PowerShell

# 语法:wsl --export <系统名> <备份目标路径\文件名.tar>
wsl --export Ubuntu D:\WSL\Backup\ubuntu-backup.tar

这一步由于要压缩大量数据,可能需要等待数分钟,直到命令行恢复光标。

3. 注销(销毁)C 盘的旧系统

打包完成后,果断释放 C 盘的空间。这行命令会把 C 盘的旧虚拟盘彻底物理删除:

PowerShell

wsl --unregister Ubuntu

4. 导入(接管)到新盘符

创建一个你打算长期存放 Ubuntu 的新文件夹(例如 D:\WSL\Ubuntu),然后将刚才的备份包解压注入到这个新路径:

PowerShell

# 语法:wsl --import <系统名> <新存放路径> <备份文件路径> --version 2
wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL\Backup\ubuntu-backup.tar --version 2

5. 验证与善后

再次运行 wsl -l -v,只要能看到 Ubuntu 重新回到了列表,说明搬家圆满成功!此时,之前打包的 ubuntu-backup.tar 文件就可以直接删掉以释放空间了。

二、 视觉净化:删除 Windows Terminal 中多余的 Ubuntu 标签

在折腾过多次卸载、重装或迁移后,Windows Terminal 的下拉菜单里经常会遗留好几个没有企鹅头像、点击直接报错的死标签(比如基于 ubuntu.exe 的旧引导)。我们可以直接在 Windows Terminal 的设置界面进行删除,也可以通过修改配置文件将其剔除。

💡 新版 Windows Terminal 极其智能,它会通过 WSL 官方 API 动态生成一个带有“小企鹅头像”的满血版 Ubuntu 标签。我们只需要留下这一个即可,其余的全部人肉擦除。

1. 进入高级 JSON 设置

  1. 打开 Windows Terminal
  2. 点击顶部标签栏的下拉箭头 ➜ 点击 设置(Settings)
  3. 在左下角的最底部,点击 打开 JSON 文件。此时系统会调用你的文本编辑器(如 VS Code 或记事本)打开 settings.json

2. 精准查杀多余标签

在 JSON 文件中,使用 Ctrl + F 快捷键搜索 "profiles" 关键字,找到其中的 "list" 数组。你会看到类似下面的结构:

JSON

"list": [
  {
    "guid": "{581755a0-c430-5884-b049-74d642337d74}",
    "hidden": false,
    "name": "Ubuntu",
    "source": "Windows.Terminal.Wsl"
  },
  {
    "guid": "{1fad7255-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
    "commandline": "ubuntu.exe", 
    "name": "Ubuntu (Old)"
  }
]
  • 保留原则:看到带有 "source": "Windows.Terminal.Wsl" 或者带有一串长 GUID 且在界面上能正常显示企鹅头像的那一项,保留它
  • 删除原则:看到那些手动绑定的 "commandline": "ubuntu.exe"、或者由于多次安装残留的旧 Ubuntu 花括号代码块,直接整段删掉(注意逗号闭合语法),或者将其属性改为 "hidden": true

保存文件后,回到终端,下拉菜单瞬间恢复清爽!

三、 权限对齐:修改小企鹅标签打开后的默认用户

当你删除了旧的 .exe 标签,转而点击 Windows Terminal 自动生成的“小企鹅”标签时,WSL2 引擎为了保证至高控制权,默认会以系统至高神 root 用户登录

为了确保开发安全性、以及找回你之前的历史文件与配置(如 Git、SSH 密钥),需要将其重新绑定回你的个人普通账户。

1. 确认你的真实普通用户名

如果你当前是以 root 权限呆在 Ubuntu 内部,直接敲击以下命令查看你的家目录文件夹叫什么:

Bash

ls /home

假设屏幕上打印出来的名字是 steggy,那么 steggy 就是你最初创建的普通用户名。

2. 在 Windows 侧一键重置默认用户

关闭 Ubuntu 窗口,重新打开 Windows 的 PowerShell,直接运行以下命令(将末尾的 你的用户名 替换为上面查到的真实名字,比如 steggy):

PowerShell

# 语法:<发行版名称别名> config --default-user <用户名>
ubuntu config --default-user steggy

⚠️ 避坑小常识(找不到命令怎么办):

如果执行上述命令时,PowerShell 报错提示“无法识别 ubuntu 项”,这是因为迁移后环境变量丢失。

别慌!你只需将命令中的前缀换成更底层的微软应用别名即可,改敲这一行:

PowerShell

ubuntu2404 config --default-user steggy

(根据你的具体大版本号,可以尝试 ubuntu2204ubuntu2004)

3. 验证

再次点击 Windows Terminal 的小企鹅标签,你会发现久违的绿色普通用户前缀(如 steggy@DESKTOP-XXXX:~$)已经完美归位!