跳转到内容

WSL2 + Dev Drive 装到 D 盘:不把 C 盘塞满

核验于 5 分钟阅读

在 Windows 11 26H2 上把 WSL2 的 Ubuntu VHDX、Windows 侧项目和包缓存放到 D: Dev Drive,同时讲清 ReFS 的真实限制。

测试环境Pro (26H2) · 版本号 26300.9457 · x64
E2
版本号
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
页面类型
任务
Windows 11 26H2 管理员 PowerShell:D: 是 ReFS Dev Drive,WSL 3.0.3,Ubuntu 24.04 跑在 WSL2,ext4.vhdx 位于 D:\WSL\Ubuntu。
VM 361:D: 是 trusted ReFS Dev Drive,Ubuntu 24.04 跑在 WSL2 内核 6.18,ext4.vhdx 在 D:。点击查看大图。

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 里时,要开嵌套虚拟化
备份 目标磁盘上的数据会被清空

Dev Drive 只在格式化时创建。已有 NTFS 卷不能原地转换,C: 也不能做 Dev Drive。

终端(管理员)
终端窗口
Get-Disk | Format-Table Number,FriendlyName,PartitionStyle,OperationalStatus,Size
Get-Volume | Format-Table DriveLetter,FileSystemLabel,FileSystem,DriveType,Size

如果 D: 现在是 CD/DVD,先把光驱盘符挪走。本次实验中 26H2 ISO 占着 D:,先改成 Y:,再格式化数据盘。

预期结果: 新磁盘 Online、RAW 或未初始化,容量符合预期。

终端(管理员)
终端窗口
Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D
Format-Volume -DriveLetter D -FileSystem ReFS -NewFileSystemLabel DevDrive -DevDrive -Confirm:$false

在管理员 PowerShell 中验证:

终端窗口
Get-Volume -DriveLetter D
fsutil devdrv query D:

预期输出包含 This is a trusted developer volume.。普通权限的 PowerShell 跑 fsutil 会报 Access is denied,这是权限问题,不是 Dev Drive 坏了。

预期结果: D: 是 ReFS,卷标 DevDrive,fsutil 报告 trusted developer volume。

图形界面路径等价:设置 → 系统 → 存储 → 高级存储设置 → 磁盘和卷 → 创建开发驱动器。命令行更适合写成可复现步骤。

正常 Windows 11 的官方路径:

终端(管理员)
终端窗口
wsl --install --no-distribution

如果提示重启就重启,然后检查:

终端窗口
wsl --version
wsl --status

预期结果: WSL 装好;Virtual Machine Platform 可能需要重启。

如果发行版列表能访问,一条命令:

终端(管理员)
终端窗口
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 -Force
curl.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 dev
wsl -d Ubuntu -u root -e passwd dev
wsl -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 核对过。

终端(管理员)
终端窗口
wsl --list --verbose
Get-Item D:\WSL\Ubuntu\ext4.vhdx | Select-Object FullName,Length
wsl -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-WSL2
dev
Filesystem Size Used Avail Use% Mounted on
/dev/sdd 1007G 1.2G 955G 1% /

VHDX 按需增长;发行版里的 1007G 是虚拟容量,不是 D: 上预留了 1TB。

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\npm
setx /M PIP_CACHE_DIR D:\packages\pip
setx /M CARGO_HOME D:\packages\cargo

WSL 则相反:仓库放在 Linux 文件系统里,例如 ~/code,不要放 /mnt/d/Dev。/mnt/d 是 Windows 文件系统视图,权限语义不同,Linux 负载下也更慢。

限制 实际影响
不支持 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 必须是首次格式化
结论 证据
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: 本次未测试

来源