家用 NAS 服务器(4)| MergerFS和SnapRaid数据备份
原文地址:CSDN博文
前文提要:家用 NAS 服务器(3)| SSD缓存加速机械硬盘
后文链接:家用 NAS 服务器(5)| winserver2022激活及远程桌面控制
文章目录
- 家用 NAS 服务器(4)| MergerFS和SnapRaid数据备份
-
- 1. 前言
- 2. 其他方案对比
- 3. MergerFS
-
- 3.1 基本介绍
- 3.2 安装使用
- 4. SnapRaid
-
- 4.1 基本介绍
- 4.2 安装使用
- 4.3 数据还原
- 4.4 定时备份
-
- 4.4.1 备份和校验脚本
- 4.4.2 (可选)开启/关闭 SSD 缓存
- 4.4.3 cron 定时任务
- 5. 总结
1. 前言
上一期中,笔者已经把 ubuntu server 的 xfs 文件系统以及 bcache 固态缓存设置完毕。
这一期依旧是??力全开,干货满满。笔者将设置 MergerFS 将多个挂载点统一,之后再设置 SnapRaid 定时备份,最终结束文件系统方面的设置。
哇,终于要结束硬盘和文件系统的折磨了,如释重负,可喜可贺 (●’?’●)。
2. 其他方案对比
在进入 mergerfs + SnapRaid 的组合之前,先解释一下笔者了解到的”数据备份”的其他方案:
-
RAID:
- 传统的 Raid:Raid1、Raid5 和 Raid10 都能够做到单磁盘恢复,但是拓展性通常受限
- btrfs 文件系统:能提供文件系统级别的 raid 功能,具有一定的可拓展性,并且拥有快照备份的功能
- zfs 文件系统:的 raidz 功能,也能提供良好的容错性,但是拓展性不足。
- LVM:LVM 支持 raid 功能,但同样面临拓展性难题
- rsync:基于 rsync 方式的备份工具,例如 Timeshift,可以定期备份数据。
由于笔者的硬盘打算之后一个个的增加,所以考虑拓展性的需求,只有 btrfs 系统以及 rsync 方式可以满足需求,但这两种各自有缺点:
- btrfs 提供的 raid 功能虽然可以拓展磁盘数量,但是在迁移时候的数据平衡所需要用时极长
- btrfs 会带来额外的性能下降,详见笔者的文章:ext4、ntfs、xfs、btrfs、zfs、f2fs和reiserFS文件系统性能对比
- Raid 通常会导致多磁盘同时读写,电力消耗大。
- rsync 不适合多磁盘体系备份,尽管可以使用 mergerfs 弥补此缺点,但是不够纯粹
综合考虑上面的缺点,笔者最终决定使用 mergerfs 进行数据盘统一,并用 SnapRaid 进行数据的定期备份。
3. MergerFS
3.1 基本介绍
mergerfs 是一个“融合型”的文件系统,其目的主要用于将不同存储设备上的文件管理统一在一起,类似于 mhddfs、unionfs 和 aufs 等融合文件系统。
mergerfs 的特性如下:
- 可配置的文件分布行为
- 随心所欲的添加或移除文件系统
- 独立的文件系统崩溃可容错
- 支持拓展特性
- 支持文件特性
- 运行时配置(通过 )
- 可在多种异构的文件系统上工作
- 写入时若文件系统空间不足,可自动迁移文件
- 写入时忽略只读文件系统
- 将只读文件转为指向实际文件的符 链接
- 硬链接的写时复制(CoW)机制
- 支持 POSIX ACLs
- … …
总的来说,mergerfs 能在逻辑上将多个路径合并在同一个路径下,类似于对集合取并集的操作。所有在统一路径下进行的文件操作,会自动被分散到各个下层的文件系统中执行。
一个 mergerfs 的工作例子如下:
使用 mergerfs 需要注意:
- mergerfs 不支持 aufs 和 overlayfs 中的写时复制(CoW)或留白行为。
- mergerfs 不能挂载一个只读的文件系统并向其写入。然而,在创建新文件时,mergerfs 将忽略只读驱动器,因此你可以混合读写和只读驱动器。
- mergerfs 也不会在各驱动器之间分割数据。它不是RAID0/条带化。它只是其他文件系统的一个联合体。
3.2 安装使用
先安装 mergerfs:
然后将多个挂载点(以 和 为例)临时挂载到统一处(以 为例):
然后,还需要将配置添加到 中,以实现开机自动:
大功告成,之后对 进行数据写入的话,数据会自动分散到 和 中,相当于两个分区在逻辑上并为一体。
4. SnapRaid
4.1 基本介绍
SnapRAID 是一个磁盘阵列的备份程序。它存储了数据的奇偶校验信息,并可以从多达六个磁盘故障中恢复。
SnapRAID 主要用于家庭环境中,尤其是在具有大量很少变化的大文件的环境下。
除了能够从磁盘故障中恢复外,SnapRAID的其他特点是:
- 所有的数据都是散列的,以确保数据的完整性,避免无声损坏。
- 如果失败的磁盘太多导致无法恢复,那么你只会损失失败磁盘上的数据。其他磁盘中的所有数据是安全的。
- 如果你不小心删除了一个磁盘中的一些文件,你可以恢复它们。
- 你可以从已经装满的磁盘开始。
- 磁盘可以有不同的大小。
- 你可以在任何时候添加磁盘。
- 它不会锁住你的数据。你可以在任何时候停止使用SnapRAID,而不需要重新格式化或移动数据。
- 要访问一个文件,只需要一个磁盘旋转,节省电力,产生的噪音也小。
SnapRaid 的工作原理十分简单,即预留一个校验盘,存储其余所有盘的数据所产生的校验值。SnapRaid 可以从此校验盘中所存储的校验值,以类似 Raid5 的方式,对其他所有盘的数据实现“备份”功能。值得注意的是,SnapRaid 并不会实时更新校验盘数据,而是需要手动设置定时任务来更新校验盘。
从以上列举的特性来看,SnapRaid 相较于传统的 Raid 阵列,限制更加的小,而且便于拓展,同时节省电力,因此适合在家庭这种低负担的环境下使用。
4.2 安装使用
这一小节部分参考自:SnapRAID – ArchWiki。
Ubuntu 官方源中已经加入 SnapRaid,可直接安装:
假设此处的数据盘挂载点为 和 ,并且校验盘的挂载点为 ,则在 文件中加入以下内容:
上面配置文件解释如下:
- 指定所需要备份的目录,此处 和 为任意名称,并指定数据目录 和
- 指定校验文件的存放位置,此处放在 。 可以指定多个文件,以做到多处备份,提高容错性
- 指定文件索引等备份所需要的元信息,可以指定多个位置防止丢失
? 注意:SnapRaid 的 parity 文件需要放置于剩余空间最大的磁盘中,否则无法存储所有数据盘的校验值
然后可以开始进行备份:
还原文件或文件夹, 须为数据盘中的绝对路径:
4.3 数据还原
如果此时 所对应的数据盘挂了,那么再执行数据还原前,修改 :
为
其中 为新补充的数据盘挂载点,之后开始还原:
即可将丢失的数据还原。
4.4 定时备份
定时备份是保证数据完整性的重要手段,因此这一节中会详细说明 SnapRaid 定时备份的设置。
此外,定期检查数据可以有效避免备份数据的污染,这个过程被称作 。
4.4.1 备份和校验脚本
本小节中,会把备份和校验的脚本都置于 下,因此文件写入命令和其他命令均需要以 权限执行。
首先,创建备份脚本 :
再创建校验脚本 :
4.4.2 (可选)开启/关闭 SSD 缓存
如果有参照本系列文章的上一期:家用 NAS 服务器(3)| SSD缓存加速机械硬盘,那么在定时备份期间,最好关闭 SSD 缓存,以减少不必要的 SSD 寿命消耗。没有设置 SSD 缓存的小伙伴们可以忽略这一章咯!
首先创建 :
以及 :
上面的 为需要开始/停止缓存的设备名,例如此处就是 ; 为缓存模式,建议设置为 或者 。
之后,修改 为:
以及修改 为:
脚本运行后,会在 处(此处为 )下生成日志。

4.4.3 cron 定时任务
进入 crontab 设置:
增加下面的定时任务:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!