跳转至内容

同步和备份程序

来自 ArchWiki

本文档列出并比较了在两个或多个位置之间同步数据的应用程序,以及在此功能基础上进行重要数据增量复制以进行备份的应用程序。由于它们之间的关联性,这两类程序共享许多特性,因此将它们描述在同一篇文章中是合理的。

重要考量

为了根据自身需求选择最佳程序,应考虑以下方面:

  • 将用于存储数据的备份介质的类型,例如 CD、DVD、远程服务器、外部硬盘驱动器等。
  • 计划的备份频率,例如每日、每周、每月等。
  • 备份解决方案预期的功能,例如压缩、加密、处理重命名等。
  • 需要时恢复备份的计划方法。

数据同步

这些应用程序只需以“镜像”的方式在多个位置/机器之间保持目录同步。尽管如此,其中大多数仍然允许存储和回滚修改或删除文件的旧版本。

参见

图例

名称
应用程序名称,链接到 ArchWiki 文章或官方网站。
软件包 (Package)
指向软件包的链接。
实现
应用程序所基于的编程语言、库或实用程序。
增量传输 (Delta transfer)
仅传输文件的修改*部分*。
加密传输 (Encrypted transfer)
通过网络传输时,数据默认是加密的。
文件系统元数据 (FS metadata)
同步文件系统权限和属性。
可恢复 (Resumable)
如果同步被中断,可以恢复。
处理重命名 (Handles renames)
能检测到移动/重命名的文件,并且不会存储或传输两次。这通常意味着会计算文件或其块的校验和。缺少此功能的应用程序可以通过与 hsyncAUR 结合来弥补,它*只*同步重命名。
版本控制 (Version control)
旧版本的文件被备份(*反向增量备份*)。
更改传播 (Change propagation)
指定更改可以传播的方向数量。
  • *单向* (unidirectional) 表示两个位置之间的单向同步,
  • *双向* (bidirectional) 表示两个位置之间的双向同步,以及
  • *多向* (multidirectional) 表示三个以上位置的完全同步。
冲突解决 (Conflict resolution)
应用程序处理文件冲突,无论是自动还是交互式,即它不会静默丢弃冲突文件。此属性不适用于仅在一个方向上传播更改的应用程序。
文件系统监控 (FS monitoring)
应用程序监听文件系统事件以触发同步。
CLI
该应用程序提供命令行界面。
其他接口 (Other interfaces)
该应用程序具有指定的用户界面,例如 GUI、TUI 或 Web 界面。
许可证
服务器和客户端应用程序的许可证。
其他平台 (Other platforms)
除 Linux 外支持的操作系统。
已维护 (Maintained)
该项目正在维护中。
具体性
关于使应用程序脱颖而出的特殊功能的简要说明。

表格

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:明确列出支持的协议/工具。删除“加密传输”列,因为它取决于协议/工具。简化和着色“更改传播”列并将其移至左侧。是否拆分“未维护”为子节?另见 User:Larivact/drafts/Synchronization and backup programs#Synchronization。(在 Talk:Synchronization and backup programs 中讨论)

本文章或章节需要扩充。

