当前位置: 首页 > news >正文

【WSL2+Ubuntu+Docker Desktop】从C盘到D盘:高效迁移与空间优化实战

1. 为什么需要迁移WSL2和Docker到D盘?

很多开发者刚开始使用WSL2和Docker时,都会遇到一个头疼的问题:C盘空间莫名其妙就被占满了。我自己就吃过这个亏,当时C盘突然爆红,一查才发现WSL2和Docker的虚拟机文件已经占用了50多GB。这种情况特别常见,因为WSL2默认会把虚拟机文件存放在C:\Users<用户名>\AppData\Local下,而Docker Desktop默认也会把镜像、容器等数据放在C盘。

C盘空间不足会带来一系列问题:系统运行变慢、软件更新失败、甚至影响日常开发工作。我见过最夸张的情况是,有个同事的C盘只剩下几百MB,连Visual Studio都打不开了。迁移到D盘不仅能解决空间问题,还能带来额外好处:D盘通常是机械硬盘或容量更大的SSD,性能可能更好;系统盘和开发环境分离,重装系统时不会影响开发环境;大容量存储更适合存放Docker镜像等大型文件。

2. 准备工作:检查当前环境

在开始迁移前,我们需要先了解当前的WSL2和Docker配置情况。打开PowerShell(管理员权限),运行以下命令查看已安装的WSL发行版:

wsl -l -v

这个命令会列出所有已安装的WSL实例及其状态。典型输出如下:

NAME STATE VERSION * Ubuntu-22.04 Stopped 2 docker-desktop-data Stopped 2 docker-desktop Stopped 2

记下你的Ubuntu发行版名称(比如Ubuntu-22.04),后面迁移时会用到。同时检查Docker版本:

docker -v

确保Docker Desktop已经安装并能正常运行。建议在迁移前备份重要数据,虽然迁移过程一般不会出问题,但预防万一总是好的。我习惯把WSL中的重要文件同步到Git仓库,或者用tar命令打包备份。

3. 迁移WSL2 Ubuntu到D盘

3.1 导出现有WSL实例

首先需要关闭所有WSL实例:

wsl --shutdown

然后导出你的Ubuntu发行版。假设我们要把Ubuntu-22.04迁移到D盘的WSL2_Ubuntu文件夹:

wsl --export Ubuntu-22.04 D:\wsl-ubuntu-22.04.tar

这个命令会把整个WSL系统打包成一个tar文件。导出时间取决于你的WSL系统大小,我的20GB系统大约需要5分钟。有个小技巧:如果你之前安装了很多软件,可以先清理不必要的文件(比如apt缓存),能显著减小导出文件体积。

3.2 导入到新位置

导出完成后,就可以导入到D盘的新位置了:

wsl --import Ubuntu D:\WSL2_Ubuntu D:\wsl-ubuntu-22.04.tar --version 2

注意几点:

  1. 新实例名称(这里的"Ubuntu")不能和原有名称完全相同,所以我从"Ubuntu-22.04"改成了"Ubuntu"
  2. 指定--version 2确保使用WSL2
  3. 目标路径(D:\WSL2_Ubuntu)会自动创建,不需要提前建好

导入完成后,可以再次运行wsl -l -v确认新实例已存在。这时候你会发现登录新实例时默认是root用户,这不太方便,我们需要恢复原来的普通用户。

3.3 恢复默认用户

找到你的Ubuntu发行版对应的可执行文件,通常叫ubuntu2204.exe(根据版本不同数字会变)。运行:

ubuntu2204.exe config --default-user <你的用户名>

有个小技巧:输入"ubuntu"后按Tab键会自动补全正确的文件名。完成后启动WSL,应该就能以普通用户身份登录了。最后别忘了注销原来的实例释放C盘空间:

wsl --unregister Ubuntu-22.04

4. 迁移Docker Desktop到D盘

4.1 卸载并重新安装Docker

Docker Desktop的迁移稍微复杂些,因为官方没有提供直接的迁移方法。最可靠的方式是重新安装并指定新的数据目录。首先完全卸载现有Docker Desktop,包括勾选"删除所有数据"选项。

下载Docker Desktop安装程序后,重命名为DockerDesktopInstaller.exe,然后在PowerShell中运行:

.\DockerDesktopInstaller.exe install --quiet --accept-license --backend=wsl-2 --installation-dir=D:\DockerDesktop\installer --hyper-v-default-data-root=D:\DockerDesktop\hyper-v-data --windows-containers-default-data-root=D:\DockerDesktop\windows-containers-data --wsl-default-data-root=D:\DockerDesktop\wsl-data

这个命令做了以下几件事:

  1. 静默安装Docker Desktop(--quiet)
  2. 接受许可协议(--accept-license)
  3. 使用WSL2作为后端(--backend=wsl-2)
  4. 将所有数据目录设置到D盘的不同子目录

