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

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

**测试环境**

- 版本号: 26300.9457
- 版本: Pro (26H2)
- 架构: x64
- 证据: 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

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` 中设为默认 |

但先把预期摆正：

> **警告: Dev Drive 不会让 Linux 文件变快**
>
> 微软 Dev Drive FAQ 写得很明确：WSL 跑在 VHD 里，**不要期待从 Dev Drive 访问 WSL 项目文件会有性能提升**。WSL 的 `metadata` 挂载选项在 ReFS 上**不受支持**，而 Dev Drive 用的就是 ReFS。正确的用法是：VHDX 和 Windows 侧仓库/缓存放 D:；Linux 仓库放在 ext4 VHDX 内部，不要放 `/mnt/d`。

如果只追求速度，把 VHDX 留在 C: 更简单。这套布局的目标是**容量隔离**：VHDX 和 Windows 侧数据放 D:，Linux 文件仍然待在 ext4 里面。

## 开始之前

| 检查 | 要求 |
|---|---|
| Windows | Windows 11 22H2 build **22621.2338** 或更高（Dev Drive） |
| 空间 | Dev Drive 至少 **50GB**；128GB 比较舒服 |
| 权限 | 本地管理员；`fsutil` 和格式化都要提权 |
| 磁盘 | **新盘或未分配空间**；格式化会清空 |
| 虚拟化 | WSL2 需要虚拟化；Windows 本身在 VM 里时，要开嵌套虚拟化 |
| 备份 | 目标磁盘上的数据会被清空 |

> **危险: 先确认磁盘编号**
>
> `Initialize-Disk` 和 `Format-Volume` 会清空选中的磁盘。先跑 `Get-Disk`，按容量和型号确认目标磁盘，再动手。不要对工作机的 Disk 0 执行这些命令。

## Step 1 — 把 D: 做成 Dev Drive

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

- [ ] **确认新磁盘** (终端（管理员）)

  ```powershell
  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 或未初始化，容量符合预期。

- [ ] **初始化、分区并格式化为 Dev Drive** (终端（管理员）)

  ```powershell
  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 中验证：

  ```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。

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

## Step 2 — 安装 WSL2

正常 Windows 11 的官方路径：

- [ ] **只装 WSL，不装发行版** (终端（管理员）)

  ```powershell
  wsl --install --no-distribution
  ```
  如果提示重启就重启，然后检查：

  ```powershell
  wsl --version
  wsl --status
  ```

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

> **注意: 本次镜像没有 Store 版 WSL**
>
> 干净的 26H2 镜像上，`wsl --install` 返回 1，原因是缺少 Store 版 WSL 包；只用 DISM 启用 `Microsoft-Windows-Subsystem-Linux` 和 `VirtualMachinePlatform` 还不够。实验室最后安装了 [Microsoft WSL releases](https://github.com/microsoft/WSL/releases) 的官方 **WSL 3.0.3 x64 MSI**，并用 GitHub release asset digest 核对了 SHA-256 后才安装。普通 PC 应先试 `wsl --install`；只有官方路径不可用时才走 MSI。

## Step 3 — 把 Ubuntu 装到 D:

如果发行版列表能访问，一条命令：

- [ ] **直接装到 D:** (终端（管理员）)

  ```powershell
  wsl --install -d Ubuntu --location D:\WSL\Ubuntu --no-launch
  ```
  `--location` 必须是绝对路径；`--no-launch` 先不进入首次交互，准备好再启动。

  然后启动一次，创建 Linux 用户：

  ```powershell
  wsl -d Ubuntu
  ```

  预期结果: Ubuntu 注册成功，ext4.vhdx 创建在 D:\WSL\Ubuntu 下。

如果 `wsl --install` 拉不到发行版列表，就用 Ubuntu 官方 rootfs 导入。这也是离线/受限网络的可复现路径。

- [ ] **备用方案：导入 Ubuntu 官方 rootfs** (终端（管理员）)

  ```powershell
  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
  ```
  创建普通用户、设为默认，然后停掉发行版：

  ```powershell
  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` 核对过。

## Step 4 — 确认 VHDX 在 D:

- [ ] **检查 WSL 版本、发行版版本和 VHDX 路径** (终端（管理员）)

  ```powershell
  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 下。

实验输出：

```text
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。

## Step 5 — 决定什么该放 D:

Dev Drive 是给**源码仓库、包缓存、构建输出和中间文件**用的，不是用来装应用和 SDK 的。工具留在 C:，数据放 D:。

```text
D:\
├─ Dev\                 Windows 侧仓库
├─ packages\
│  ├─ npm\              Windows Node 的 npm 缓存
│  ├─ pip\              Windows Python 的 pip 缓存
│  └─ cargo\            Windows Rust 的 Cargo home
└─ WSL\
   └─ Ubuntu\
      └─ ext4.vhdx      Linux 文件在这个 VHDX 里面
```

Windows 工具确实用到时，再重定向缓存：

```powershell
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 负载下也更慢。

## 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 |

> **注意: 这篇不覆盖迁移已有发行版**
>
> 这是**全新安装**配方。迁移已有 WSL 发行版是另一套操作，有自己的备份和回滚要求；本次没有验证。

## 故障排查

| 现象 | 常见原因 | 先做什么 |
|---|---|---|
| `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: | 本次**未测试** |

## 相关页面

- [新机开荒 10 分钟](https://winbook.fyi/zh/windows/start/first-hour/)：更新、驱动和 BitLocker 先做完。
- [Windows 11 26H2 干净安装](https://winbook.fyi/zh/windows/install/clean/)：本次实验的基础镜像。
- [Windows on Arm](https://winbook.fyi/zh/windows/platform/arm64/)：Arm 上的 WSL2 是另一条架构路径。

## 来源

- [Microsoft Learn — 在 Windows 11 上设置 Dev Drive](https://learn.microsoft.com/zh-cn/windows/dev-drive/)
- [Microsoft Learn — WSL 基本命令](https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands)
- [Microsoft Learn — 安装 WSL](https://learn.microsoft.com/zh-cn/windows/wsl/install)
- [Ubuntu — WSL 24.04 rootfs 镜像](https://cloud-images.ubuntu.com/wsl/releases/24.04/current/)
- [Microsoft — WSL releases](https://github.com/microsoft/WSL/releases)

---

来源页面: https://winbook.fyi/zh/windows/dev/wsl2/
