群晖 利用 Docker 运行 SnapRAID 的详细记录

2019-08-06 15:48:33 18点赞 174收藏 18评论

开始之前

于 DSM 6.1.7 系统测试通过

最优方式应该是原生程序运行,期待未来会有人编译做出 spk 安装包我是弄不来了。

SnapRAID 这软件我也是刚刚开始使用,据说适合存有大量大文件并很少改动的家庭媒体中心。

详细优缺点,自行搜索了解


SnapRAID 是什么

SnapRAID 是一个目录级别的冗余存储方案,它与 RAID 的原理有相似的地方,但它并不是 RAID。SnapRAID

与 RAID 的主要区别有:

  • SnapRAID 不会对数据进行条带化存储。RAID 通常会使用数据条带化,一个文件可能会被分散存储到多块磁盘上,这样的优点是读取的时候可以加速(多块磁盘同时读取),但条带化也是上节所说的 data lock-in 的根源——你不能拆出一块盘单独读写。

  • SnapRAID 是工作于文件系统之上的。RAID 工作于文件系统之下,直接对磁盘区块进行操作,用磁盘区块上的比特计算校验数据,而 SnapRAID 是通过读取文件系统里的文件之后再进行计算的。

  • SnapRAID 是非实时的。RAID 每时每刻都在工作,磁盘区块上的数据一旦发生变更就会重新计算校验数据,而 SnapRAID 可以在用户选择的时间进行重新计算。

SnapRAID 相比 RAID 的优点主要有:

  • 数据独立。不需要对磁盘做特殊处理,可以直接将已有数据的磁盘(甚至可以是不同文件系统的)加入 SnapRAID,SnapRAID 也不会改变这些已有的数据;一个文件不会被分散到多个磁盘,随时可以拆下来一块磁盘正常读写里面的数据;当磁盘阵列收到文件读写请求时,也只需要一块磁盘响应,而不是所有的磁盘全部从待机状态启动,开始寻道。

  • 抗灾能力。当磁盘列阵中同时损坏的磁盘数量超出预期而无法修复数据时,SnapRAID 的抗灾能力更强。例如:在 3 + 1 的 RAID 场景下,坏一块没事,如果同时坏了两块,所有的磁盘上的数据都将无法读取(因为条带化);但如果是 3 + 1 的 SnapRAID,就算同时坏两块,剩下两块里的数据依然可以正常读取。

  • 配置灵活。标准的 RAID 等级中,RAID 5 最多承受 1 块磁盘同时损坏,RAID 6 最多承受 2 块磁盘同时损坏;而 SnapRAID 可以配置 1 到 6 块校验盘,最多承载 6 块磁盘同时损坏,因此可以组建更大的磁盘阵列而不提升风险(维持数据盘与校验盘的比例不变)。更重要的是,无论是增加还是减少磁盘,SnapRAID 都可以无痛完成,无需清空磁盘数据。

  • 恢复误删文件。由于 RAID 是实时计算校验数据的,当文件被删除时,这一改动立刻就会被同步到校验数据里;而 SnapRAID 在用户请求的时候才进行同步,因此用户可以用 SnapRAID 从校验数据重新构建被误删除的文件。当然了,更可靠、更持久的的误删除防护还是应该用增量备份来完成。

  • 空间利用率高。在磁盘阵列中,校验盘的大小应大于等于数据盘中最大的那块。使用 SnapRAID 时,你可以「超售」。比如数据盘是 6 TB 的但是只装了一半(3 TB),你把 4 TB 的磁盘作为校验盘也是可以的(因为此时校验数据最多只有 3 TB),只要在校验文件膨胀到接近 4 TB 的时候将校验文件挪到更大的磁盘里即可。同样的,校验盘里未被校验文件填满的剩余空间也可以用来存储一些「丢了也无所谓」的不重要数据。此外,由于 SnapRAID 工作于文件系统之上,你可以选择性地排除掉一些不想做冗余的目录和文件,以节省空间。

摘录自:目录级别的冗余存储:SnapRAID(链接

使用经验可以参考博文,非常受用


安装

使用这个 Docker 镜像: 链接

Docker 注册表里边搜索 snapriad ,选择 xagaba/snapraid 项目

DockerDocker

1)需要配置一个 /config 目录存放 snapraid.confsnapraid-runner.conf 两个配置文件(文件于文末提供)

