三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

别再让WSL2吃光C盘!手把手教你将Ubuntu 20.04迁移到D盘(附清理原版教程)

别再让WSL2吃光C盘!手把手教你将Ubuntu 20.04迁移到D盘(附清理原版教程)

WSL2空间优化实战:彻底迁移Ubuntu系统与深度清理指南

当C盘剩余空间开始以红色警示条显示时,每个Windows开发者都会感到一阵焦虑。特别是安装了WSL2后,Ubuntu子系统往往在不经意间吞噬了大量C盘空间。本文将提供一套完整的解决方案,从空间占用分析到安全迁移,再到彻底清理,让你的开发环境重获自由空间。

1. 诊断WSL2空间占用问题

在开始迁移前,我们需要准确识别空间占用情况。打开PowerShell执行以下命令查看已安装的WSL发行版:

wsl -l -v

典型的输出结果会显示类似信息:

NAME STATE VERSION * Ubuntu-20.04 Stopped 2

要获取更详细的空间占用数据,可以使用diskpart工具:

wsl --shutdown diskpart select vdisk file="%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx" detail vdisk

常见空间占用情况分析

占用类型典型大小说明
基础系统1.5-2GB纯净Ubuntu最小安装
软件包缓存500MB-2GBapt缓存文件
开发环境1-5GB编译工具链、SDK等
Docker镜像5GB+如果使用WSL2运行Docker

提示:迁移前建议先清理不必要的文件,可以使用sudo apt clean清理apt缓存

2. 完整迁移流程详解

2.1 准备工作与环境检查

首先确保系统满足以下条件:

  • Windows 10版本1903或更高/Windows 11
  • 已启用WSL2功能
  • 目标驱动器有足够空间(建议至少20GB)

检查WSL版本并设置为WSL2:

wsl --set-default-version 2

2.2 分步迁移操作

  1. 导出现有系统

    wsl --shutdown wsl --export Ubuntu-20.04 C:\temp\ubuntu20.04.tar
  2. 注销原系统

    wsl --unregister Ubuntu-20.04
  3. 在新位置导入

    wsl --import Ubuntu-20.04 D:\WSL\Ubuntu C:\temp\ubuntu20.04.tar --version 2
  4. 设置默认用户(关键步骤): 创建D:\WSL\Ubuntu\wsl.conf文件,内容为:

    [user] default=你的用户名

2.3 迁移后验证

执行以下命令验证迁移结果:

wsl -d Ubuntu-20.04 -e df -h

正常输出应显示文件系统挂载在D盘路径下。同时检查用户权限:

wsl -d Ubuntu-20.04 -e whoami

3. 深度清理原系统残留

迁移完成后,C盘空间可能不会立即释放,需要手动清理以下位置:

  1. Microsoft Store安装包

    • 路径:C:\Program Files\WindowsApps\CanonicalGroupLimited*
    • 通过设置→应用→应用和功能卸载Ubuntu应用
  2. 虚拟硬盘残留

    • 路径:%LOCALAPPDATA%\Packages\CanonicalGroupLimited*\LocalState
    • 确认新系统运行正常后删除整个文件夹
  3. 系统备份文件

    • 删除迁移过程中创建的C:\temp\ubuntu20.04.tar

警告:删除前请确保新系统完全可用,建议先备份重要数据

4. 高级配置与优化技巧

4.1 性能优化设置

编辑%USERPROFILE%\.wslconfig文件:

[wsl2] memory=4GB processors=2 localhostForwarding=true

4.2 磁盘空间管理策略

定期维护命令:

# 清理apt缓存 sudo apt clean # 查找大文件 sudo find / -type f -size +100M -exec ls -lh {} \; # 分析磁盘使用 sudo du -h --max-depth=1 / | sort -h

4.3 多发行版管理

当需要管理多个WSL实例时,可以使用:

# 列出所有发行版 wsl -l -v # 设置默认发行版 wsl --set-default Ubuntu-20.04 # 运行特定发行版 wsl -d Ubuntu-20.04

5. 常见问题解决方案

问题1:迁移后用户变为root

解决方案

  1. 在WSL中执行ubuntu2004 config --default-user 你的用户名
  2. 或编辑/etc/wsl.conf设置默认用户

问题2:Docker Desktop无法使用

解决方案

  1. 确保WSL2后端已启用
  2. 在Docker设置中勾选"使用基于WSL2的引擎"
  3. 在Resources→WSL Integration中启用对应发行版

问题3:网络代理失效

解决方案

# 在~/.bashrc中添加 export hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890"

对于需要频繁进行空间管理的开发者,可以考虑设置自动化清理脚本。例如创建一个每月执行的计划任务:

# 创建清理脚本clean_wsl.ps1 @" wsl -d Ubuntu-20.04 -e sudo apt clean wsl --shutdown "@ | Out-File -FilePath clean_wsl.ps1 # 设置计划任务 $trigger = New-JobTrigger -At 9:00 -Monthly -Days 1 Register-ScheduledJob -Name "WSL Monthly Clean" -FilePath clean_wsl.ps1 -Trigger $trigger
← 返回列表