尝鲜 Bcachefs 的注意事项 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
ChaosAttractor
V2EX    NAS

尝鲜 Bcachefs 的注意事项

  •  
  •   ChaosAttractor 306 天前 2432 次点击
    这是一个创建于 306 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果有人要用 bcachefs 的话,我这一个月折腾了好久,总结了一些坑,可以参考一下

    1. 一定保证存储的 bcachefs 上的数据有存储在其他文件系统的完整备份

    2. bcachefs format 默认会使用硬盘逻辑 blocksize 作为文件系统的 blocksize ,这和文档中的记录不符,最好格式化时手动设置 blocksize 到 4096

    3. 千万别开透明压缩,除非你完全不 care 性能,它是 zstd 实现是单线程的,且性能只有正常的单线程 zstd 的约 1/10 (原因未知),q64t1 bs=1M 能跑出 28MB/s 的惊世骇俗的成绩

      此外它的压缩是基于 extents 进行压缩的(而不是 block ),因此 extents 的大小直接决定压缩率和速度,开启压缩时你可能可以得到 q64t1 bs=4K 性能比 q64t1 bs=1M 好,好很多

    4. 要保证一个组里没有性能差距过大的硬盘,不然因为数据的多个 replica 的写入不是异步的而导致性能更好的硬盘降级到最差硬盘的水平,目前没法指定 replica 的拓扑

    5. 写入会进 foreground_target 并在对应组的所有硬盘之间条带化,而不是同时在 foreground_target 和 background_target 之间条带化

      由于上一条建议,因此不推荐这么做(你可以通过不设置 foreground_target/background_target 来实现在全部硬盘间条带化)

    6. 如果设置了两个 replicas ,但是却有偶数个硬盘,则多出来的硬盘完全不提供性能提升 例如你在 foreground_target 的组中有三块硬盘,background 组中有两块硬盘,那么写入只会同时写到 foreground_target 中的其中两块硬盘

    7. 如果你用 systemd-mount 挂载硬盘,默认会在一个比较短的时间内超时,如果 bcachefs 更新数据结构,mount 时 fsck 需要非常长的时间,可以通过设置 x-systemd.mount-timeout=3600s 来防止 fsck 到一半 systemd 跳出

    8. 添加硬盘后可以用

      bcachefs data job migrate /mnt 

      来重新 balance ,尤其是可以强制让 btree 节点移动到新的 metadata_target/foreground_target

    9. 如果 metadata_target=none (默认)那么 metadata 就会写到 foreground_target

    10. background_compression=none 时会继承 compression 的值,默认情况下格式化时只指定 compression 那么 background_compression 就会是 none

    11. bcachefs 不会在检查到磁盘支持 discard 就自动开启,务必手动给 ssd 开启 discard

    12. 通过设置 durability=0 可以得到 writethrough cache ,设置 promote_target 而不设置 foreground_target 可以得到 writearound cache

      假如你有一些性能较差/与其他硬盘不一致的 ssd ,并且你只想让它作为读缓存来提高覆盖率,那么可以加入到 foreground_target 的组中并设置 durability ,roadmap 中,未来还可能支持更复杂的 tiering 配置来覆盖同组中速率不一致时的种种情况

    13. metadata_replicas_required 和 data_replicas_required 决定的是 mount 时有多少副本才认为数据完全,而不是写入多少个 replica 就算写入完成/提供 fsync 保证

    14. 暂时最好别用 online fsck ,有一些问题,可以去 bcachefs 的 github mirror 的 issue 区看

    15. 如果你想尝试 master 分支,请一定先去 irc 里看看是不是已经 ready 了,也可以去看看 ci 的 state

      目前 6.12 用下来没遇到什么大问题,但是 6.11 有非常多已知问题

    7 条回复    2024-12-22 01:26:37 +08:00
    ChaosAttractor
        1
    ChaosAttractor  
    OP
       306 天前
    还观察到一些很有意思的事情,bcachefs 如果硬盘容量不同,为了保证 IO 性能的持续一致性,假如一个硬盘容量 10T ,一个 5T ,那么它们被填充的 IO 量会不一样
    我这边比较极端,两个 10T 四个 800G ,可以观测到两个 10T 填充了 100MB/s ,俩 800G 就只被填充了 8MB/s
    考虑到后台是可以 rebalance 的,我不觉得这是一个好的做法
    这还导致一个很神奇的事情,如果你让数据在 SSD 和 HDD 之间条带,你会发现数据全写到 HDD 里了,SSD 就在那边干看着

    然后单个数据的多个镜像在读取时应该没做 Round Robin 来提高吞吐?
    然后写入由于我还没有四个 SSD ,我也不知道它能不能很好的在写入时填充多个条带
    tenl
        2
    tenl  
       306 天前
    等完善了能替换 zfs 不?
    MoonLin
        3
    MoonLin  
       306 天前
    赞一个,一直在关注这个 fs ,中文世界对这个 fs 的讨论实在太少了,楼主太棒了
    ChaosAttractor
        4
    ChaosAttractor  
    OP
       306 天前 via iPhone
    @tenl 对 FS 来说,开发的时间跨度太长了
    很可能是 3 年后可用,5 年后稳定,10 年后成熟
    relife
        5
    relife  
       306 天前
    我还是继续用 btrfs 吧
    roidinev
        6
    roidinev  
       305 天前 via iPhone
    先存档
    sf4675822
        7
    sf4675822  
       305 天前 via Android
    那还是先用 btrfs 吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3363 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:38 PVG 12:38 LAX 21:38 JFK 00:38
    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