ZFS on Windows (using WSL2) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oldshensheep
V2EX    Windows

ZFS on Windows (using WSL2)

  •  
  •   oldshensheep 2022-07-28 16:31:56 +08:00 6312 次点击
    这是一个创建于 1251 天前的主题,其中的信息可已经有所发展或是发生改变。

    这个让 ZFS 工作在 Windows 上的项目还不太稳定,经常蓝屏,便寻求其他解决方案,于是乎。 有人可能会说你在不是脱裤子放屁吗,这不就是装个虚拟机运行 Linux ???

    是的,我就是脱裤子放屁。

    写这个文章的时候使用的是 ArchLinux 的 WSL2 ,为了使教程更简单,也为了从 0 实现,这篇文章使用 Ubuntu22.04 版本进行测试。

    先决条件

    安装 WSL2 版本的 Ubuntu22.04 ,其他的系统版本应当也可。 具体安装方法参考官方文档。

    对于系统版本大于 Windows 10 version 2004 或者 Windows11 的用户参考下面的文档: https://docs.microsoft.com/en-us/windows/wsl/install

    对于系统版本大于 Version 1903 的参考下面的文档: https://docs.microsoft.com/en-us/windows/wsl/install-manual

    替换 WSL 的 Linux Kernel

    参考文档^1

    在此 https://github.com/oldshensheep/zfs-on-wsl/releases 下载编译好的支持 ZFS 的 Kernel ,需要下载 bzImage ,放到 Windows 的一个地方。 然后在 PowerShell 窗口中执行以下命令: 注意把<bzImage Path>替换成你下载的 bzImage 的路径,例如C:\\Fun\\bzImage

    " [wsl2] kernel=<bzImage Path> " > ~/.wslconfig 

    然后wsl --shutdown关闭运行中的实例,然后重新启动 Ubuntu 。

    挂载硬盘到 WSL2

    参考文档^2

    其实系统现在已经支持 ZFS 了,但是我需要访问 Windows 中的硬盘,所以多了这一步。如果不需要挂载外部硬盘可以跳到下一步。

    Windows 版本必须是 Windows 11 Build 22000 及更新版本,否则无法挂载硬盘(官方文档如此,未测试)。挂载 USB 硬盘是支持的,但是 U 盘不支持,不过可以直接挂载 USB 设备到 Linux^3,暂未测试。

    在 PowerShell 中执行,获取可用的磁盘

    GET-CimInstance -query "SELECT * from Win32_DiskDrive" 

    应该会输出类似的结果:

    DeviceID Caption Partitions Size Model -------- ------- ---------- ---- ----- \\.\PHYSICALDRIVE3 Microsoft Virtual Disk 1 214745610240 Microsoft Virtual Disk \\.\PHYSICALDRIVE4 Seagate BUP Slim BK SCSI Disk Device 2 1000202273280 Seagate BUP Slim BK SCSI Disk Device \\.\PHYSICALDRIVE1 KIOXIA-EXCERIA SATA SSD 1 960194511360 KIOXIA-EXCERIA SATA SSD \\.\PHYSICALDRIVE2 HS-SSD-C2000Pro 1024G 1 1024203640320 HS-SSD-C2000Pro 1024G \\.\PHYSICALDRIVE0 KINGSTON RBUSNS8180S3256GJ 3 256052966400 KINGSTON RBUSNS8180S3256GJ 

    打开 Windows 的磁盘管理,选择要挂载到 Linux 的磁盘,点击 Offline 。( U 盘可能无法 Offline ,但是通过 WSL2 连接 USB 设备可能可行,https://docs.microsoft.com/en-us/windows/wsl/connect-usb

    这里我使用的是一个移动硬盘,路径是\\.\PHYSICALDRIVE4,Offline 后 在 PowerShell 中执行(需要管理员权限)

    wsl --mount \\.\PHYSICALDRIVE4 --bare 

    在 WSL2 中运行sudo lsblk查看是否挂载成功,如果挂载成功,则会输出:

    sheep@sheep-laptop ~> sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 339.7M 1 disk sdb 8:16 0 256G 0 disk / sdc 8:32 0 931.5G 0 disk ├─sdc1 8:33 0 931.5G 0 part └─sdc9 8:41 0 8M 0 part 

    配置 ZFS

    这里不会过多讲述如何使用 ZFS ,请参考其他文档。

    在 Ubuntu 中安装 zfsutils-linux

    sudo apt install zfsutils-linux 

    安装完成后输入sudo zfs version查看是否安装成功,成功会输出:

    sheep@sheep-laptop ~> sudo zfs version zfs-2.1.4-0ubuntu0.1 zfs-kmod-2.1.5-1 

    zfs-kmod-2.1.5-1是内核中的 ZFS 模块,在 bzImage 内

    zfs-2.1.4-0ubuntu0.1是安装的管理工具。版本差别过大可能有 BUG 。

    创建一个 ZFS 。注意把/dev/sdb替换成你的硬盘

    root@sheep-laptop /h/sheep# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 339.7M 1 disk sdb 8:16 0 931.5G 0 disk ├─sdb1 8:17 0 931.5G 0 part └─sdb2 8:18 0 8M 0 part sdc 8:32 0 256G 0 disk / root@sheep-laptop /h/sheep# zpool create new-pool /dev/sdb cannot label 'sdb': failed to detect device partitions on '/dev/sdb1': 19 root@sheep-laptop /h/sheep [1]# 

    cannot label 'sdb': failed to detect device partitions on '/dev/sdb1': 19 这个错误不会影响程序的运行,可以忽略。

    创建一个文件测试一下

    root@sheep-laptop /h/sheep [1]# ls /new-pool/ root@sheep-laptop /h/sheep# echo "hello zfs" > /new-pool/hello root@sheep-laptop /h/sheep# cat /new-pool/hello hello zfs root@sheep-laptop /h/sheep# ls /new-pool/ hello root@sheep-laptop /h/sheep# 

    成功!

    然后你可以在 WSL2 里安装 samba 作为 SMB 文件服务器,让 Windows 使用。简单的参考文档 https://ubuntu.com/tutorials/install-and-configure-samba

    重启系统后的重新配置

    1. 获取可用的磁盘
      GET-CimInstance -query "SELECT * from Win32_DiskDrive" 
    2. 挂载磁盘
      wsl --mount \\.\PHYSICALDRIVE* --bare 
    3. 在 Linux 中导入 zpool (如果你第二步在启动 WSL2 前执行,这步可以省略)
      zpool import <pool-name> 

    关于 ZFS 的参考文档

    ZFS documentation: https://openzfs.github.io/openzfs-docs/
    zfs deduplication https://linuxhint.com/zfs-deduplication/
    zfs compression https://linuxhint.com/enable-zfs-compression/

    参考文档

    https://github.com/alexhaydock/zfs-on-wsl

    https://wsl.dev/wsl2-kernel-zfs/

    第 1 条附言    2022-07-29 10:04:46 +08:00
    如果想在 Windows 上原生使用 zfs 类似的更高级的文件系统
    可以使用 winbtrfs 项目,原生支持。
    https://github.com/maharmstone/btrfs
    11 条回复    2022-08-06 07:18:58 +08:00
    statumer
        1
    statumer  
       2022-07-28 16:58:51 +08:00
    不错,相同原理我试过用 wsl2 挂载 ext4 分区。感觉挺方便的。
    oldshensheep
        2
    oldshensheep  
    OP
       2022-07-28 17:10:11 +08:00
    @statumer 不过 ZFS 没有内置在 Linux 里,所以要替换 WSL2 的内核才能支持。
    kenvix
        3
    kenvix  
       2022-07-28 17:24:20 +08:00
    有 Windows 下使用的需求倒是可以换成 BTRFS ,有人写了个 native 的 BTRFS 驱动并且还挺稳的,feature 支持也比较全
    oldshensheep
        4
    oldshensheep  
    OP
       2022-07-28 17:39:44 +08:00
    @kenvix 我也用过那个,写这个就是来来玩的 XD
    neteroster
        5
    neteroster  
       2022-07-28 18:26:24 +08:00
    不错,我现在是虚拟机挂载 ZFS + SMB ,改天试试这个办法。不过还是希望 OpenZFS on Windows 尽早达到可用状态
    joynvda
        6
    joynvda  
       2022-07-28 23:24:38 +08:00
    这只是玩玩吧? 我的理解 ZFS 是吃内存、cpu 协议,何必套娃呢?

    曾迷过一段时间 ZFS 。

    最后还是转用对象存储,专心写应用。
    Osk
        7
    Osk  
       2022-07-29 00:12:45 +08:00
    ??? 这不是 hyper-v 虚拟机给挂载物理硬盘的标准操作吗.... 如果我没记错的话...


    搞了个 WSL2 这么复杂也太那啥了吧. 明明可以全程 GUI 操作完成的.
    anubu
        8
    anubu  
       2022-07-29 09:19:05 +08:00
    TL;DR

    需求:在 Windows 系统使用 ZFS
    问题:目前的原生实现未达到可用
    设计:在 Windows 中安装 Linux 虚拟机挂载物理硬盘做 ZFS ,通过 SMB 共享给 Windows 使用
    oldshensheep
        9
    oldshensheep  
    OP
       2022-07-29 09:44:37 +08:00 via Android
    @Osk WSL 的确比 hyperv 限制多,操作麻烦。我这就是脱裤子放屁,
    oldshensheep
        10
    oldshensheep  
    OP
       2022-07-29 10:01:03 +08:00 via Android
    如果想在 Windows 上使用 zfs 类似的更高级的文件系统
    可以使用 winbtrfs 项目,原生支持。
    https://github.com/maharmstone/btrfs
    testcaoy7
        11
    testcaoy7  
       2022-08-06 07:18:58 +08:00
    winbtrfs 我用过,只能说 btrfs 的确有着把 SSD“优化”成 HDD 的水准……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1221 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:23 PVG 01:23 LAX 09:23 JFK 12:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86