如何windows上使用ZFS

目前openzfs on windows在github上的仓库主要里程碑如下

  1. 2022/4/5 第一(新)版
  2. 2023/1/30 第一个beta版本 2.1.6-rv4
  3. 2023/9/10 移除预发布标签,2.2.0-rc6
  4. 2024/4/10 OS X和win的zfs版本和上游主线版本同步,2.2.3-rc6
  5. 2024/11/1,更新rc9 (9/4发布2.2.6)
    目前兼容win11 23h2+,最新版本的挂载和卸载代码重写了,有一定概率蓝屏,稳定性有可能衰退。如果一切正常,可以用zfs mountmountvol两种方式挂载。

安装驱动

官方仓库:Releases · openzfsonwindows/openzfs · GitHub
下载v2.2.6 RC9:https://github.com/openzfsonwindows/openzfs/releases/download/zfswin-2.2.6rc9/OpenZFSOnWindows-debug-2.2.6rc9.exe

创建存储池

右键点击开始菜单,选择终端管理员,输入 cd 'C:\Program Files\OpenZFS On Windows\' 进入zfs驱动所在文件夹

  • 列出设备ID wmic diskdrive list brief
  • 创建存储池 .\zpool.exe create -O casesensitivity=insensitive -O normalization=formD -O compression=lz4 -O atime=off -o ashift=12 存储池名 设备ID
    • 本例:选择3T的日立硬盘作为演示,设备ID是PHYSICALDRIVE2,存储池取名blockwin
      .\zpool.exe create -O casesensitivity=insensitive -O normalization=formD -O compression=lz4 -O atime=off -o ashift=12 blockwin PHYSICALDRIVE2
      成功后可以查看windows中的磁盘状态

功能测试

  • zpool使用内存作为读取缓存,即ARC。因此写入过程中,内存不断被消耗,作为下次读取时的缓存。
  • 由于自带诸多特性如写时复制,并且非win原生支持文件系统,会比ntfs更消耗cpu。
    HDtune读盘测试没有CPU占用,可以推断为跳过文件系统读的裸盘

开机挂载

目前zfs on windows还不能自动挂载,但在官方的计划之中,未来实现,官方提供的方法是使用windows自带的计划任务,方法如下。
右键点击开始菜单,选择计算机管理。在任务计划程序创建基本任务

  • 本例取名mountzfs
  • 触发器选择当前用户登陆时
  • 操作选择启动程序,浏览并选择zpool程序,默认为"C:\Program Files\OpenZFS On Windows\zpool.exe" 添加参数 import 池名,本例为import blockwin
  • 选择当单击“完成”时,打开此任务的对话框,选择使用最高权限运行,单击确定以完成
    重启后可见zpool每个硬盘正常有2个分区,一个为8M的兼容分区,剩余为主分区。

注意事项

  • zpool创建存储池可以对已挂载的ntfs磁盘直接操作,请确认不要输错盘符。如果不幸输错盘符,未重启前该磁盘内的文件以旧能够读取,请及时导出备份
  • 不要使用HDtune和CDM进行文件读取写入测试,会导致蓝屏。因为调用的i/o错误,测试软件不兼容zfs。

进阶使用

  • zfs基本命令
    zpool status 查看存储池状态
    zpool destroy 池名 摧毁存储池
    zpool import -f 池名 导入存储池
    zpool list 列出存储池信息
  • 设置缓存

    通过修改注册表进行缓存大小调教,即最大许用内存,找到注册表地址:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\OpenZFS\zfs_arc。设置zfs_arc_max0x80000000则使用2GB内存,0x400000000则使用16GB内存,需重启生效
  • 更改盘符
    右键点击开始菜单,选择终端管理员,输入 cd 'C:\Program Files\OpenZFS On Windows\' 进入zfs驱动所在文件夹,输入.\zfs.exe set driveletter=盘名 池名
    本例,修改blockwin为F盘,.\zfs.exe set driveletter=f blockwin
  • 跨平台使用
    由于zfs在mac os x,windows,linux已做到完全跨平台,可以使用zpool import -f 池名来挂载存储池,并自行修改挂载点
  • 谨慎升级
    由于linux主流发行版的安装仓库普遍停留在2.1.x。比如debian11为2.1.11,RHEL8/9为2.1.15,如果在windows上使用2.2.6最新版本,可以向下兼容2.1.1,并且跨平台使用,而一旦使用zpool upgrade升级,虽然能获取最新特性,但低版本的系统将无法使用。
  • 定期校验
    zfs自带校验功能,zpool scrub 池名。本例为zpool scrub blockwin。定期校验有助于修复数据并且监控硬件健康情况。

参考:https://openzfsonosx.org/wiki/Windows