4.2 验证Docker安装

安装完成后,启动Docker Desktop并检查:

docker -v docker run hello-world

如果能看到Docker版本和hello-world容器的输出,说明安装成功。再检查WSL列表:

wsl -l -v

应该能看到docker-desktop和docker-desktop-data两个实例,而且它们的数据现在都存储在D盘了。

5. 迁移后的优化与验证

5.1 检查磁盘空间变化

迁移完成后,最直观的变化就是C盘空间释放了。你可以通过Windows的磁盘管理工具查看,或者用PowerShell命令:

Get-Volume C | Select-Object SizeRemaining

我的情况是直接腾出了60多GB空间。D盘的新位置也能看到WSL和Docker的文件结构:

D:\ ├── WSL2_Ubuntu\ # WSL系统文件 ├── DockerDesktop\ ├── installer\ # Docker程序文件 ├── hyper-v-data\ # Hyper-V相关数据 ├── wsl-data\ # Docker的WSL数据

5.2 测试开发环境

为了确保迁移没有影响功能,建议运行一些基本测试:

  1. 在WSL中:
sudo apt update sudo apt upgrade
  1. 在Docker中拉取和运行一个镜像:
docker pull nginx docker run -d -p 8080:80 nginx
  1. 检查你的开发项目是否能正常构建和运行

5.3 后续维护建议

迁移完成后,我有几个维护建议:

  1. 定期清理Docker无用镜像:docker system prune
  2. 在WSL中使用apt autoremove清理不需要的包
  3. 考虑设置磁盘配额,防止WSL或Docker占用过多空间
  4. 如果D盘空间也不足,可以随时用同样方法迁移到其他盘

我自己在迁移后养成了每周清理一次的习惯,现在C盘再也没出现过空间不足的警告。对于团队开发环境,我建议直接把WSL和Docker的默认安装路径改到非系统盘,可以避免后续新成员遇到同样问题。

http://www.jsqmd.com/news/512440/

相关文章:

  • 压力测试详解
  • 基于SysTick定时器的嵌入式精确延时实现
  • Qwen2多语言开发避坑手册:30种语言支持下的API调用最佳实践
  • Unity游戏开发:UniTask异步任务取消的3种实战技巧(附WhenAny/WhenAll示例)
  • 功能测试、自动化测试、性能测试的区别?
  • Qwen3-32B-Chat镜像部署教程:transformers tokenizer.pad_token_id设置要点
  • 2026年扒渣机厂家实力推荐:山东名舜机械制造有限公司,多型号扒渣机满足矿山隧道需求 - 品牌推荐官
  • 2026年铜焊材领域实力推荐:河南正和焊材有限公司,铜焊丝/铜焊片/铜焊条全系供应 - 品牌推荐官
  • UVM寄存器模型实战:5种内建sequence的避坑指南与最佳实践
  • Pi0具身智能模型在工业质检中的应用案例
  • 结合Git进行AIGlasses_for_navigation模型版本管理与协作开发
  • MedGemma-X教学评估系统:自动评分学生影像描述作业并给出改进建议
  • 【数据结构与算法】二叉树做题做题做题
  • Qwen-Image+RTX4090D企业级落地实践:多模态AI助手部署于客服知识库系统
  • 避坑指南:用Python连接KEPServerEX时最常见的7个安全配置错误
  • 5个实战步骤掌握Lean量化交易系统开发
  • 2026年水晶粉丝设备厂家推荐:开封市丽星机械设备有限公司,全系粉丝加工解决方案提供商 - 品牌推荐官
  • 【IC设计】从零到一:手把手构建AXI互联系统与波形深度解析
  • Nanbeige 4.1-3B应用场景:独立开发者构建像素风AI内容工坊
  • Ollama部署GLM-4.7-Flash详解:网页、API、Python三种调用方式
  • JS逆向实战:手把手教你解密jsjiami.v6加密的JavaScript代码
  • 2026年水泵/大棚卷帘机智能控制器推荐:郑州海控电子科技有限公司,全系控制器助力农业工业智能化升级 - 品牌推荐官
  • 单细胞测序新手避坑指南:从样本解离到数据分析的5个关键步骤
  • 汽车电子工程师必看:FMEA+FTA+FMEDA+DFA四步搞定ISO 26262功能安全认证
  • 工艺工程师必备技能:从零开始掌握尺寸链计算与换算
  • WhisperLive:实时语音转文本的开源解决方案 | 多引擎实时处理优势
  • 从暴力匹配到KMP:一个算法小白的逆袭之路(含常见误区解析)
  • 外包干了2年,技术退步明显...
  • Bambu Studio终极指南:5个简单步骤让你从3D打印小白变高手
  • 梳理2026年上海新西兰六分制移民公司,哪家比较靠谱 - 工业推荐榜