我正在寻找一个增量备份工具,用于在运行中的、基于磁盘的Linux系统(例如ubuntu等)上使用,并且是一个免费软件的工具。
Clonezilla 可以进行准确的备份,但仅限于系统空闲时。
Acronis for Linux 可以在正在运行的系统上进行准确的备份,但它不是免费软件。 Acronis 和 BTRFS 使用一些方法来捕获文件系统运行时的更改,以便模拟操作系统运行时停止的效果。我正在寻找能做到这一点的东西。
建议使用 rsync、dump 和许多其他不适合的工具,甚至使用它们来实现此目的,但不能相信它们能够准确捕获正在运行的操作系统。 rsync 在静态文件系统上使用时很好,但在多线程运行文件系统上则不行。
令我惊讶的是,有多少人相信,只需以某种方式复制正在运行的文件系统即可对其进行准确备份。几年前,我构建了一个小型多任务引擎,我清楚地意识到一项任务污染另一项工作的危险。只有当备份作为原子任务运行且所有其他任务在其工作时停止时,才能确保捕获 100% 准确的可恢复备份。没有什么比拥有一个您依赖的备份更糟糕的了,并且相信它会拯救您,但当您尝试使用它时却发现它损坏了。
我需要这个用于普通的旧桌面 Linux,而不是虚拟设置。
答案1
正如您提到的,BTRFS 可以做到这一点。这就是我定期备份笔记本电脑的方式(在我输入此内容时,笔记本电脑的正常运行时间为 9 周零 5 天)。
在我的 BTRFS 文件系统中,我有子卷。只要您不使用文件系统的根目录来存储要备份的数据,将数据拆分为子卷的方式以及如何嵌套它们在这里并不重要。
以下命令用于说明语法和可能性,我建议将它们包装在作为 cronjob 或 systemd.timer 运行的脚本中。
要对子卷进行快照:
btrfs subvolume snapshot -r <source> <dest>
要序列化快照:
btrfs send <snapshot>
要相对于较旧的快照序列化快照(即差异):
btrfs send -p <start> <end>
要生成差异、动态压缩并发送到备份服务器,并进行“进度”监控:
btrfs send -p <start> <end> | \
pv -bart | \
pbzip2 --best | \
ssh [email protected] "cat > /backups/name.bz2"
执行类似操作,但在备份服务器上重新创建 BTRFS 子卷,而不仅仅是压缩 BTRFS 流:
btrfs send -p <start> <end> | \
pv -bart | \
pbzip2 --best | \
ssh [email protected] "pbzip2 -d | \
btrfs receive <target>"
要恢复,请通过 .apply 将快照应用到新的 BTRFS 文件系统btrfs receive
。
这是有关的更多信息BTRFS增量备份
答案2
正如 @mark-k-cowan 所说,您可以使用 btrfs 快照来做到这一点。 btrfs 对我来说太不成熟了。使用 zfs 及其快照会更好。正如 @brady-dean 所说,LVM 快照是一种与文件系统无关的方法。 LVM 快照会对性能产生巨大的负面影响。
Acronis 有一个内核模块,在块层工作以创建快照。这Datto 块驱动程序是一个 GPLv2(咳咳“免费软件”)内核模块,可以做同样的事情。 (免责声明:我从未使用过它。)
答案3
克隆正在运行的机器实际上是不可能的。您可以编写一个脚本来将特定文件添加到 tarball 中。您还可以使用 LVM 快照来备份系统驱动器。
答案4
使用 rsync (或者我会很快记住并在...中编辑的名称的变体)
用它进行完整备份,然后进行增量(或差异)
它也可在许多平台上使用,允许您在多个不同的操作系统之间进行备份
也可以看看 :https://serverfault.com/q/138287/146493
对于正在运行的系统上的大多数文件来说,如果不是全部的话,应该没问题(一些写入文件的文件将被截断,但如果您在运行时备份,这是正常的)(您还应该使用 dd 来保存额外的扇区信息,例如引导扇区,如果您打算完全恢复)...或者正如您所说,使用内置该容量的文件系统。
如果您打算备份正在运行的数据库,请首先使用该数据库转储工具并备份它。