我正在寻找一种增量备份工具,用于正在运行的基于磁盘的 linux 系统(例如 ubuntu 等),以及一种免费软件工具。
Clonezilla 可以进行准确的备份,但只能在系统空闲时进行。
Acronis for linux 可以在正在运行的系统上进行准确的备份,但它不是免费软件。Acronis 和 BTRFS 使用一些方法在文件系统运行时捕获文件系统更改,以模拟在运行时停止操作系统的效果。我正在寻找可以做到这一点的东西。
建议使用 rsync、dump 和许多其他不适合的工具,甚至将其用于此目的,但不能相信它们能够准确捕获正在运行的操作系统。rsync 用于静态文件系统时很好,但不适用于多线程运行文件系统。
令我惊讶的是,有多少人相信只需以某种方式复制文件系统,就可以准确备份正在运行的文件系统。几年前我构建了一个小型的多任务引擎,我很清楚一个任务污染另一个工作的危险。只有当备份作为原子任务运行时,所有其他任务在它工作时停止,才能确保捕获 100% 准确的可恢复备份。没有什么比拥有一个您所依赖的备份更糟糕的了,并且相信它会拯救您,但在您尝试使用它时却损坏了它。
我需要这个用于普通的旧桌面 linux,而不是虚拟设置。
正如你提到的,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 增量备份的更多信息