自建 NAS 方案是很多不折腾不舒服斯基星人的选择。在自建 NAS 中,可能没有办法直接使用商业方案中成熟的数据备份方案,因此我们需要根据自己的实际需求,探讨一些低成本的、安全的数据备份方案。本文将针对常见的数据备份方案进行分析和探讨,对比各个方案的优劣,以期找到一个更合适自己的方案。

由于自建 NAS 本身有很多种方案可以选择,为减少误解,将讨论范围约束如下:

  • 基于 Linux based NAS 解决方案。基于 Win 的方案和基于 BSD 的方案不在讨论范围之内;
  • 群晖、威联通等商业 NAS 解决方案会有一些特别的地方,我也不太熟悉,因此不在讨论范围之内。

需求分析

从数据备份的角度来说,通常需要把需求拆解成 3 个维度:

  1. 数据安全性,即数据是否需要绝对不丢失;
  2. 数据可用性,即数据是否需要即时可用;
  3. 成本,即数据备份所产生的成本。

这三者实际上是一个不可能三角,即三者不可能同时成立。因此想清楚自己的实际需求就非常重要。

  • 对于企业而言,数据安全性和数据可用性都非常重要,可以在相对高成本下来达成这个目标;
  • 对于个人而言,对数据安全性和数据可用性的要求都相对更低,对成本有一定的敏感性。

以我的实际使用情况而言,NAS 的主要用途分为三类:

  1. 文档类数据:重要性很高,数据量小,不可接受数据丢失,希望数据随时可用;
  2. 家庭照片数据:重要性高,数据量大,可接受少量数据丢失,可接受一段时间数据不可用,希望可以有相当更低的成本;
  3. 电影数据:重要性一般,数据量大,可接受数据丢失,可接受一段时间数据不可用。

可以看到,这三类数据对备份的需求实际是不一样的。一股脑的选择 RAID,不见得就是最合适的方案。

常见方案对比

1. RAID

RIAD 是网上是目前 NAS 上最火的数据备份方案。

简单来说,RAID 指的是将一份数据同时写入到多个磁盘之上,在数据写入的时候就直接达到备份的目的,也是企业级方案中非常普遍的方法。在 NAS 上常用的 RAID 方案主要有:

  • RAID1 :磁盘镜像,相当于把一份数据同时写入到两个硬盘当中,两个硬盘的内容是完全一样的。当一块硬盘故障后,第二块硬盘可以直接拿来使用,并包含完整的全量数据;

    • Pros: 简单可靠,没有复杂的恢复操作;
    • Cons: 浪费了一快硬盘的空间。
  • RAID5 :分布式奇偶校验的独立磁盘结构,相当于把数据和校验信息分别存储到多块硬盘上。当一块硬盘故障后,可以通过数据重建来恢复数据。

    • Pros: 硬盘空间利用率相对更高,可以存更大量的数据;
    • Cons: 重建比较麻烦,一旦重建失败就完蛋了;需要至少 3 块硬盘。

在普遍的家用场景中,如果数据量没有那么大的话,一般会推荐 RAID1 方案,需要的硬盘更少,并且恢复起来也很简单,直接使用剩下的硬盘即可,无需复杂的操作。相比而言,RAID5 不仅需要更多的硬盘,关键问题是,一旦重建失败就彻底完蛋了。

然而,RAID 方案毕竟是多块硬盘同时使用,其使用环境、写入的数据量等等,多块硬盘都是完全一样的。假设硬盘批次也是一样的,从网上的历史经验看,两块(多块)硬盘一起出故障的概率还是很高的。如果短时间内超过一块硬盘一起挂掉,那数据就玩完了。

至于很多人说的 3-2-1 备份原则 ,虽然确实可以让数据更安全,但我认为在家庭环境中不太现实,不仅成本高,维护起来也非常麻烦。

简单总结一下,基于 RAID 的备份方案:

Pros:

  1. 数据安全性高:在数据写入时,即可完成备份操作,数据不会不一致;
  2. 数据可用性高(指RAID1):当一块硬盘故障时,另一块硬盘可无缝使用,直接提供数据相关服务;
  3. 成本中:最少只需要两块硬盘即可。

Cons:

  1. 数据风险性中:由于两块硬盘使用情况相似,一起故障的概率相对偏高。

2. Rsync

Rsync 是 Linux 下常用的增量式数据备份方案,可以在本地复制,也可以与其他SSH、rsync主机同步。简单来说,Rsync 就相当于把数据复制了一份到其他任意位置。

使用 Rsync 备份的操作也很简单:

rsync -av --delete ${要备份的路径} ${目标路径}

然后添加到定时任务即可。由于是增量备份,所以一般速度也很快。

可以看出,相比于 RAID 而言,基于 Rsync 的备份方案其实是一种冷备的方案。即通过定时地把数据备份到其他地方(硬盘),而非是实时的。数据是否缺失,主要取决于备份的频率。

不过,正由于 Rsync 是一种冷备的方案,反而有一些不一样的优势。

Pros:

  1. 备份盘只需要在备份操作发生时才使用,因此可以添加休眠的策略,延长硬盘的寿命,还能降低噪音;
  2. 由于主硬盘和备份盘的使用方式不同,因此两块硬盘一起故障的概率变低。

而相应的缺点是:

Cons:

  1. 由于不是实时备份,所以两次备份周期内新产生的数据存在丢失的风险。

3. BTRFS (ZFS)

BTRFS 是一个与 ZFS 非常类似的支持写时复制(COW)特性的现代文件系统。在我认为,btrfs 是一个非常适合 NAS 的文件系统,主要因为:

  1. 支持 RAID,比 LVM 和 madam 使用起来相对更简单;
  2. 支持透明压缩,可以在几乎无感知的情况下节省磁盘空间,尤其适合备份盘;
  3. 支持子卷(Subvolume),相比于固定的分区会更加灵活;
  4. 支持快照(Snapshot),在增加很少空间的情况下,可以用来实现文件误操作的恢复;
  5. 支持以快照为粒度进行增量备份,相当于在 Rsync 的基础上支持快照,并且还只增加少量的磁盘占用。

简单总结一下就是:既能支持非常灵活的备份策略,又能透明压缩以节省磁盘空间,还可以通过快照实现文件回滚。简直是 NAS 的福音。我想,这可能也是为什么群晖官方默认支持 Btrfs 文件系统。

我想,唯一的缺点可能是,需要格式化一下生成新的文件系统吧。

4. 网盘

这个方案有点异类,与上述几个方案都不太一样。上述几个方案本质上是备份到本地其他磁盘,而网盘的方案是备份到云端。而由于国内常用网盘都不支持 Linux,因此只能另辟蹊径。

目前,我能想到的方案主要有 3 个:

  1. 虚拟机方案:通过 samba 协议将需要备份的目录挂载至 Windows 虚拟机(或宿主机),然后在 Windows 系统中安装网盘客户端,实现文件的上传与备份;
  2. rclone + aliyundrive-webdav 方案:aliyundrive-webdav 负责将阿里云盘转成 webdav 协议,然后 rclone 负责将数据加密并同步到阿里云盘。至于加密的原因,你懂得 :-)
  3. rclone + 国外网盘:与上面相似,不再复述。

这个方案的优势是:

  1. 对于重要数据而言,备份到网盘的数据安全性终归是要更好的。有 rclone 的加密支持,即时在国内网盘上,数据安全也有一定的保障;
  2. 算是曲线实现了上文提到的数据备份的 3-2-1 策略。

缺点嘛:

  1. 也不知道哪天就不能用了。不过 rclone + aliyundrive-webdav 的方案我也用了小三年了,也还好。

总结

上面提到的这些方案,都是我近几年实际尝试过的方案。每个方案都有自己的优势与不足,所以没有最好的方案,只有最合适自己的选择。

还记得我的实际需求么?

  1. 文档类数据:使用虚拟磁盘做 RAID1,并通过 rclone + aliyundrive-webdav 上传至阿里云盘,实现数据的安全可靠;
  2. 家庭照片数据:使用 Btrfs + Snapshot 的方式做冷备,极端情况下可接受少量数据丢失;磁盘休眠后还能省电和减少噪音;
  3. 电影数据:不备份,爱丢丢,大不了重新下载。

从实践角度,23 年底我真有一块主硬盘出现 I/O Error,而数据没有任何损失 :-)

Others

P.S. 本文是我第一次用自然码双拼输入法完成。磕磕绊绊,以表纪念 :-)