原因:填补空白。(在 Talk:Synchronization and backup programs 中讨论)
名称 软件包 (Package) 实现 增量传输 (Delta transfer) 加密传输 (Encrypted transfer) 文件系统元数据 (FS metadata) 可恢复 (Resumable) 处理重命名 (Handles renames) 版本控制 (Version control) 更改传播 (Change propagation) 冲突解决 (Conflict resolution) 文件系统监控 (FS monitoring) CLI 其他接口 (Other interfaces) 许可证 其他平台 (Other platforms) 已维护 (Maintained) 具体性
FreeFileSync freefilesync-binAUR C++ [1] SFTP [2] [3] ? [4] [5] 单向/多向 交互式 [6] GPL Windows, macOS
git-annex git-annex Haskell, git rsync [7] rsync, 其他 [8] 否,但有自定义的非文件系统元数据 [9] [10] 是,内容寻址存储 多向;使用 git 远程仓库 [11] 重命名冲突文件 [12] 可选,git-annex assistant git-annex assistant GPLv3 FreeBSD, macOS, Android (通过 Termux), Windows (beta) 使用 git 管理文件
osync.sh osyncAUR Bash, 基于 rsync rsync rsync 双向 保留文件多个版本 [13][链接已损坏 2025-11-17—SSL 错误] 可选 [14] BSD FreeBSD, Windows (通过 WSL, MSYS, Cygwin), macOS, Android (通过 Termux), QTS, pfSense
rclone rclone Go [15] [16] [17] [18] [19] [20] 单向/双向 [21] 交互式,重命名或删除冲突文件 [22] [23] Web (实验性) MIT FreeBSD, Windows, macOS, Plan9, Solaris 优化与云存储同步,行为因远程位置支持的功能而异。
rdiff-backup rdiff-backupAUR Python, librsync rsync rsync 单向 GPLv2 FreeBSD, Windows, macOS
Resilio Sync rslsyncAUR C++ 部分 [24] [25] 多向 重命名冲突文件 [26] [27] Web 专有免费增值 V3 版本:Windows, macOS, Android, iOS P2P 同步
rsync rsync C SSH 或原生协议
  • --link-dest 配合硬链接 [28]
  • --backup
单向 Rsync#前端 GPLv3 FreeBSD, Windows (通过 WSL, MSYS, Cygwin), macOS, Android (通过 Termux) 所有 Linux 发行版均可用的标准工具。
SparkleShare sparkleshareAUR C#, git AES-256 [29] ? ? ? ? ? GPLv3 Windows, macOS [30] 它可以与任何 Git 服务器通过 SSH 同步。
Syncany syncanyAUR Java ? ? ? ? ? ? ? ? ? GPLv3 Windows, macOS, Docker [31]
Syncthing syncthing Go [32] [33] 部分 [34] 是,但它在处理多个和/或大文件重命名时存在问题 [35] [36],先前版本已移至存档文件夹 多向 重命名冲突文件 [37] Web, GTK MPL v2 BSD, Windows, macOS, Android (fork), Dragonfly, Illumos, Solaris P2P 同步
Synkron synkronAUR C++ ? ? ? ? ? ? 多向 ? ? Qt GPLv2 BSD, Windows, macOS, ChromeOS [38]
taskd taskd-gitAUR C++, Python ? ? ? 多向 ? MIT Android
Unison unison OCaml 部分 [39] (Subsection "perms") 可选 [40] (Subsection "speeding") 否 - "Unison 将重命名视为删除和单独创建" [41] (Subsection "caveats") [42] (Subsection "backups") 双向 交互式 是,自 2.48 版本之前已内置于 Linux 和 Windows:[43] 对于 macOS,请参阅 "unison-fsmonitor":[44] GTK2 GPL FreeBSD, Windows, macOS [45]
yarsync yarsyncAUR Python, 基于 rsync rsync rsync 是,用于存储库快照(每个文件只有一个版本) 单向/多向 重命名单个文件 GPLv3 Windows (通过 WSL, MSYS, Cygwin), macOS, Android (通过 Termux) 类 UNIX 系统或备份驱动器,CLI 类似 git
Zaloha2.sh bash SSH+SCP 可选 双向 交互式 MIT BSD, Windows (通过 WSL, MSYS, Cygwin), macOS, Android (通过 Termux) [46] 小巧简单

增量备份

能够进行*增量备份*的应用程序会记住并考虑上次运行时已备份的数据(所谓的“差异”),从而无需保留不变数据的副本。将数据恢复到特定时间点需要找到最后一个完整备份以及从那时起到需要恢复的时刻之间的所有增量备份。这种备份方式对于那些非常频繁进行备份的用户来说非常有用。

参见

