NAS 数据守护神:用 Duplicati 构建免费的加密异地备份系统

前言:为什么你的 NAS 数据需要一个“异地容灾”方案?

你购买 NAS,是为了安全、集中地存储你最重要的数字资产:家庭照片、工作文档、影音收藏……你可能已经设置了 RAID 阵列来防止硬盘物理损坏。但这足够安全吗?

请思考以下场景:

  • 火灾、盗窃或自然灾害:如果你的 NAS 设备本身遭遇物理损毁,RAID 也无能为力。
  • 勒索软件攻击:恶意的加密病毒会同时感染你的电脑和 NAS,所有文件都将被锁定。
  • 意外删除或逻辑错误:人为的误操作或软件 Bug 可能导致数据丢失。

这就是异地备份至关重要的原因。它遵循着经典的 3-2-1 备份原则:数据至少有 3 份副本,存储在 2 种不同类型的介质上,其中至少有 1 份存放在异地。

Duplicati,就是一个免费、开源、强大的工具,能让你的 NAS 轻松实现这一目标。它能将你的数据以加密、压缩、增量的方式,自动备份到几乎任何云存储服务商那里,为你的数据提供终极保护。

这篇博客将带你深入了解 Duplicati 的工作原理,并指导你如何通过 Docker 在 NAS 上轻松部署和配置它。


Duplicati 的核心工作原理

Duplicati 不是简单的“复制-粘贴”。它之所以强大和高效,得益于其精巧的设计:

  1. 数据分块与去重 (Deduplication)

    • 在开始备份前,Duplicati 会将你的文件切成许多个固定大小的小数据块 (Block)。
    • 它会计算每个数据块的哈希值。如果一个数据块(例如,某张照片的一部分)在之前的备份中已经存在,Duplicati 就不会再次上传它,而仅仅是记录一个引用。这对于备份虚拟机镜像、或者包含大量重复内容的文件夹效果极其显著,能极大节省存储空间。
  2. 增量备份 (Incremental Backup)

    • 首次备份是“完全备份”。在此之后,Duplicati 只会备份那些被修改或新增的文件所对应的新数据块。这使得日常备份速度极快,且占用带宽极低。
  3. AES-256 加密

    • 这是 Duplicati 的灵魂功能。所有数据块在离开你的 NAS 之前,都会使用强大的 AES-256 算法进行加密。这意味着,即使你将数据备份到公共云盘(如 Google Drive, OneDrive),云服务商也无法窥探你的文件内容。你的隐私得到了绝对的保障。
  4. 压缩与打包

    • 加密后的数据块会被压缩,并打包成一个个加密卷文件(通常是 .dblock 文件),然后上传到你选择的云端目的地。

Duplicati 的优缺点分析

优点 (Pros) 缺点 (Cons)
完全免费且开源 ⚠️ 仍处于 Beta 阶段。虽然功能稳定,但长期未发布正式版,可能存在未知 Bug。
强大的加密 ⚠️ 数据库是弱点。其本地数据库对备份至关重要,若损坏修复起来可能很麻烦。
极致的存储效率(去重) ⚠️ 恢复速度可能较慢。特别是恢复大量小文件时,需要从云端下载多个卷并解密重组。
广泛的后端支持(几乎所有云) ⚠️ 首次备份较慢。需要对所有文件进行分块、哈希、加密和压缩。
灵活的调度和保留策略
跨平台,Web UI 管理方便

结论:Duplicati 是一个功能强大、值得信赖的免费备份工具,尤其适合注重隐私和存储成本的个人用户。但你需要了解它的“Beta”状态和对本地数据库的依赖性,并做好相应的维护。


实战篇:在 NAS 上通过 Docker 部署 Duplicati

在 NAS 上部署 Duplicati 的最佳方式是使用 Docker,它隔离了运行环境,干净又高效。这里以群晖 DSM 为例,但原理适用于任何支持 Docker 的 NAS。

步骤 1:创建必要的文件夹

通过 File Station 在你的 NAS 上创建以下文件夹:

  1. Duplicati 配置文件夹:用于存放 Duplicati 的数据库和配置文件。例如:/volume1/docker/duplicati/config
  2. 备份源数据文件夹:这是你想要备份的数据存放的地方。我们稍后会将其映射到容器中。例如:/volume1/MyData

步骤 2:使用 Docker Compose 部署 (推荐)

通过 SSH 登录到你的 NAS。创建一个名为 docker-compose.yml 的文件,并填入以下内容。这是管理 Docker 应用的最佳实践。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3.8"
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1026 # 替换为你的用户ID
- PGID=100 # 替换为你的用户组ID
- TZ=Asia/Shanghai # 替换为你的时区
volumes:
- /volume1/docker/duplicati/config:/config
- /volume1/MyData:/source/mydata # 将你的数据文件夹映射到容器的 /source 目录
- /volume1/Photos:/source/photos # 你可以添加多个数据源
ports:
- "8200:8200"
restart: unless-stopped

配置详解

  • PUIDPGID:这是运行容器的用户和用户组 ID。为了避免权限问题,你需要将其设置为对源数据文件夹有读取权限的用户的 ID。在 NAS 的 SSH 终端中输入 id <你的用户名> 即可查到。
  • TZ:设置正确的时区,确保定时备份任务按时执行。
  • volumes这是最关键的部分
    • - /volume1/docker/duplicati/config:/config:将配置文件夹挂载到容器内部,实现数据持久化。
    • - /volume1/MyData:/source/mydata:将你想要备份的实际数据文件夹(左侧)映射到容器内的一个路径(右侧)。你可以添加任意多行,来映射不同的源文件夹。
  • ports:将容器的 8200 端口映射到 NAS 的 8200 端口,以便我们访问 Web UI。

步骤 3:启动容器

docker-compose.yml 文件所在的目录,运行以下命令:

1
docker-compose up -d

Docker 将会自动下载镜像并根据你的配置启动容器。

步骤 4:配置你的第一个备份任务

  1. 在浏览器中访问 http://<你的NAS_IP地址>:8200
  2. 你会看到 Duplicati 的主界面。选择“Add backup” -> “Configure a new backup”。
  3. General:给你的备份任务起个名字,例如“NAS 重要文档备份”。选择“AES-256 encryption”,并设置一个极其复杂且你能记住的密码警告:丢失此密码等于丢失所有备份数据!
  4. Destination:选择你的云存储提供商。Duplicati 支持的列表非常长,包括 Google Drive, OneDrive, Dropbox, Amazon S3, FTP, WebDAV 等。根据提示完成授权和配置。
  5. Source Data:在左侧的树状图中,你会看到一个名为 source 的文件夹,这正是你在 docker-compose.yml 中映射进去的。勾选你想要备份的子文件夹(如 mydata, photos)。
  6. Schedule:设置你希望备份任务自动运行的时间,例如“每天凌晨3点”。
  7. Options
    • Remote volume size:建议设置为 50MB100MB。这是上传到云端的加密卷的大小,太小会产生过多文件,太大则不利于断点续传。
    • Backup retention:设置保留策略,例如“Keep a specific number of backups: 7”,意味着只保留最近7个版本的备份。这可以防止云端空间被无限占用。
  8. 保存配置,并可以手动点击“Run now”开始你的第一次备份。

结语

在 NAS 上部署 Duplicati,就像是为你的数据买了一份高额的“数字保险”。它以几乎零成本的方式,为你提供了企业级的加密和异地备份能力,让你在面对任何灾难时都能泰然处之。

虽然它仍是 Beta 版,但其强大的功能和灵活性,以及活跃的社区支持,使其成为 NAS 用户数据保护方案中不可或缺的一环。现在就动手,为你的宝贵数据加上这把坚不可摧的“安全锁”吧!