Duplicity 介绍与选型指南
Duplicity 加密增量备份工具的认知与选型:librsync 增量、GPG 加密、20+ 存储后端架构,及与 rdiff-backup/Borg/Restic/rsnapshot 的量化对比(溯源查询日期 2026-10-22)
Duplicity 介绍与选型指南
目标:本文面向需要在 Linux 服务器上落地加密增量备份的读者,讲清 Duplicity 是什么、核心架构如何工作、能力边界在哪里,以及与 rdiff-backup、BorgBackup、Restic、rsnapshot 等同类工具的量化选型对比。本文为认知篇,全部内容基于官方公开资料联网溯源(来源与查询日期均在正文标注),命令级实测请见本专栏后续篇章。
一、环境信息
本文为 A1 认知篇,不依赖本地实验环境,仅联网溯源官方资料。溯源信息一览:
- 溯源对象:Duplicity(加密增量备份工具)
- 官方网站:https://duplicity.us/ (历史域名 nongnu.org/duplicity 仍可跳转)
- 代码仓库:https://gitlab.com/duplicity/duplicity
- 文档站:https://duplicity.gitlab.io/ (含 man page 与 CHANGELOG)
- PyPI:https://pypi.org/project/duplicity/
- 信息查询日期:2026-10-22
- 查询到的当前最新稳定版:3.2.2(官网首页 Download 节标注,来源 duplicity.us;GitLab Releases 页面 tag 为 rel.3.2.2)
二、软件概述
2.1 一句话定位
Duplicity 是一款基于 Python 编写的命令行加密增量备份工具,官方定义为「Encrypted bandwidth-efficient backup using the rsync algorithm」(使用 rsync 算法的加密、带宽高效备份,来源:duplicity.us 首页,查询日期 2026-10-22)。它将目录备份为加密的 tar 格式卷并上传到远端或本地文件服务器,因为使用 librsync 增量算法,备份档只记录自上次备份以来文件发生变化的部分,空间与带宽开销都很小;因为使用 GnuPG 加密和/或签名这些归档,备份内容对存储服务器来说是保密且防篡改的。
2.2 项目身世与发展节奏
- 代码完全遵循 GPL 自由软件许可,收录进 Debian、Ubuntu、Fedora 三大发行版的官方软件源(来源:duplicity.us 首页 "All the code here is GPL'ed..." 节,查询日期 2026-10-22)。
- 项目由 Kenneth Loafman 等社区维护者维护,代码托管于 GitLab(来源:GitLab Releases 页面署名,查询日期 2026-10-22)。
- 版本节奏(来源:duplicity.gitlab.io/stable/CHANGELOG.html,查询日期 2026-10-22):
- rel.3.0.7:2025-12-31
- rel.3.1.0:2026-06-16
- rel.3.2.2:2026-10(当前最新稳定版,官网首页于查询日 2026-10-22 显示为 current release)
- 3.2.2 版本重点(来源:GitLab Release 页 rel.3.2.2 Release Notes,查询日期 2026-10-22):
- 安全增强:后端日志与错误信息自动过滤 URL 中的敏感凭据;新增
--ignore-mdc-error选项,用于解密旧版 GPG 无 MDC(修改检测码)归档; - 后端稳定性修复:CloudFiles、Xorriso、JottaCloud、IMAP、MediaFire、Hubic 等后端异常处理修复;
- 可用性:临时文件清理日志降为 Debug 级,标准输出更干净;
- 兼容性:支持 Python 3.15;
- 国际化:通过 Crowdin 刷新 46 种语言翻译。
- 安全增强:后端日志与错误信息自动过滤 URL 中的敏感凭据;新增
- 周边生态(来源:duplicity.us 首页,查询日期 2026-10-22):
- Deja Dup:GNOME 桌面图形前端,由 Michael Terry 维护;
- duply:shell 脚本前端,用 profile 管理多个备份任务,支持 pre/post 脚本,由 Edgar Soldin 维护(duply.net)。
2.3 包含的工具
duplicity 软件包附带 rdiffdir 工具:它是 librsync 的 rdiff 向目录的扩展,可以生成目录的签名(signature)与增量(delta),签名为 GNU tar 格式,可独立用于「目录级差量」场景而不做完整备份(来源:duplicity.us 首页 "The duplicity package also includes the rdiffdir utility" 节,查询日期 2026-10-22)。
三、核心架构
3.1 备份流水线
Duplicity 的备份过程可以拆成四层(依据官网描述与 man page 结构归纳,来源 duplicity.us 与 duplicity.gitlab.io/stable/duplicity.1.html,查询日期 2026-10-22):
源目录 ──► 签名对比(librsync)──► 增量卷(tar 格式分卷)──► GnuPG 加密/签名 ──► 后端上传(S3/SFTP/Swift/...)
- 签名与差量层:首次备份做全量(full),之后每轮备份将源目录当前签名与上次备份的签名对比,仅提取变化部分(delta)生成增量(incremental)备份集。librsync 的滚动校验思路使「大文件中段修改」也只需传输变化块。
- 卷格式层:备份内容被组织成固定大小的 tar 格式卷(volume),每个卷一个文件,便于分片上传与断点续传。
- 加密层:所有卷、清单(manifest)与签名档默认经 GnuPG 对称加密(口令模式)或公钥加密(
--encrypt-key指定密钥),还可用--sign-key做数字签名,保证存储端无法窥视内容且篡改可被检出。 - 后端层:Duplicity 把「存到哪里」抽象为 URL,由后端模块对接具体协议与云服务商。
3.2 后端矩阵
官方支持的存储后端 URL 形式(来源:duplicity.us 首页后端列表,查询日期 2026-10-22;完整语法以发行版 duplicity --help 实际输出为准):
| 后端 | URL 形式 | 典型用途 |
|---|---|---|
| 本地文件 | file:///some_dir | 本机/挂载盘备份 |
| Amazon S3 | s3://other.host/bucket_name[/prefix] | 公有云对象存储 |
| Backblaze B2 | b2://account_id[:application_key]@bucket_name/[some_dir/] | 低成本云存储 |
| Microsoft Azure | azure://container_name | Azure Blob |
| Google Drive | gdrive://<service-account-url>/target-folder/... | 网盘协同 |
| Google Docs | gdocs://user[:password]@other.host/some_dir | 文档网盘 |
| OneDrive | onedrive://some_dir | 微软网盘 |
| Dropbox | dpbx:///some_dir | 网盘 |
| Mega | mega://user[:password]@other.host/some_dir | 网盘 |
| Rackspace Cloudfiles | cf+http://container_name | OpenStack 系 |
| SwiftStack / Swift | swift://container_name | OpenStack 对象存储 |
| Microsoft Azure 之外的 GIO | gio://...(配合 --gio) | GNOME VFS 挂载 |
| rclone | rclone://remote:/some_dir | 借 rclone 打通 40+ 网盘 |
| rsync | rsync://user[:password]@other.host[:port]/relative_path | 传统同步 |
| ssh/scp/sftp | ssh://user[:password]@other.host[:port]/some_dir | 远程主机 |
| ftp / ftps | ftp://user[:password]@other.host[:port]/some_dir | 传统 FTP |
| WebDAV | webdav://user[:password]@other.host/some_dir | 网盘/自建 |
| IMAP | imap://user[:password]@other.host[:port]/some_dir | 邮箱当存储 |
| Tahoe-LAFS | tahoe://alias/directory | 分布式安全存储 |
| par2 | par2://... | 生成校验修复卷 |
💡 技术拓展:备份目标不止「直连后端」一种打法。若目标存储不在官方后端列表(例如某些国产对象存储),常见的三条路是——① 用 rclone 后端借道 rclone 已支持的数十种存储;② 用 FUSE 把对象存储挂成本地目录再走
file://后端;③ 走 ssh/ftp 类传统协议中转。官网后端列表里rclone://的存在,实际让 Duplicity 的可达面覆盖了 rclone 的整个存储矩阵。
四、功能特性
以下特性均来自官方站与 PyPI 页描述(来源:duplicity.us 首页与 pypi.org/project/duplicity,查询日期 2026-10-22):
- 加密与签名:基于 GnuPG,可对称口令加密、可公钥加密、可同时签名,防窥视 + 防篡改。
- 带宽高效:rsync 算法只传变化部分,适合慢速/计费线路做远程备份。
- 增量归档省空间:只保存自上次备份以来变化的数据块。
- 多后端:见 3.2 节矩阵,覆盖本地与主流云存储。
- 完整 Unix 语义支持:支持已删除文件记录、完整 Unix 权限、目录、符号链接、fifo、设备文件。
- 时间点恢复(PITR):恢复时可指定时间,还原到历史任意备份时刻的状态(man page 的
--restore-time语义)。 - 备份集生命周期管理:内置按时间(
remove-older-than)与按份数(remove-all-but-n-full、remove-all-inc-of-but-n-full)的过期清理动作。 - 无服务器架构:Duplicity 本体只是 CLI 进程,无常驻服务、无数据库,不占服务端口,调度靠 cron/systemd timer。
五、快速开始(最小可用示例)
以下命令形态来自官方 man page 的 DESCRIPTION/EXAMPLES 结构(来源:duplicity.gitlab.io/stable/duplicity.1.html,查询日期 2026-10-22),用于建立对使用方式的整体认知;每条命令在 Ubuntu 22.04 的完整安装、真实回显与验证,见本专栏 《Ubuntu 22.04 安装 Duplicity 指南》与《Duplicity 常用 CLI 命令详解》。
# 1) 全量备份 /home/me 到远端 sftp,并加密
duplicity /home/me sftp://uid@other.host/some_dir
# 2) 日常增量(省略动作词时自动判断:无全量则全量,有全量则增量)
duplicity /home/me sftp://uid@other.host/some_dir
# 3) 恢复整个目录
duplicity sftp://uid@other.host/some_dir /restore/dir
# 4) 恢复到 7 天前的状态
duplicity -t 7D sftp://uid@other.host/some_dir /restore/dir
# 5) 列出当前备份里的所有文件
duplicity list-current-files sftp://uid@other.host/some_dir
最小闭环的三要素:源目录 + 目标 URL + 加密口令(PASSPHRASE 环境变量或交互输入)。设置定时任务时通常配合 cron 与环境变量脚本,本专栏 《Duplicity 配置参数详解》给出现成的生产模板。
六、适用场景与限制
6.1 适合的场景
- 异地/云端加密备份:数据敏感、不信任存储端(网盘/S3/租用服务器),GPG 加密是刚需。
- 带宽宝贵的远程增量:rsync 增量只传变化块,适合 VPS → NAS、IDC → 云这类长线路。
- 无常驻服务诉求:CLI + cron 即可运转,不引入额外攻击面与资源占用。
- 多目标异构存储:同一套命令与参数即可在 file/S3/Swift/SFTP/WebDAV 之间切换。
6.2 已知限制(官方口径)
- 不支持硬链接:官网原文明确 "Currently duplicity supports deleted files, full unix permissions, directories, and symbolic links, fifos, and device files, but not hard links."(来源:duplicity.us 首页,查询日期 2026-10-22)。备份源目录若大量使用硬链接(如 rsnapshot 快照池),会退化为多份实体数据。
- POSIX 系统限定:官方 README 要求 POSIX-like 操作系统,最适 GNU/Linux,Windows 原生不在支持范围。
- 恢复依赖备份链完整:增量链上任一卷损坏都会影响其后时间点的恢复,因此需要定期全量(
full动词或--full-if-older-than)配合清理命令收敛链条。 - 元数据缓存目录:恢复/对比时依赖本地 archive dir(默认
~/.cache/duplicity)中的元数据缓存,换机恢复首轮回显会多一次远端元数据同步。
6.3 版本选型提示
发行版仓库版本往往滞后:Ubuntu 22.04 jammy 官方源收录为 0.8.21 系列,而官方当前最新稳定版为 3.2.x(版本事实均见前文溯源标注)。两条版本线的 --help 输出结构、选项默认值有可见差异(例如 3.x 新增 --help-backup、--help-urls 等分命令帮助),混装时官方明确警告必须先彻底卸载发行版版本再装 tarball/pip 版本,否则安装路径不同会产生「混乱的结果」(来源:duplicity.us 首页 Warning 节,查询日期 2026-10-22)。Ubuntu 22.04 上的安装方案与双版本对照实测,见本专栏 《Ubuntu 22.04 安装 Duplicity 指南》。
七、同类选型对比
在 Linux 备份工具里,Duplicity 的邻居主要有 rdiff-backup、BorgBackup、Restic、rsnapshot。下表为功能维度的横向对比(各项目能力描述依据各自官方文档与发布信息归纳,查询日期 2026-10-22;Duplicity 行信息来源同前文标注):
| 维度 | Duplicity | rdiff-backup | BorgBackup | Restic | rsnapshot |
|---|---|---|---|---|---|
| 实现语言 | Python | Python | Python + C | Go | Perl + shell |
| 增量机制 | librsync 差量,增量集链条 | librsync 反向差量(远端保存当前态) | 内容定义分块(chunking)去重 | 内容定义分块去重 | rsync + 硬链接快照 |
| 加密 | GnuPG(对称/公钥/签名),默认开启 | 无内置加密 | 内置 AES-OCB(仓库级加密) | 内置 AES-256(仓库级加密) | 无内置加密 |
| 压缩 | zlib 默认开启(可 --no-compression) | 无内置压缩 | 内置(zstd/lz4/zlib/lzma) | 内置(zstd/gzip,可关) | 无(依赖文件系统) |
| 去重 | 无跨卷去重 | 无 | 跨文件全局去重 | 跨快照全局去重 | 硬链接级(同一快照池内) |
| 恢复模型 | 任意时间点恢复(PITR) | 恢复任意历史时点(反向差量) | 挂载/提取快照 | 挂载/提取快照 | 直接只读浏览目录树 |
| 目标存储 | 20+ 官方后端(S3/Swift/B2/GDrive/SFTP/...) | ssh/rsync 可达目录(v2.x 起) | ssh 或本地文件系统(仓库挂载) | 本地/SFTP/S3/B2/Azure/GCS/rclone | 本地或 ssh 可达目录 |
| 硬链接支持 | 不支持 | 支持 | 支持 | 支持 | 核心原理即硬链接 |
| 运行形态 | 纯 CLI,无常驻服务 | 纯 CLI | CLI + 仓库常驻锁 | 纯 CLI | CLI + cron |
| 许可证 | GPL | GPL-2.0+ | BSD-2 | BSD-2 | GPL-2.0+ |
关键差异与选型解读:
- 谁该选 Duplicity:首要诉求是「加密 + 云端/异构后端 + 带宽增量」。它是五者中后端矩阵最宽的,且加密在客户端完成,对网盘/对象存储零信任场景最友好;配合 Deja Dup 图形前端还能覆盖桌面场景。
- 谁该选 Borg:本机或自有服务器上追求「去重 + 压缩 + 加密」三合一、数据量大且重复度高(虚拟机镜像、代码仓库),且能接受 ssh/本地仓库形态;其 FUSE 挂载快照体验优于 Duplicity 的整目录恢复。
- 谁该选 Restic:想要 Borg 的去重/加密能力但需要 Go 单二进制、跨平台(含 Windows)、直接对接 S3/B2/Azure/GCS 仓库;快照模型与
restic mount的体验接近现代云原生习惯。 - 谁该选 rdiff-backup:想要「远端始终保留一份可直接浏览的最新目录 + 历史差量」且无需加密的局域网场景;它是 Duplicity 的同源近亲(同用 librsync),但后端面窄、无加密。
- 谁该选 rsnapshot: NAS/本地大容量盘上做定时快照轮转,追求目录树可直接浏览、实现最简单;代价是存储与带宽效率最差、无加密无压缩。
💡 技术拓展:备份工具的两大流派——快照流(Borg/Restic/rsnapshot:每次备份形成不可变快照,靠去重/硬链接省空间)与差量链流(Duplicity/rdiff-backup:全量基线 + 增量差量链条)。差量链流省带宽见长(只传 delta),快照流省恢复粒度与完整性管理(单快照自包含)。Duplicity 通过
full动词定期重建基线来缓解长链风险,这也是生产模板中「每周全量 + 每日增量 + 按份数清理」策略的由来。
八、参考链接
- 官方网站(项目介绍/下载/后端列表):https://duplicity.us/index.html (查询日期 2026-10-22)
- GitLab 仓库与 Releases:https://gitlab.com/duplicity/duplicity (查询日期 2026-10-22)
- 稳定版 man page:https://duplicity.gitlab.io/stable/duplicity.1.html (查询日期 2026-10-22)
- CHANGELOG:https://duplicity.gitlab.io/stable/CHANGELOG.html (查询日期 2026-10-22)
- PyPI 项目页:https://pypi.org/project/duplicity/ (查询日期 2026-10-22)
- duply(shell 前端):http://duply.net/
- Deja Dup(GNOME 图形前端):https://wiki.gnome.org/Apps/DejaDup/
- 邮件列表:http://lists.nongnu.org/mailman/listinfo/duplicity-talk
- 本专栏实操篇:《Ubuntu 22.04 安装 Duplicity 指南》、《Duplicity 配置参数详解》、《Duplicity 常用 CLI 命令详解》