家用 NAS 服务器(4)| MergerFS和SnapRaid数据定时备份

家用 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的其他特点是:

  1. 所有的数据都是散列的,以确保数据的完整性,避免无声损坏。
  2. 如果失败的磁盘太多导致无法恢复,那么你只会损失失败磁盘上的数据。其他磁盘中的所有数据是安全的。
  3. 如果你不小心删除了一个磁盘中的一些文件,你可以恢复它们。
  4. 你可以从已经装满的磁盘开始。
  5. 磁盘可以有不同的大小
  6. 你可以在任何时候添加磁盘
  7. 它不会锁住你的数据。你可以在任何时候停止使用SnapRAID,而不需要重新格式化或移动数据
  8. 要访问一个文件,只需要一个磁盘旋转,节省电力,产生的噪音也小。

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进行处理,非常感谢!

上一篇 2022年11月6日
下一篇 2022年11月7日

相关推荐