做了一个迁移缓存到 win11 dev drive 的脚本, 基于 REfs 支持 COW

84 天前
 jqknono

开源地址: https://github.com/jqknono/migrate-to-win11-dev-drive

简而言之, COW 功能识别重复文件, 只保存一份, 减少磁盘占用和磁盘写入.

简介

Dev Drive 缓存迁移脚本是一个交互式 PowerShell 工具,旨在帮助开发者将各种开发工具的缓存目录迁移到 Windows 11 的 Dev Drive (ReFS 文件系统) 上,以提高性能、延长硬盘寿命并减少磁盘空间占用。

核心优势

Copy-on-Write (COW) 技术

Dev Drive 基于 ReFS 文件系统,利用了 Copy-on-Write (COW) 技术。COW 是一种资源管理技术,其核心思想是:当多个调用者同时请求相同资源时,它们最初会共享同一份资源。只有当某个调用者需要修改资源时,系统才会为该调用者创建一份资源的副本,然后让其修改这个副本,而不会影响到其他调用者所使用的原始资源。

在 Dev Drive 的场景中,COW 技术带来了显著的优势:

  1. 高效的文件复制: 当需要复制一个大文件时,ReFS 不会立即进行实际的数据复制,而是创建一个新的文件入口指向相同的磁盘块。只有当源文件或目标文件被修改时,才真正复制被修改的数据块。这使得文件复制操作变得非常快速,并且几乎不占用额外的磁盘空间(直到发生修改)。
  2. 节省磁盘空间: 对于包含大量相似文件的缓存目录(例如,多个项目依赖的相同版本的包),COW 可以有效地共享未修改的数据块,从而减少整体磁盘占用。
  3. 提高性能: 减少了不必要的数据复制操作,提高了文件操作的效率。

Dev Drive 与 refs 特性

Windows 11 引入了 Dev Drive ,这是一种专为开发者优化的存储卷。Dev Drive 使用 Resilient File System (ReFS) 作为其文件系统,并启用了专门的优化功能。

ReFS (Resilient File System) 是微软开发的新一代文件系统,相较于传统的 NTFS ,它具有以下优势:

Dev Drive 优化: 在 ReFS 的基础上,Dev Drive 进一步为开发者工作负载进行了优化,例如针对包管理器缓存、构建输出等场景的性能提升。

脚本功能

本脚本提供以下主要功能:

使用说明

快速开始(推荐)

以管理员身份运行 PowerShell 7 (pwsh),然后执行以下命令直接下载并运行最新版本的脚本:

iex "& { $(irm https://raw.githubusercontent.com/jqknono/migrate-to-win11-dev-drive/main/Setup-DevDriveCache.ps1)} -Lang zh"

手动安装

  1. 系统要求:
    • Windows 11 (Build 22000 或更高版本)
    • PowerShell 7+ (pwsh)
  2. 运行脚本:
    • 以管理员身份打开 PowerShell 7 (pwsh)。
    • 导航到脚本所在目录。
    • 执行 .\Setup-DevDriveCache.ps1
  3. 交互式操作:
    • 脚本启动后会显示一个交互式菜单,引导您完成各种操作。
    • 选择相应的选项来迁移缓存、创建或删除 Dev Drive 等。
    • 所有关键操作都需要用户确认,确保安全。

注意事项

参考资料

1956 次点击
所在节点    程序员
8 条回复
idealhs
84 天前
REFS 这玩意网上评价不太好,不过 Dev Drive 我其实一直在用,没有感觉到太大区别。
jqknono
84 天前
@idealhs 这个我不太了解, REFS 是有什么问题吗?
至少如果本地工程很多的话, 三方库不用每次都重复下载了.
idealhs
84 天前
@jqknono 兼容性,稳定性,工具链都比较差吧。你搜搜看网上骂的一大把,我估计微软本身也没把这个做多完善就先放出来了。REFS 本身还是面向企业级存储的,而且设计瞄准的是存储池,而不是单机硬盘。不知道为什么 MS 把他作为 Dev Drive 用,也许只是想用一下 COW 特性吧。不论如何,我日常使用下倒没有出现 bug 影响工作。
cheng6563
84 天前
@jqknono 丢数据
REFS 这玩意全靠 RAID1 保证数据可靠,没有 RAID1 的情况下若校验不过直接会删除文件,让你 chkdsk /f 的机会都没有。btrfs 还能让文件系统只读呢。
家用无 ECC 内存校验的情况下这是迟早的事情。
然后就是 REFS 版本号刷的非常多,出现过升级直接炸盘的先例。
artiga033
84 天前
@idealhs 你看网上骂 win11 、win11 的某次更新、某个补丁的也一大把,幸存者偏差罢了。而且 dev drive 本来就不是给普通用户用的,微软也只推荐放缓存之类的丢了也无所谓的内容,虽然我自己其实把代码也放里面了

dev drive 还有个好处是默认不会被 defender 狂扫,不然 defender 没事就扫两边 node_modules 这种重量级

不过确实看 benchmark ReFS 性能没比 NTFS 高多少,它又不支持自动去重所以这个 CoW 和硬链接也没差,但有总归没有好,比如 uv 就支持在 ReFS 上使用 CoW ,https://docs.astral.sh/uv/reference/settings/#link-mode
idealhs
84 天前
@artiga033 我不知道你在哪里看的只推荐放缓存之类的丢了也无所谓的内容。感觉你对这块也没有认真研究。

另外 ReFS 不向下兼容的同时速刷版本号,真的很难说是个稳定能够使用的文件系统。
AkaGhost
84 天前
REFS 真的很坑,一直在速刷版本号导致主系统一旦挂掉,离线 PE 几乎没几个能读的。紧急情况下没办法把里面的数据临时捞出来。如果一定要用,建议用 vhdx 创建,并放在 NTFS 的分区里,最起码能把 vhdx 捞出来。
jqknono
84 天前
@idealhs @cheng6563 感谢科普, 看来确实有风险

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1161663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX