数据备份是NAS用户的头等大事,但传统的文件级备份在面对大量小文件和频繁变更时效率低下。块级增量备份技术能够精确追踪数据块的变化,只备份实际修改的部分,大幅减少备份时间和存储空间。本文将对比Borg、Restic和Duplicacy三种主流块级增量备份工具,并介绍如何构建从本地到云端的多级灾难恢复方案。
一、块级增量备份 vs 文件级增量备份
文件级增量备份通过比较文件的修改时间或元数据,只备份新增或修改的文件。这种方式简单直观,但当大文件只有少量修改时(例如一个10GB的虚拟磁盘文件只改了1MB),仍然需要备份整个文件,造成大量的时间和空间浪费。
块级增量备份则将文件分割为固定大小的数据块(通常4KB-1MB),通过内容寻址(Content-Addressable Storage)为每个数据块计算哈希值。备份时只传输和存储哈希值发生变化的数据块。对于大文件的局部修改,只需备份修改的几个数据块,效率提升数十倍。
去重(Deduplication)是块级备份的另一大优势。通过内容哈希,相同的数据块只存储一份。即使文件路径不同、文件名不同,只要内容相同就会被去重。这对于NAS上大量重复数据(如备份的虚拟机、容器的镜像层)特别有效。
二、BorgBackup:高效去重的命令行备份利器
BorgBackup(简称Borg)是Python编写的去重备份程序,以高效率和低资源占用著称。它使用AES-256加密保护备份数据,支持LZ4、zstd等多种压缩算法,通过FUSE可以挂载备份仓库进行浏览和恢复。
Borg的核心概念是仓库(Repository)和归档(Archive)。一个仓库可以包含多个归档,每个归档代表一次备份快照。Borg自动进行全局去重,同一仓库内所有归档共享相同的数据块,存储效率极高。
在NAS上使用Borg的最佳实践是:为每台需要备份的设备创建独立的仓库,设置保留策略(如--keep-daily=7 --keep-weekly=4 --keep-monthly=6),定期运行prune命令清理过期归档。配合systemd timer实现自动化备份调度。
Borg的一个限制是不支持原生S3存储后端。如果需要备份到云存储,需要配合Borgmatic工具,它提供了更友好的YAML配置和多个云存储后端支持。或者考虑使用支持S3的Restic。
三、Restic:云原生的现代备份方案
Restic是用Go语言编写的备份工具,与Borg的最大区别是原生支持多种存储后端:本地目录、SFTP、REST Server、Amazon S3、MinIO、Backblaze B2、Azure Blob Storage等。这使得Restic非常适合需要将备份数据存储到异地的灾难恢复场景。
Restic同样采用内容寻址和去重技术,数据完整性通过SHA-256校验保证。每次备份前自动检测仓库完整性,发现损坏的数据块会自动修复。支持快照备份和增量恢复,恢复速度非常快。
在NAS上部署Restic作为中央备份服务器是一个好选择。使用rest-server提供REST API后端,其他设备通过Restic客户端将数据备份到NAS上。NAS自身的备份数据则可以通过Restic推送到远程S3存储或另一台NAS,实现异地容灾。
Restic的缓存机制值得注意。首次备份时需要在本地构建数据块索引,对于大量文件可能耗时较长。但后续增量备份非常快速,因为只检查变更的文件和块。缓存目录可以放在SSD上加速索引查找。
四、Duplicacy:高性能的商业级备份方案
Duplicacy虽然部分功能需要付费,但其性能和易用性值得推荐。它采用与Borg类似的块级去重技术,但用Go重写了核心引擎,备份和恢复速度更快。特别值得一提的是Duplicacy的Lock-Free去重设计,多个备份任务可以并发写入同一仓库而不会产生锁竞争。
Duplicacy的独特优势在于对大文件的处理效率。它采用可变大小的块分割算法(类似于CDC - Content-Defined Chunking),当文件内容发生插入或删除时,变化的影响范围被限制在受影响的块附近,而不像固定大小分块那样可能引起级联变化。这显著减少了增量备份的数据量。
在NAS环境中,Duplicacy可以直接备份正在被使用的虚拟磁盘文件和数据库文件。它支持Volume Shadow Copy(VSS),能够在文件被锁定的情况下创建一致性快照进行备份。
五、构建多级灾难恢复体系
真正的数据安全需要遵循3-2-1备份法则,但实践中还需要更精细的分级策略。第一级是本地快照保护,利用ZFS的自动快照或Btrfs的定时快照,在文件误删或被勒索时快速回滚。
第二级是本地备份,使用Borg或Restic将NAS数据备份到同一网络内的另一台设备(如另一台NAS、外接USB硬盘)。这一级侧重于硬件故障防护,能够在磁盘损坏时快速恢复。
第三级是异地容灾,通过Restic将关键数据推送到远程S3存储(如Backblaze B2、Wasabi,成本极低)。这一级防护火灾、水灾等区域性灾难,是数据安全的最后一道防线。
自动化的备份验证同样重要。定期进行恢复测试,确认备份数据的完整性和可恢复性。可以编写脚本每月自动从备份中随机抽取文件进行验证,并将验证结果发送邮件通知。
六、勒索病毒防护与不可变备份
传统的备份方案在面对勒索病毒时可能无能为力,因为勒索病毒可能同时加密备份。不可变备份(Immutable Backup)是应对勒索的最佳策略。
Restic支持--keep-set参数配合不可变标记,确保归档在指定时间内无法被删除或修改。Backblaze B2和AWS S3 Glacier支持对象锁定(Object Lock),在存储层强制实施不可变性。即使攻击者获取了备份系统的访问权限,也无法删除受保护的备份数据。
ZFS的只读快照也提供类似保护。将快照发送到远程NAS时使用zfs send,配合只读属性,可以防止备份数据被篡改。结合网络隔离(备份网络与生产网络分离),可以构建起有效的勒索防护体系。


评论(0)