同步和备份程序
外观
(重定向自 Synchronization program)
本文档列出并比较了在两个或多个位置之间同步数据的应用程序,以及在此功能基础上进行重要数据增量复制以进行备份的应用程序。由于它们之间的关联性,这两类程序共享许多特性,因此将它们描述在同一篇文章中是合理的。
重要考量
为了根据自身需求选择最佳程序,应考虑以下方面:
- 将用于存储数据的备份介质的类型,例如 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)
- 该项目正在维护中。
- 具体性
- 关于使应用程序脱颖而出的特殊功能的简要说明。
表格
| 名称 | 软件包 (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 或原生协议 | 是 | 是 | 否 |
|
单向 | 否 | 是 | 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 外支持的操作系统。
- 已维护:项目是否正在维护。
- 去重:程序是否支持对保存的文件进行去重。
- 独特性:关于使应用程序脱颖而出的特殊功能的简要说明。
单机
这些应用程序旨在备份安装它们的机器上的数据,尽管备份目的地可以位于远程机器或存储介质上。
基于块的增量
如果一个文件被修改,这些应用程序将在下一个快照中只存储其更改的*部分*。与*基于文件的增量*应用程序相比,这些应用程序更节省空间,尤其是在大文件进行小修改时;另一方面,由于需要从存储的二进制差异中重建文件,因此存档的快照必须使用创建它们的备份应用程序打开。
| 名称 | 软件包 (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 | 否 | 是 | 存储库由不可变文件组成。 |
基于文件的增量
如果一个文件被修改,这些应用程序会在下一个快照中完全存储其新版本。与*基于块的增量*应用程序相比,这些应用程序空间效率较低,尤其是在大文件进行小修改时;另一方面,通常存档的快照可以在不需要安装备份应用程序的情况下打开。
特定图例
- 硬链接:未修改的文件是否存储为指向先前版本的硬链接。
| 名称 | 软件包 (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 | 专为将整个系统备份到专用设备而设计。 | 是 |
面向网络
这些应用程序旨在通过服务器-客户端模型集中备份连接到网络的多个机器。通常,与*单机*解决方案相比,它们的部署更复杂。
特定图例
- 控制方向:拉 (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)。
参见
- 备份 Linux 和其他 Unix(类)系统
- Linux 备份解决方案的详尽列表
- 通过 SSH 镜像整个站点
- rsync-snapshots.sh — 使用 rsync 和硬链接进行本地和远程快照备份