图例

  • 名称:应用程序名称,链接到 ArchWiki 文章或官方网站。
  • 软件包:指向软件包的链接。
  • 实现:应用程序所基于的编程语言、库或实用程序。
  • 压缩存储:存储使用压缩。
  • 加密存储:存储使用加密。
  • 增量传输:仅传输文件的修改*部分*。
  • 加密传输:通过网络传输时,数据默认是加密的。
  • 文件系统元数据:备份文件系统权限和属性。
  • 易于访问:备份以明文形式存储在文件系统中,或可以像文件系统一样挂载。
  • 可恢复:如果备份中断,可以在不重新开始的情况下恢复。
  • 多线程:备份可以并发地在多个执行线程中进行。
  • 处理重命名:检测到移动/重命名的文件,不会存储或传输两次;这通常意味着计算文件或其块的校验和。
  • CLI:应用程序是命令行驱动的,即它是可脚本化的。
  • 其他接口:应用程序具有指定的 UI,例如 GUI、TUI 或 Web 界面。
  • 许可证:服务器和客户端应用程序的许可证。
  • 其他平台:除 Linux 外支持的操作系统。
  • 已维护:项目是否正在维护。
  • 去重:程序是否支持对保存的文件进行去重。
  • 独特性:关于使应用程序脱颖而出的特殊功能的简要说明。

单机

这些应用程序旨在备份安装它们的机器上的数据,尽管备份目的地可以位于远程机器或存储介质上。

基于块的增量

本文章或章节需要扩充。

原因:填补空白。*文件系统元数据*列:*Immature* 是什么意思?*可恢复*列:*Pausing only* / *Kinda through tar* 是什么意思?(在 Talk:Synchronization and backup programs 中讨论)

如果一个文件被修改,这些应用程序将在下一个快照中只存储其更改的*部分*。与*基于文件的增量*应用程序相比,这些应用程序更节省空间,尤其是在大文件进行小修改时;另一方面,由于需要从存储的二进制差异中重建文件,因此存档的快照必须使用创建它们的备份应用程序打开。

