WSL2 + Dev Drive 装到 D 盘:不把 C 盘塞满
在 Windows 11 26H2 上把 WSL2 的 Ubuntu VHDX、Windows 侧项目和包缓存放到 D: Dev Drive,同时讲清 ReFS 的真实限制。
- 版本号
- 26300.9457
- 版本
- Pro (26H2)
- 架构
- x64
- 支持
- 实验室(WSL2 + Dev Drive)
- 证据
- E2实验室复现
- 风险
- R2需要还原点
- 核验日期
- 2026-10-28
- 测试机
- PVE 9.2.2 VM 361;Windows 11 Pro 26H2 26300.9457;8GB/4 vCPU;128GB SATA 数据盘格式化为 D: ReFS Dev Drive;WSL 3.0.3;Ubuntu 24.04
- 页面类型
- 任务
WSL2 把每个 Linux 发行版放在一个 VHDX 里。默认在 C: 的 %LOCALAPPDATA% 下。你可以把这个 VHDX 放到 D:,把 D: 格式化成 Dev Drive,让 C: 只留给 Windows。
本次 26H2 实验就是这样做的:
| 项目 | 实验结果 |
|---|---|
| D: 卷 | 127.9GB ReFS,卷标 DevDrive,trusted developer volume |
| WSL | 3.0.3.0,默认版本 2 |
| 发行版 | Ubuntu 24.04 LTS |
| 内核 | 6.18.54.1-microsoft-standard-WSL2 |
| VHDX | D:\WSL\Ubuntu\ext4.vhdx,首次启动后 1.25GB |
| 用户 | dev,在 /etc/wsl.conf 中设为默认 |
但先把预期摆正:
如果只追求速度,把 VHDX 留在 C: 更简单。这套布局的目标是容量隔离:VHDX 和 Windows 侧数据放 D:,Linux 文件仍然待在 ext4 里面。
| 检查 | 要求 |
|---|---|
| Windows | Windows 11 22H2 build 22621.2338 或更高(Dev Drive) |
| 空间 | Dev Drive 至少 50GB;128GB 比较舒服 |
| 权限 | 本地管理员;fsutil 和格式化都要提权 |
| 磁盘 | 新盘或未分配空间;格式化会清空 |
| 虚拟化 | WSL2 需要虚拟化;Windows 本身在 VM 里时,要开嵌套虚拟化 |
| 备份 | 目标磁盘上的数据会被清空 |
Step 1 — 把 D: 做成 Dev Drive
Section titled “Step 1 — 把 D: 做成 Dev Drive”Dev Drive 只在格式化时创建。已有 NTFS 卷不能原地转换,C: 也不能做 Dev Drive。
Get-Disk | Format-Table Number,FriendlyName,PartitionStyle,OperationalStatus,SizeGet-Volume | Format-Table DriveLetter,FileSystemLabel,FileSystem,DriveType,Size如果 D: 现在是 CD/DVD,先把光驱盘符挪走。本次实验中 26H2 ISO 占着 D:,先改成 Y:,再格式化数据盘。
预期结果: 新磁盘 Online、RAW 或未初始化,容量符合预期。
Initialize-Disk -Number 1 -PartitionStyle GPTNew-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter DFormat-Volume -DriveLetter D -FileSystem ReFS -NewFileSystemLabel DevDrive -DevDrive -Confirm:$false在管理员 PowerShell 中验证:
Get-Volume -DriveLetter Dfsutil devdrv query D:预期输出包含 This is a trusted developer volume.。普通权限的 PowerShell 跑 fsutil 会报 Access is denied,这是权限问题,不是 Dev Drive 坏了。
预期结果: D: 是 ReFS,卷标 DevDrive,fsutil 报告 trusted developer volume。
图形界面路径等价:设置 → 系统 → 存储 → 高级存储设置 → 磁盘和卷 → 创建开发驱动器。命令行更适合写成可复现步骤。
Step 2 — 安装 WSL2
Section titled “Step 2 — 安装 WSL2”正常 Windows 11 的官方路径:
wsl --install --no-distribution如果提示重启就重启,然后检查:
wsl --versionwsl --status预期结果: WSL 装好;Virtual Machine Platform 可能需要重启。
Step 3 — 把 Ubuntu 装到 D:
Section titled “Step 3 — 把 Ubuntu 装到 D:”如果发行版列表能访问,一条命令:
wsl --install -d Ubuntu --location D:\WSL\Ubuntu --no-launch--location 必须是绝对路径;--no-launch 先不进入首次交互,准备好再启动。
然后启动一次,创建 Linux 用户:
wsl -d Ubuntu预期结果: Ubuntu 注册成功,ext4.vhdx 创建在 D:\WSL\Ubuntu 下。
如果 wsl --install 拉不到发行版列表,就用 Ubuntu 官方 rootfs 导入。这也是离线/受限网络的可复现路径。
New-Item -ItemType Directory D:\WSL -Forcecurl.exe -L -o D:\WSL\ubuntu-24.04.rootfs.tar.gz ` https://cloud-images.ubuntu.com/wsl/releases/24.04/current/ubuntu-noble-wsl-amd64-wsl.rootfs.tar.gz
# 导入前和同目录 SHA256SUMS 对比Get-FileHash D:\WSL\ubuntu-24.04.rootfs.tar.gz -Algorithm SHA256
wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL\ubuntu-24.04.rootfs.tar.gz --version 2创建普通用户、设为默认,然后停掉发行版:
wsl -d Ubuntu -u root -e useradd -m -G sudo -s /bin/bash devwsl -d Ubuntu -u root -e passwd devwsl -d Ubuntu -u root -e bash -c "printf '[user]\ndefault=dev\n' > /etc/wsl.conf"wsl --terminate Ubuntu预期结果: Ubuntu 以 WSL2 注册,VHDX 在 D:。
本次实验走的是备用方案:发行版列表 URL(raw.githubusercontent.com)被重置,wsl --install -d Ubuntu 跑不起来。24.04 rootfs 在导入前和 Ubuntu 的 SHA256SUMS 核对过。
Step 4 — 确认 VHDX 在 D:
Section titled “Step 4 — 确认 VHDX 在 D:”wsl --list --verboseGet-Item D:\WSL\Ubuntu\ext4.vhdx | Select-Object FullName,Lengthwsl -d Ubuntu -e bash -lc "grep PRETTY_NAME /etc/os-release; uname -r; whoami; df -h /"预期结果: VERSION 是 2;内核以 -microsoft-standard-WSL2 结尾;ext4.vhdx 在 D:\WSL\Ubuntu 下。
实验输出:
NAME STATE VERSION* Ubuntu Stopped 2
PRETTY_NAME="Ubuntu 24.04 LTS"6.18.54.1-microsoft-standard-WSL2devFilesystem Size Used Avail Use% Mounted on/dev/sdd 1007G 1.2G 955G 1% /VHDX 按需增长;发行版里的 1007G 是虚拟容量,不是 D: 上预留了 1TB。
Step 5 — 决定什么该放 D:
Section titled “Step 5 — 决定什么该放 D:”Dev Drive 是给源码仓库、包缓存、构建输出和中间文件用的,不是用来装应用和 SDK 的。工具留在 C:,数据放 D:。
D:\├─ Dev\ Windows 侧仓库├─ packages\│ ├─ npm\ Windows Node 的 npm 缓存│ ├─ pip\ Windows Python 的 pip 缓存│ └─ cargo\ Windows Rust 的 Cargo home└─ WSL\ └─ Ubuntu\ └─ ext4.vhdx Linux 文件在这个 VHDX 里面Windows 工具确实用到时,再重定向缓存:
setx /M npm_config_cache D:\packages\npmsetx /M PIP_CACHE_DIR D:\packages\pipsetx /M CARGO_HOME D:\packages\cargoWSL 则相反:仓库放在 Linux 文件系统里,例如 ~/code,不要放 /mnt/d/Dev。/mnt/d 是 Windows 文件系统视图,权限语义不同,Linux 负载下也更慢。
Step 6 — 认清 ReFS 的限制
Section titled “Step 6 — 认清 ReFS 的限制”| 限制 | 实际影响 |
|---|---|
不支持 metadata 挂载选项 |
不要给 D: 配 metadata;/mnt/d 上的 Linux 所有权/权限不会像 ext4 |
| 不会加速 Linux 文件 | VHDX 放在 Dev Drive 上仍然是 VHD;微软明确说不应期待 WSL 文件提速 |
| 不装应用 | Dev Drive 放项目数据,不放 SDK/应用;工具安装留在 C: |
| 最小 50GB | 小于 50GB 不能做 Dev Drive |
| 只在格式化时创建 | 已有 NTFS D: 不能原地转换,必须清空 |
| Trust 跟机器走 | Dev Drive 的 VHD/磁盘换机器后要重新标记 trust |
| 现象 | 常见原因 | 先做什么 |
|---|---|---|
HCS_E_HYPERV_NOT_INSTALLED 或“virtualization is not enabled” |
Virtual Machine Platform 没开、固件虚拟化没开,或 Windows 在 VM 里但没开嵌套虚拟化 | 启用 Windows 功能;VM 里要把 SVM/VT-x 和 SLAT 暴露给 guest。本次实验需要 PVE cpu: host,qemu64 基线不行 |
WSL_E_LOCAL_SYSTEM_NOT_SUPPORTED |
wsl.exe 被 SYSTEM 身份启动(服务/agent) |
用登录用户运行,或用该用户令牌的交互式计划任务 |
拉发行版列表时报 WININET_E_CONNECTION_RESET |
raw.githubusercontent.com 被挡/重置 |
用上面的 Ubuntu 官方 rootfs + wsl --import |
fsutil devdrv query 报 Access is denied |
没有提权 | 用管理员 PowerShell |
导入报 ERROR_ALREADY_EXISTS |
已有同名 Ubuntu 注册 | wsl --unregister Ubuntu 会删数据;或换个名字导入 |
Initialize-Disk 失败 |
磁盘离线、只读或已初始化 | 查 Get-Disk;不要强行处理有数据的盘 |
Format-Volume -DevDrive 失败 |
未分配空间不足 50GB,或卷已经格式化过 | 至少留 50GB 未分配空间;Dev Drive 必须是首次格式化 |
这篇验证了什么
Section titled “这篇验证了什么”| 结论 | 证据 |
|---|---|
| D: 是 127.9GB ReFS Dev Drive,trusted,挂载 WdFilter | E2,VM 361 截图 + fsutil devdrv query |
| WSL 3.0.3 以 WSL2 跑 Ubuntu 24.04 | E2,wsl --list --verbose,内核 6.18.54.1-microsoft-standard-WSL2 |
| Ubuntu VHDX 在 D: | E2,D:\WSL\Ubuntu\ext4.vhdx |
wsl --install 的 Store 路径不是万能 |
E2,本次镜像失败;rootfs 导入成功 |
| Dev Drive 能加速 Linux 文件 | 不声称;微软说的是相反结论 |
| Docker Desktop、VS Code、Node、Claude Code、Codex | 本次未测试 |
| 迁移已有 WSL 发行版到 D: | 本次未测试 |
- 新机开荒 10 分钟:更新、驱动和 BitLocker 先做完。
- Windows 11 26H2 干净安装:本次实验的基础镜像。
- Windows on Arm:Arm 上的 WSL2 是另一条架构路径。
