如何使用免费软件对正在运行的 Linux 系统进行原子增量备份?

Ell*_*iew 6 linux backup

我正在寻找一种增量备份工具,用于正在运行的基于磁盘的 linux 系统(例如 ubuntu 等),以及一种免费软件工具。


Clonezilla 可以进行准确的备份,但只能在系统空闲时进行。

Acronis for linux 可以在正在运行的系统上进行准确的备份,但它不是免费软件。Acronis 和 BTRFS 使用一些方法在文件系统运行时捕获文件系统更改,以模拟在运行时停止操作系统的效果。我正在寻找可以做到这一点的东西。

建议使用 rsync、dump 和许多其他不适合的工具,甚至将其用于此目的,但不能相信它们能够准确捕获正在运行的操作系统。rsync 用于静态文件系统时很好,但不适用于多线程运行文件系统。

令我惊讶的是,有多少人相信只需以某种方式复制文件系统,就可以准确备份正在运行的文件系统。几年前我构建了一个小型的多任务引擎,我很清楚一个任务污染另一个工作的危险。只有当备份作为原子任务运行时,所有其他任务在它工作时停止,才能确保捕获 100% 准确的可恢复备份。没有什么比拥有一个您所依赖的备份更糟糕的了,并且相信它会拯救您,但在您尝试使用它时却损坏了它。

我需要这个用于普通的旧桌面 linux,而不是虚拟设置。

Mar*_*wan 6

正如你提到的,BTRFS 可以做到这一点。这就是我定期备份我的笔记本电脑的方式(在我输入时,它的正常运行时间为 9 周零 5 天)。

在我的 BTRFS 文件系统中,我有子卷。将数据拆分为子卷的方式以及如何嵌套它们在这里并不重要,只要您不使用文件系统的根目录来存储要备份的数据。

以下命令用于说明语法和可能性,我建议将它们封装在作为 cronjob 或 systemd.timer 运行的脚本中。

要对子卷进行快照:

btrfs subvolume snapshot -r <source> <dest>
Run Code Online (Sandbox Code Playgroud)

要序列化快照:

btrfs send <snapshot>
Run Code Online (Sandbox Code Playgroud)

相对于旧快照(即差异)序列化快照:

btrfs send -p <start> <end>
Run Code Online (Sandbox Code Playgroud)

要生成差异,动态压缩,然后发送到备份服务器,“进度”监控:

btrfs send -p <start> <end> | \
    pv -bart | \
    pbzip2 --best | \
    ssh me@backup.server "cat > /backups/name.bz2"
Run Code Online (Sandbox Code Playgroud)

要执行类似操作,但要在备份服务器上重新创建 BTRFS 子卷,而不仅仅是压缩 BTRFS 流:

btrfs send -p <start> <end> | \
    pv -bart | \
    pbzip2 --best | \
    ssh me@backup.server "pbzip2 -d | \
    btrfs receive <target>"
Run Code Online (Sandbox Code Playgroud)

要恢复,请将您的快照应用到新的 BTRFS 文件系统,通过btrfs receive.


以下是有关BTRFS 增量备份的更多信息