名称 软件包 (Package) 实现 压缩存储 加密存储 增量传输 (Delta transfer) 加密传输 (Encrypted transfer) 文件系统元数据 (FS metadata) 易于访问 可恢复 (Resumable) 多线程 处理重命名 (Handles renames) CLI 其他接口 (Other interfaces) 许可证 其他平台 (Other platforms) 已维护 (Maintained) 去重 具体性
Areca Backup arecaAUR Java Zip, Zip64 AES128, AES256 仅暂停 [47] GPLv2 Windows
Borg backup borg Python, C (Cython) lz4, zlib, lzma, zstd AES256 SSH [48] [49] [50] [51] 第三方 BSD *BSD, macOS, Windows (Cygwin / WSL)[52] 是,基于可变长度块。 支持本地和基于 SSH 的远程备份目标。
bup bup C, Python, git 未成熟 [53] 拾起上次中断的地方 [54] thesafeAUR GPLv2 NetBSD, Windows, macOS 与 git 相同的存储格式。
Duplicacy duplicacyAUR Go [55] [56] [57] [58] duplicacy-webAUR 自定义(非免费) FreeBSD, macOS, Windows
Duplicati duplicati-canary-binAUR C# 仅暂停 [59] MIT Windows, macOS
Duplicity duplicity librsync gzip gpg ? GPL
Kopia kopiaAUR Go, Javascript 前端 APACHE Windows, macOS, OpenBSD
Kup Backup System kup rsync, bup 前端 未成熟 ? bup Qt GPLv2
Restic restic Go 强制(AES-256 [60] [61] [62] [63] [64] BSD OpenBSD, Windows, macOS [65] 原生支持存储在各种云服务上,并通过 rclone 支持。
ZBackup zbackupAUR C++ LZMA, LZO AES ? ? 通过 tar GPLv2 存储库由不可变文件组成。

基于文件的增量

本文章或章节需要扩充。

原因:填补空白。(在 Talk:Synchronization and backup programs 中讨论)

如果一个文件被修改,这些应用程序会在下一个快照中完全存储其新版本。与*基于块的增量*应用程序相比,这些应用程序空间效率较低,尤其是在大文件进行小修改时;另一方面,通常存档的快照可以在不需要安装备份应用程序的情况下打开。

特定图例

  • 硬链接:未修改的文件是否存储为指向先前版本的硬链接。
名称 软件包 (Package) 实现 压缩存储 加密存储 增量传输 (Delta transfer) 加密传输 (Encrypted transfer) 文件系统元数据 (FS metadata) 易于访问 可恢复 (Resumable) 处理重命名 (Handles renames) 硬链接 CLI 其他接口 (Other interfaces) 许可证 其他平台 (Other platforms) 已维护 (Maintained) 具体性
Back In Time backintimeAUR Python, rsync, diff rsync rsync rsync [66] Qt GPLv2
DAR (Disk ARchive) darAUR C++ 特殊存档格式 ? ? ? ? [67] darguiAUR GPL FreeBSD, NetBSD, Windows, macOS
rdup rdupAUR C tar.gz gpg, blowfish 及其他 ? ? ? ? GPLv3 一组命令行工具。
rsnapshot rsnapshot rsync ? ? ? ? [68] GPLv2 Win32 [69]
timeshift timeshift rsync rsync rsync ? ? ? ? GTK GPLv3 专为将整个系统备份到专用设备而设计。

面向网络

本文章或章节需要扩充。

原因:填补空白。*加密传输*列:*Internet transfers only* 是什么意思?(在 Talk:Synchronization and backup programs 中讨论)

这些应用程序旨在通过服务器-客户端模型集中备份连接到网络的多个机器。通常,与*单机*解决方案相比,它们的部署更复杂。

特定图例

  • 控制方向:拉 (Pull):服务器记录到客户端。推 (Push):客户端发起备份会话。
  • 增量类型:用于减少空间占用的策略,通过数据去重(即除了压缩之外)。
    • 基于文件:如果文件被修改,每个快照都会存储整个新版本。
      • 硬链接:未修改的文件是否存储为指向先前版本的硬链接。
    • 基于块:每个快照只存储文件的修改*部分*。
名称 软件包 (Package) 实现 控制方向 压缩存储 加密存储 增量传输 (Delta transfer) 加密传输 (Encrypted transfer) 文件系统元数据 (FS metadata) 易于访问 可恢复 (Resumable) 处理重命名 (Handles renames) 增量类型 CLI 其他接口 (Other interfaces) 许可证 其他平台 (Other platforms) 已维护 (Maintained) 具体性
BackupPC backuppc Perl 拉 (Pull) ? 基于文件,硬链接 [70] Web GPLv2 任何(无需客户端) 相同客户端或不同客户端的备份中的相同文件仅存储一次。
Bacula bacula* C++ 拉 (Pull) ? ? ? ? 基于文件 [71] GUI, Web AGPLv3 Windows, macOS
Bareos bareos* C++ (Bacula 分支) ? ? ? ? ? ? ? ? ? ? ? ? AGPLv3
burp burp-backupAUR librsync 推 (Push) ? ? 基于块 [72] burp-ui AGPLv3 Windows, macOS
SafeKeep safekeepAUR rdiff-backup 拉 (Pull) ? ? ? ? ? 基于块 [73] GPL 与 LVM 和数据库集成以创建一致的备份。带宽限制。
Synbak synbak 多工具包装器 ? ? ? ? ? Web GPLv3 统一了多种备份方法。
UrBackup urbackup* C++ 拉 (Pull) 仅互联网传输 基于文件,硬链接和符号链接 [74] / 基于块的 CoW 快照 [75] 是(客户端) GUI, Web AGPLv3+ Windows, macOS 相同客户端或不同客户端的备份中的相同文件仅存储一次。与 LVM、dattobd 和 btrfs 集成以进行文件系统快照。

版本控制系统

虽然*版本控制系统*主要用于源代码,但它们可以跟踪目录中的任何文件。

参见 应用程序列表/实用程序#版本控制系统点文件 (Dotfiles)

参见