Duplicity 介绍与选型指南

Duplicity 加密增量备份工具的认知与选型:librsync 增量、GPG 加密、20+ 存储后端架构,及与 rdiff-backup/Borg/Restic/rsnapshot 的量化对比(溯源查询日期 2026-10-22)

Duplicity备份恢复2026/10/22

Duplicity 介绍与选型指南

目标:本文面向需要在 Linux 服务器上落地加密增量备份的读者,讲清 Duplicity 是什么、核心架构如何工作、能力边界在哪里,以及与 rdiff-backup、BorgBackup、Restic、rsnapshot 等同类工具的量化选型对比。本文为认知篇,全部内容基于官方公开资料联网溯源(来源与查询日期均在正文标注),命令级实测请见本专栏后续篇章。

一、环境信息

本文为 A1 认知篇,不依赖本地实验环境,仅联网溯源官方资料。溯源信息一览:

二、软件概述

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 种语言翻译。
  • 周边生态(来源: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/...)
  1. 签名与差量层:首次备份做全量(full),之后每轮备份将源目录当前签名与上次备份的签名对比,仅提取变化部分(delta)生成增量(incremental)备份集。librsync 的滚动校验思路使「大文件中段修改」也只需传输变化块。
  2. 卷格式层:备份内容被组织成固定大小的 tar 格式卷(volume),每个卷一个文件,便于分片上传与断点续传。
  3. 加密层:所有卷、清单(manifest)与签名档默认经 GnuPG 对称加密(口令模式)或公钥加密(--encrypt-key 指定密钥),还可用 --sign-key 做数字签名,保证存储端无法窥视内容且篡改可被检出。
  4. 后端层:Duplicity 把「存到哪里」抽象为 URL,由后端模块对接具体协议与云服务商。

3.2 后端矩阵

官方支持的存储后端 URL 形式(来源:duplicity.us 首页后端列表,查询日期 2026-10-22;完整语法以发行版 duplicity --help 实际输出为准):

后端URL 形式典型用途
本地文件file:///some_dir本机/挂载盘备份
Amazon S3s3://other.host/bucket_name[/prefix]公有云对象存储
Backblaze B2b2://account_id[:application_key]@bucket_name/[some_dir/]低成本云存储
Microsoft Azureazure://container_nameAzure Blob
Google Drivegdrive://<service-account-url>/target-folder/...网盘协同
Google Docsgdocs://user[:password]@other.host/some_dir文档网盘
OneDriveonedrive://some_dir微软网盘
Dropboxdpbx:///some_dir网盘
Megamega://user[:password]@other.host/some_dir网盘
Rackspace Cloudfilescf+http://container_nameOpenStack 系
SwiftStack / Swiftswift://container_nameOpenStack 对象存储
Microsoft Azure 之外的 GIOgio://...(配合 --gio)GNOME VFS 挂载
rclonerclone://remote:/some_dir借 rclone 打通 40+ 网盘
rsyncrsync://user[:password]@other.host[:port]/relative_path传统同步
ssh/scp/sftpssh://user[:password]@other.host[:port]/some_dir远程主机
ftp / ftpsftp://user[:password]@other.host[:port]/some_dir传统 FTP
WebDAVwebdav://user[:password]@other.host/some_dir网盘/自建
IMAPimap://user[:password]@other.host[:port]/some_dir邮箱当存储
Tahoe-LAFStahoe://alias/directory分布式安全存储
par2par2://...生成校验修复卷

💡 技术拓展:备份目标不止「直连后端」一种打法。若目标存储不在官方后端列表(例如某些国产对象存储),常见的三条路是——① 用 rclone 后端借道 rclone 已支持的数十种存储;② 用 FUSE 把对象存储挂成本地目录再走 file:// 后端;③ 走 ssh/ftp 类传统协议中转。官网后端列表里 rclone:// 的存在,实际让 Duplicity 的可达面覆盖了 rclone 的整个存储矩阵。

四、功能特性

以下特性均来自官方站与 PyPI 页描述(来源:duplicity.us 首页与 pypi.org/project/duplicity,查询日期 2026-10-22):

  1. 加密与签名:基于 GnuPG,可对称口令加密、可公钥加密、可同时签名,防窥视 + 防篡改。
  2. 带宽高效:rsync 算法只传变化部分,适合慢速/计费线路做远程备份。
  3. 增量归档省空间:只保存自上次备份以来变化的数据块。
  4. 多后端:见 3.2 节矩阵,覆盖本地与主流云存储。
  5. 完整 Unix 语义支持:支持已删除文件记录、完整 Unix 权限、目录、符号链接、fifo、设备文件。
  6. 时间点恢复(PITR):恢复时可指定时间,还原到历史任意备份时刻的状态(man page 的 --restore-time 语义)。
  7. 备份集生命周期管理:内置按时间(remove-older-than)与按份数(remove-all-but-n-full、remove-all-inc-of-but-n-full)的过期清理动作。
  8. 无服务器架构: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 行信息来源同前文标注):

维度Duplicityrdiff-backupBorgBackupResticrsnapshot
实现语言PythonPythonPython + CGoPerl + 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,无常驻服务纯 CLICLI + 仓库常驻锁纯 CLICLI + cron
许可证GPLGPL-2.0+BSD-2BSD-2GPL-2.0+

关键差异与选型解读:

  1. 谁该选 Duplicity:首要诉求是「加密 + 云端/异构后端 + 带宽增量」。它是五者中后端矩阵最宽的,且加密在客户端完成,对网盘/对象存储零信任场景最友好;配合 Deja Dup 图形前端还能覆盖桌面场景。
  2. 谁该选 Borg:本机或自有服务器上追求「去重 + 压缩 + 加密」三合一、数据量大且重复度高(虚拟机镜像、代码仓库),且能接受 ssh/本地仓库形态;其 FUSE 挂载快照体验优于 Duplicity 的整目录恢复。
  3. 谁该选 Restic:想要 Borg 的去重/加密能力但需要 Go 单二进制、跨平台(含 Windows)、直接对接 S3/B2/Azure/GCS 仓库;快照模型与 restic mount 的体验接近现代云原生习惯。
  4. 谁该选 rdiff-backup:想要「远端始终保留一份可直接浏览的最新目录 + 历史差量」且无需加密的局域网场景;它是 Duplicity 的同源近亲(同用 librsync),但后端面窄、无加密。
  5. 谁该选 rsnapshot: NAS/本地大容量盘上做定时快照轮转,追求目录树可直接浏览、实现最简单;代价是存储与带宽效率最差、无加密无压缩。

💡 技术拓展:备份工具的两大流派——快照流(Borg/Restic/rsnapshot:每次备份形成不可变快照,靠去重/硬链接省空间)与差量链流(Duplicity/rdiff-backup:全量基线 + 增量差量链条)。差量链流省带宽见长(只传 delta),快照流省恢复粒度与完整性管理(单快照自包含)。Duplicity 通过 full 动词定期重建基线来缓解长链风险,这也是生产模板中「每周全量 + 每日增量 + 按份数清理」策略的由来。

八、参考链接