在 Windows 上构建不占 C 盘的科研级 WSL 实验环境(Ubuntu 22.04)

在 Windows 上构建不占 C 盘的科研级 WSL 实验环境(Ubuntu 22.04)

适用人群:

  • 使用 Windows 作为主力实验机器
  • 从事 机器学习 / NLP / LLM / KBQA / 图数据库 等研究
  • C 盘空间紧张,希望 WSL 数据完整放在 D 盘

本文将完整介绍:

  1. 为什么默认 WSL 会疯狂占用 C 盘
  2. 如何从零开始把 Ubuntu 22.04 WSL 安装到 D 盘
  3. 如何在该 WSL 中搭建一个 可长期使用、可复现的科研级 Python / 深度学习环境

全文以"Windows + WSL2 = 主力科研环境"为核心设计理念。


一、为什么默认 WSL 会占 C 盘?(原理必须先搞清)

WSL2 的本质并不是"Linux 进程模拟",而是:

一个运行在 Hyper-V 之上的轻量级 Linux 虚拟机

这个虚拟机的整个 Linux 文件系统,被封装在一个虚拟磁盘文件中:

text 复制代码
ext4.vhdx

默认存放位置

text 复制代码
C:\Users\<你的用户名>\AppData\Local\Packages\<发行版ID>\LocalState\ext4.vhdx

关键结论

  • 即使你在 Linux 内部:

    • 修改 /home
    • 挂载数据目录
  • ext4.vhdx 依然在 C 盘

  • 所有数据增长,最终都会体现在 C 盘空间被吞噬

👉 因此:

唯一真正让 WSL 不占 C 盘的方法,是控制 ext4.vhdx 的物理存放位置


二、WSL 安装方案对比(结论先行)

安装方式 是否真正不占 C 盘 推荐度
wsl --install 直接安装 不推荐
Microsoft Store 安装 不推荐
wsl --import 自定义路径 ⭐⭐⭐⭐⭐
安装后再迁移 ⭐⭐⭐

最佳实践只有一个

从一开始就用 wsl --import,把 ext4.vhdx 放在 D 盘


三、在 D 盘新建 Ubuntu 22.04 WSL(标准做法)

目标效果

  • 发行版名称:Ubuntu-22.04
  • 数据目录:D:\WSL\Ubuntu-22.04\
  • ext4.vhdx 完全位于 D 盘
  • C 盘仅保留极少量 WSL 组件文件

Step 1:准备目录(Windows)

在 D 盘新建目录:

text 复制代码
D:\WSL\Ubuntu-22.04

Step 2:获取 Ubuntu 22.04 RootFS(官方方式)

在 PowerShell 中执行:

powershell 复制代码
wsl --install -d Ubuntu-22.04
wsl --shutdown

随后导出 rootfs:

powershell 复制代码
wsl --export Ubuntu-22.04 D:\WSL\ubuntu-22.04.tar
wsl --unregister Ubuntu-22.04

说明:

  • 这一步只是借用官方镜像生成 rootfs
  • 该发行版马上会被删除,不会长期占用 C 盘

Step 3:在 D 盘重新导入(关键步骤)

powershell 复制代码
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL\ubuntu-22.04.tar --version 2

参数解释:

参数 含义
Ubuntu-22.04 WSL 中显示的发行版名称
D:\WSL\Ubuntu-22.04 ext4.vhdx 的实际存放位置
ubuntu-22.04.tar Linux 根文件系统
--version 2 使用 WSL2

Step 4:清理临时文件

powershell 复制代码
del D:\WSL\ubuntu-22.04.tar

Step 5:启动并配置用户

powershell 复制代码
wsl -d Ubuntu-22.04

默认以 root 身份进入,需要手动创建用户:

bash 复制代码
adduser yourname
usermod -aG sudo yourname

设置默认用户:

powershell 复制代码
ubuntu2204.exe config --default-user yourname

Step 6:验证 ext4.vhdx 位置

powershell 复制代码
wsl --shutdown

确认:

text 复制代码
D:\WSL\Ubuntu-22.04\ext4.vhdx

至此,WSL 的 全部 Linux 数据已彻底脱离 C 盘


四、已有 WSL 的迁移方案(备选)

powershell 复制代码
wsl --shutdown
wsl --export Ubuntu-22.04 D:\WSL\backup.tar
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL\backup.tar --version 2

五、必须避开的常见误区

❌ 误区 1:只迁移 /home

  • ext4.vhdx 仍在 C 盘
  • 问题根本没解决

❌ 误区 2:ext4.vhdx 做软链接

  • 官方不支持
  • 高概率损坏文件系统

❌ 误区 3:安装后强行改路径

  • 没有官方迁移机制
  • 极易翻车

六、在该 WSL 中搭建科研级 Python / ML 环境

以下所有操作均在 Ubuntu 22.04 WSL 内执行

1️⃣ 系统与编译基础

bash 复制代码
sudo apt update
sudo apt upgrade -y

sudo apt install -y \
  build-essential cmake pkg-config \
  git curl wget unzip zip \
  tmux htop tree software-properties-common

2️⃣ 使用 Conda 管理 Python(强烈推荐)

bash 复制代码
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc

创建科研主环境:

bash 复制代码
conda create -n research python=3.10 -y
conda activate research

3️⃣ 数值计算与深度学习基础

bash 复制代码
pip install -U numpy scipy pandas scikit-learn matplotlib seaborn tqdm
pip install torch torchvision torchaudio

4️⃣ NLP / LLM / KBQA 核心库

bash 复制代码
pip install -U \
  transformers datasets tokenizers sentencepiece accelerate \
  spacy nltk rapidfuzz rank-bm25 networkx \
  SPARQLWrapper rdflib pyparsing

5️⃣ 实验工程与复现工具

bash 复制代码
pip install -U pyyaml hydra-core rich wandb

6️⃣ 环境验证

bash 复制代码
python - << EOF
import torch, transformers, numpy, pandas, networkx
print('Torch:', torch.__version__)
print('Transformers:', transformers.__version__)
print('OK: research env ready')
EOF

七、总结

通过 WSL2 + D 盘部署 + Conda 管理环境,Windows 完全可以胜任:

  • 日常科研实验
  • LLM / KBQA / 图推理
  • 大规模数据处理与复现

该方案的核心优势是:

  • C 盘零压力
  • 环境高度可控
  • 与 Linux 服务器高度一致
  • 对科研工作极其友好

如果你本身就是 Windows 用户,这几乎是目前性价比最高、工程最稳妥的实验环境方案。

相关推荐
梵刹古音12 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
梵刹古音13 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
Yvonne爱编码13 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
南宫码农13 小时前
我的电视 - Android原生电视直播软件 完整使用教程
android·开发语言·windows·电视盒子
爱编码的小八嘎14 小时前
C语言对话-22.想睡觉,偶然
c语言
哈基米~南北绿豆14 小时前
虚拟机体验:在Windows/Mac上运行鸿蒙PC开发环境
windows·macos·harmonyos
小乔的编程内容分享站15 小时前
记录使用VSCode调试含scanf()的C语言程序出现的两个问题
c语言·开发语言·笔记·vscode
蓁蓁啊15 小时前
C/C++编译链接全解析——gcc/g++与ld链接器使用误区
java·c语言·开发语言·c++·物联网
我能坚持多久16 小时前
D22—C语言预处理详解:从宏定义到条件编译
c语言·开发语言
奔跑的花短裤17 小时前
常见问题及参考链接
ubuntu·常见问题·搜狗输入法·git配置