2)需要保护的目录挂载到 /mnt 下

3)按挂载的路径配置好 snapraid.conf 文件, snapraid-runner.conf 按需改动,我默认配置了校验完成后进行数据擦洗同时开启了 log。

4)环境变量 PUID ,PGID 用 SSH 登陆机器,输入 id 命令可以得知。应该都是统一的数字,跟图片设置就行

这个设置事关文件读写权限,配置好减少隐患与后续可能的麻烦

PUID & PGIDPUID & PGID


使用

软件需要使用 docker exec 参数传递命令来操作

以下命令均于 SSH 连接到机器上运行

sync 命令建立校验数据,视乎硬盘数据量所需的时间可能要数小时

sudo docker exec SnapRAID snapraid sync

数据校验数据校验

常用的 SnapRAID 命令:

  • snapraid sync:根据数据盘生成校验盘;

  • snapraid diff:查看有哪些数据需要 sync;

  • snapraid status:查看磁盘阵列的状态;

  • snapraid scrub:进行数据擦洗,提早发现磁盘阵列中的错误。

摘录自:目录级别的冗余存储:SnapRAID( 链接

官方使用手册:链接


计划任务

该 Docker 镜像自带的 corntab 计划任务,默认每天北京时间 08:30 定时运行(容器是 UTC 时间)

想更灵活的自定时间可以用

sudo docker exec SnapRAID crontab -r

命令把容器的 corntab 计划删了,改用群晖自带的任务计划

手动运行的效果

fejich@PVE-DSM:~$ sudo docker exec SnapRAID /usr/bin/python /app/snapraid-runner/snapraid-runner.py -c /config/snapraid-runner.conf

2019-08-05 00:51:03,168 [INFO ] ============================================================

2019-08-05 00:51:03,169 [INFO ] Run started

2019-08-05 00:51:03,169 [INFO ] ============================================================

2019-08-05 00:51:03,169 [INFO ] Running diff...

2019-08-05 00:51:03,175 [OUTPUT] Loading state from /config/snapraid.content...

2019-08-05 00:51:03,175 [OUTPUT] Comparing...

2019-08-05 00:51:03,176 [OUTPUT] add F06中孔铁油缸-4.0s.PDF.pdf

2019-08-05 00:51:03,176 [OUTERR] WARNING! UUID is unsupported for disks: 'mnt1', 'mnt2', 'mnt3'. Noons.

2019-08-05 00:51:03,176 [OUTPUT]

2019-08-05 00:51:03,177 [OUTPUT] 14 equal

2019-08-05 00:51:03,177 [OUTPUT] 1 added

2019-08-05 00:51:03,177 [OUTPUT] 0 removed

2019-08-05 00:51:03,178 [OUTPUT] 0 updated

2019-08-05 00:51:03,178 [OUTPUT] 0 moved

2019-08-05 00:51:03,178 [OUTPUT] 0 copied

2019-08-05 00:51:03,178 [OUTPUT] 0 restored

2019-08-05 00:51:03,178 [OUTPUT] There are differences!

2019-08-05 00:51:03,479 [INFO ] ************************************************************

2019-08-05 00:51:03,479 [INFO ] Diff results: 1 added, 0 removed, 0 moved, 0 modified

2019-08-05 00:51:03,480 [INFO ] Running sync...

2019-08-05 00:51:03,482 [OUTPUT] Self test...

2019-08-05 00:51:03,858 [OUTPUT] Loading state from /config/snapraid.content...

2019-08-05 00:51:03,859 [OUTPUT] Scanning disk mnt1...

2019-08-05 00:51:03,859 [OUTPUT] Scanning disk mnt2...

2019-08-05 00:51:03,860 [OUTPUT] Scanning disk mnt3...

2019-08-05 00:51:03,860 [OUTPUT] Using 0 MiB of memory for the file-system.

2019-08-05 00:51:03,860 [OUTERR] WARNING! UUID is unsupported for disks: 'mnt1', 'mnt2', 'mnt3'. Noons.

2019-08-05 00:51:05,860 [OUTPUT] Initializing...

2019-08-05 00:51:05,860 [OUTPUT] Resizing...

2019-08-05 00:51:05,860 [OUTPUT] Saving state to /config/snapraid.content...

2019-08-05 00:51:05,860 [OUTPUT] Saving state to /mnt1/snapraid.content...

2019-08-05 00:51:05,870 [OUTPUT] Verifying /config/snapraid.content...

2019-08-05 00:51:05,870 [OUTPUT] Verifying /mnt1/snapraid.content...

2019-08-05 00:51:05,871 [OUTPUT] Syncing...

2019-08-05 00:51:06,093 [OUTPUT] Using 32 MiB of memory for 32 cached blocks.

2019-08-05 00:51:06,095 [OUTPUT] 100% completed, 1 MB accessed in 0:00

2019-08-05 00:51:06,102 [OUTPUT]

2019-08-05 00:51:06,102 [OUTPUT] mnt1 0% |

2019-08-05 00:51:06,102 [OUTPUT] mnt2 0% |

2019-08-05 00:51:06,103 [OUTPUT] mnt3 0% |

2019-08-05 00:51:06,103 [OUTPUT] parity 0% |

2019-08-05 00:51:06,103 [OUTPUT] raid 28% | *****************

2019-08-05 00:51:06,103 [OUTPUT] hash 9% | *****

2019-08-05 00:51:06,103 [OUTPUT] sched 60% | *************************************

2019-08-05 00:51:06,103 [OUTPUT] misc 0% |

2019-08-05 00:51:06,104 [OUTPUT] |______________________________________________________________

2019-08-05 00:51:06,104 [OUTPUT] wait time (total, less is better)

2019-08-05 00:51:06,104 [OUTPUT]

2019-08-05 00:51:06,104 [OUTPUT] Everything OK

2019-08-05 00:51:06,108 [OUTPUT] Saving state to /config/snapraid.content...

2019-08-05 00:51:06,109 [OUTPUT] Saving state to /mnt1/snapraid.content...

2019-08-05 00:51:06,111 [OUTPUT] Verifying /config/snapraid.content...

2019-08-05 00:51:06,111 [OUTPUT] Verifying /mnt1/snapraid.content...

2019-08-05 00:51:06,413 [INFO ] ************************************************************

2019-08-05 00:51:06,413 [INFO ] All done

2019-08-05 00:51:06,430 [ERROR ] Failed to send email because smtp host is not set

2019-08-05 00:51:06,430 [INFO ] Run finished successfully

群晖计划任务

自定义脚本自定义脚本

docker exec SnapRAID /usr/bin/python /app/snapraid-runner/snapraid-runner.py -c /config/snapraid-runner.conf

使用上边的命令,配置好定期运行。即可愉快自动工作。

展开 收起

UGREEN 绿联 40298 2.5/3.5英寸 双盘位 SATA硬盘盒 USB3.0 Type-C

UGREEN 绿联 40298 2.5/3.5英寸 双盘位 SATA硬盘盒 USB3.0 Type-C

369元起

UGREEN 绿联 70441 2.5/3.5英寸 五盘位 SATA硬盘盒 USB3.0 Type-C

UGREEN 绿联 70441 2.5/3.5英寸 五盘位 SATA硬盘盒 USB3.0 Type-C

949元起

TERRAMASTER 铁威马 D5-300 五盘位 RAID硬盘盒 USB3.0 Type-C

TERRAMASTER 铁威马 D5-300 五盘位 RAID硬盘盒 USB3.0 Type-C

1368.93元起

TERRAMASTER 铁威马 D4-300 4盘位硬盘柜 银色

TERRAMASTER 铁威马 D4-300 4盘位硬盘柜 银色

699元起

ZSpace 极空间 A4硬盘盒磁盘阵列四盘位

ZSpace 极空间 A4硬盘盒磁盘阵列四盘位

1099元起

TERRAMASTER 铁威马 D2-320 双盘RAID磁盘 Type-c

TERRAMASTER 铁威马 D2-320 双盘RAID磁盘 Type-c

599元起

Yottamaster 尤达大师 DR2RU3-25 2.5英寸 双盘位 SATA阵列柜 USB 3.0 SATA DR2RU3-25

Yottamaster 尤达大师 DR2RU3-25 2.5英寸 双盘位 SATA阵列柜 USB 3.0 SATA DR2RU3-25

299元起

MAIWO 麦沃 K3547D 四盘位 3.5英寸 硬盘阵列盒

MAIWO 麦沃 K3547D 四盘位 3.5英寸 硬盘阵列盒

528元起

UGREEN 绿联 30786 2.5/3.5英寸 双盘位 SATA硬盘盒 USB3.1 Type-C

UGREEN 绿联 30786 2.5/3.5英寸 双盘位 SATA硬盘盒 USB3.1 Type-C

599元起

UGREEN 绿联 双盘位磁盘阵列硬盘柜2.5/3.5英寸硬盘通用Type-C阵列硬盘盒

UGREEN 绿联 双盘位磁盘阵列硬盘柜2.5/3.5英寸硬盘通用Type-C阵列硬盘盒

599元起

铁威马 D16 Thunderbolt3 雷电3桌面专业级雷电非编存储支持RAID 0/1/5/6/50/10/JBOD阵列模式支持288TB大容量

铁威马 D16 Thunderbolt3 雷电3桌面专业级雷电非编存储支持RAID 0/1/5/6/50/10/JBOD阵列模式支持288TB大容量

暂无报价

UGREEN 绿联 硬盘阵列盒磁盘柜多双盘位机械外接Raid改Sata移动笼架读取器

UGREEN 绿联 硬盘阵列盒磁盘柜多双盘位机械外接Raid改Sata移动笼架读取器

369元起

UGREEN 绿联 硬盘盒子阵列柜多双盘位RAID外接3.5机械磁盘SATA存储扩展坞

UGREEN 绿联 硬盘盒子阵列柜多双盘位RAID外接3.5机械磁盘SATA存储扩展坞

259元起

Linkreal 联瑞 USB3.1 磁盘阵列盒

Linkreal 联瑞 USB3.1 磁盘阵列盒

暂无报价

TERRAMASTER 铁威马 D2-310 双盘位NAS

TERRAMASTER 铁威马 D2-310 双盘位NAS

599元起

SanDisk professional 闪迪大师 SDPH62H-012T-ZBAAD 3.5英寸 双盘位 SATA硬盘盒 雷电3 Type-C SDPH62H-012T-ZBAAD

SanDisk professional 闪迪大师 SDPH62H-012T-ZBAAD 3.5英寸 双盘位 SATA硬盘盒 雷电3 Type-C SDPH62H-012T-ZBAAD

暂无报价
18评论

  • 精彩
  • 最新
  • 帮顶一下,实际上这个软件直接装在windows电脑里就够了,连nas都不用买了,配置起来比这个还要简单,几千元的nas够电脑开机很久了

    校验提示文案

    提交
    Windows 电脑的确是能做到很多事情,适当地配置好各种服务型软件也能愉快使用。
    而 NAS 设备是专门设计用来存储分享文件用的小型服务器,开箱即用,稳定高效,厂家有完整的配套 App 服务。
    NAS 卖的贵,就是因为软件值钱。

    校验提示文案

    提交
    收起所有回复
  • 是不是只有/mnt下的目录使用了snapRAID?

    校验提示文案

    提交
    哪个目录使用按自己喜好设置就可以了,首先把想要进行 SnapRAID 的目录都挂载到 Docker 里边。然后 snapraid.conf 文件里边指定相应的目录

    校验提示文案

    提交
    收起所有回复
  • 能否移植到qnap平台?

    校验提示文案

    提交
    今天尝试编译封装了可用于群晖系统直接安装使用的 .spk 软件安装包,过程挺顺利。晚点我会测试下 QNAP 系统,我朋友有 QNAP 453B 可以折腾一下

    校验提示文案

    提交
    期待!紫薯布丁

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 发文的时候忘记了咐上两个 .conf 配置文件的链接 [尴尬]


    链接: 去看看

    提取码: ixsi

    校验提示文案

    提交
  • 好好学习下,准备今年整个NAS [高兴]

    校验提示文案

    提交
  • 感觉群晖不能装Docker都是垃圾,因为我刚好有一台垃圾 [皱眉]

    校验提示文案

    提交
    求教,docker对个人有啥好处?

    校验提示文案

    提交
    收起所有回复
  • 小白报到,觉得群晖自己的文件系统SHR挺好的。

    校验提示文案

    提交
  • 这玩意,如果群晖崩了,数据好弄出来吗

    校验提示文案

    提交
  • 赞一个,大佬能否试下mergerfs能否运行,我尝试编译,但是在群晖里装不上。。。

    校验提示文案

    提交
  • 作者你好,想问下snapraid能不能把非校验盘归到同一个存储空间下合并起来?

    校验提示文案

    提交
    可以

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
174
扫一下,分享更方便,购买更轻松