众所周知,RAID 有通过芯片实现的硬件 RAID ,也有像 ZFS 这样由文件系统实现的软件 RAID. 不过传统的 RAID 有若干缺点:
所以,在单个软件需要数据冗余和性能的情况下,是否可以实现一个库,以读写多个硬盘上指定文件的方式实现类似 RAID 的功能?不同硬盘文件系统可以不一样,RAID 文件也无需占据整个硬盘或分区,而是像虚拟机硬盘一样慢慢增长就可以。要迁移任意数量的硬盘也很容易,直接把文件复制过去。
这个场景也许比较小众,但看起来还是有意义的。
1
ashong 2022-07-27 00:00:54 +08:00 1
snapraid + mergefs ?
|
2
neteroster 2022-07-27 00:02:21 +08:00 via Android
SnapRAID 表示你说的很有道理(
|
3
hs0000t 2022-07-27 00:07:35 +08:00 via Android
snapraid
|
4
zagfai 2022-07-27 00:37:10 +08:00
snapraid 的一致性怎么处理?版本冲突怎么处理?
|
5
westoy 2022-07-27 00:47:50 +08:00
dd 或者 fallocate 固定大小文件之后 losetup 成 loop 设备再 mdadm 不就行了么
|
6
libook 2022-07-27 11:19:30 +08:00 1
传统 RAID 方案是以磁盘存储单元为单位进行管理的,所以需要整盘进行格式化和使用,只要把这个方案变成以文件系统之上的文件 bit 为单位进行管理,就不需要整盘格式化和使用了,即为题主所描述的特性。
除了 RAID1 以外,常见的冗余方案就是奇偶校验,所以冗余阵列里通常会有两种数据,即真正的数据和校验数据。所以尽管奇偶校验可以以文件 bit 为单位,仍然需要指定哪个文件是真正的数据、哪个文件是校验数据,那么只需要规划好这两种数据的存放位置,就可以实现数据冗余的效果。 以上是冗余的部分,现阶段有个软件叫做 SnapRAID 就是满足这类需求的,它运行于文件系统之上,需要手动进行同步校验数据和灾后恢复,除此之外不干涉用户对文件系统的访问,也就是说你可以用任何文件系统(个别文件系统需要参考官方文档的注意事项),甚至不同盘用不同文件系统,像没有 RAID 一样使用,然后定期手动同步校验数据,也可以设定排除那些目录和文件,一旦出现磁盘问题就可以换新盘将已经生成校验数据的文件恢复。 但要注意,这种冗余是没有 IO 性能的提升的,因为本质上就是将每块硬盘单独挂载使用,性能就是硬盘本身的性能。 如果想提升性能的话,通常就是把读写压力均匀分摊到所有磁盘上,所有磁盘“多核工作”效率成倍提升,如果是磁盘级别的传统 RAID 方案的话,因为用户看不到单盘上具体都写了啥数据,所以用户体验会好一些,但如果在文件级别实现的话,就会出现每个盘都会大量混合存在真正数据和校验数据的情况,会十分杂乱,不知道有没有软件很好解决这个问题。 或者题主只是不想全盘都给 RAID ,那么也可以看看是不是可以用虚拟磁盘的方案,在所有磁盘上创建虚拟磁盘镜像文件,然后用虚拟出来的磁盘做 RAID ,以达到冗余和性能双收,我没试过,题主可以自行研究。 |
7
phony2r 2022-07-27 14:46:55 +08:00
cron + rsync
|
8
ecnelises OP |