能否实现一个文件级别的 RAID 库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
ecnelises
V2EX    奇思妙想

能否实现一个文件级别的 RAID 库?

  •  
      ecnelises 2022-07-26 23:55:14 +08:00 2956 次点击
    这是一个创建于 1221 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,RAID 有通过芯片实现的硬件 RAID ,也有像 ZFS 这样由文件系统实现的软件 RAID. 不过传统的 RAID 有若干缺点:

    • 两块或多块硬盘大小不同的时候,大的那块剩余空间没法利用
    • 迁移不方便,要么一块一块换盘重建,要么整体搬移
    • 需要绑定某个文件系统,而 macOS/Linux/Windows 原生支持的文件系统都没这么多 RAID 选项(除了简单的 0 和 1 )
    • 需要提前占据整个硬盘或分区

    所以,在单个软件需要数据冗余和性能的情况下,是否可以实现一个库,以读写多个硬盘上指定文件的方式实现类似 RAID 的功能?不同硬盘文件系统可以不一样,RAID 文件也无需占据整个硬盘或分区,而是像虚拟机硬盘一样慢慢增长就可以。要迁移任意数量的硬盘也很容易,直接把文件复制过去。

    这个场景也许比较小众,但看起来还是有意义的。

    8 条回复    2022-07-28 00:43:58 +08:00
    ashong
        1
    ashong  
       2022-07-27 00:00:54 +08:00   1
    snapraid + mergefs ?
    neteroster
        2
    neteroster  
       2022-07-27 00:02:21 +08:00 via Android
    SnapRAID 表示你说的很有道理(
    hs0000t
        3
    hs0000t  
       2022-07-27 00:07:35 +08:00 via Android
    snapraid
    zagfai
        4
    zagfai  
       2022-07-27 00:37:10 +08:00
    snapraid 的一致性怎么处理?版本冲突怎么处理?
    westoy
        5
    westoy  
       2022-07-27 00:47:50 +08:00
    dd 或者 fallocate 固定大小文件之后 losetup 成 loop 设备再 mdadm 不就行了么
    libook
        6
    libook  
       2022-07-27 11:19:30 +08:00   1
    传统 RAID 方案是以磁盘存储单元为单位进行管理的,所以需要整盘进行格式化和使用,只要把这个方案变成以文件系统之上的文件 bit 为单位进行管理,就不需要整盘格式化和使用了,即为题主所描述的特性。

    除了 RAID1 以外,常见的冗余方案就是奇偶校验,所以冗余阵列里通常会有两种数据,即真正的数据和校验数据。所以尽管奇偶校验可以以文件 bit 为单位,仍然需要指定哪个文件是真正的数据、哪个文件是校验数据,那么只需要规划好这两种数据的存放位置,就可以实现数据冗余的效果。

    以上是冗余的部分,现阶段有个软件叫做 SnapRAID 就是满足这类需求的,它运行于文件系统之上,需要手动进行同步校验数据和灾后恢复,除此之外不干涉用户对文件系统的访问,也就是说你可以用任何文件系统(个别文件系统需要参考官方文档的注意事项),甚至不同盘用不同文件系统,像没有 RAID 一样使用,然后定期手动同步校验数据,也可以设定排除那些目录和文件,一旦出现磁盘问题就可以换新盘将已经生成校验数据的文件恢复。

    但要注意,这种冗余是没有 IO 性能的提升的,因为本质上就是将每块硬盘单独挂载使用,性能就是硬盘本身的性能。

    如果想提升性能的话,通常就是把读写压力均匀分摊到所有磁盘上,所有磁盘“多核工作”效率成倍提升,如果是磁盘级别的传统 RAID 方案的话,因为用户看不到单盘上具体都写了啥数据,所以用户体验会好一些,但如果在文件级别实现的话,就会出现每个盘都会大量混合存在真正数据和校验数据的情况,会十分杂乱,不知道有没有软件很好解决这个问题。

    或者题主只是不想全盘都给 RAID ,那么也可以看看是不是可以用虚拟磁盘的方案,在所有磁盘上创建虚拟磁盘镜像文件,然后用虚拟出来的磁盘做 RAID ,以达到冗余和性能双收,我没试过,题主可以自行研究。
    phony2r
        7
    phony2r  
       2022-07-27 14:46:55 +08:00
    cron + rsync
    ecnelises
        8
    ecnelises  
    OP
       2022-07-28 00:43:58 +08:00
    @ashong
    多谢,以前还没听说过这俩东西

    @libook
    无意义文件这个问题确实不好解决,只能放在目录里藏起来作为软件私有的存储
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2552 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:04 PVG 23:04 LAX 07:04 JFK 10:04
    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