如何以较小的更改备份一个大文件?


9

如果一组文件(每个都有几个GB)并且每个文件每天都稍有变化(在随机位置,不仅是末尾附加的信息),如何有效复制?我的意思是,从某种意义上说,仅更改的部分被更新,而不是整个文件。那将意味着在此处复制一些Kb或复制一些GB之间的区别。


二进制差异?我认为这是一个东西,但我不认为diff会做

@cat:diff也许能够报告差异,但是这里的问题是复制小的差异。
Quora Feans '16

嗯,我在想刚才复制的差异列表- rsync更好

1
在服务器故障中:使用什么程序来增量备份大型单个文件(2011-01-07),并在堆栈溢出中:RSync单个(存档)文件,每次更改(2011-03-04)。
Graham Perrin

Answers:


25

rsync的程序正是这么做的。从手册页:

它以其增量传输算法而闻名,该算法通过仅发送源文件与目标中现有文件之间的差异来减少通过网络发送的数据量。Rsync被广泛用于备份和镜像,并作为日常使用的改进复制命令。


实际上,rsync实际上在编写此答案时正在运行,将本机上的所有内容备份到我的文件服务器(使用zfs)中。
hlovdal16年

为了备份,我建议使用rdiff-backup(nongnu.org/rdiff-backup)。我用它来备份四台不同的计算机,已经有好几年了。
Thomas Padron-McCarthy

Wikipedia很好地解释了如何rsync使用滚动校验和比较文件块
亚当·卡兹

我尝试过rsync将其“还原”回旧的VM硬盘映像,在其中仅更改了几个文件,可悲的是rsync似乎再次复制了整个文件(写入〜300MB / s大约需要3分钟)?rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de

8

您可能需要现代的重复数据删除备份程序。BorgBackup

这将对大文件的每个版本进行多次备份,但是将共享不同版本之间的公共内容,因此用于给定版本的大文件的总空间将仅比单个文件的总磁盘空间大一点。版本,假设不同版本仅稍有不同。


5

如果您以任何方式受到IO限制,请使用直接支持增量备份的文件系统(例如BTRFS或ZFS),而不必查找文件之间的差异(例如rsync必须执行的操作)。

使用rsync将会很慢并且非常耗费IO。

因为如果任何应用程序要写入文件的更改都受到IO限制,则使用rsync将使应用程序占用大量IO周期,这正是文件存在的原因。而且,如果您的备份过程或系统受IO限制,那么rsync将使IO周期远离可用的备份带宽。

只是谷歌“ rsync很慢”。例如: 在将文件从nfs-share复制到本地dir时,与cp相比,rsync非常慢(8到10倍)


这样做还有一个好处,即无需检查即可保留所有元数据,并且始终知道您的备份副本与原始副本一样好。rsync可以很好地用于一般用途,但是如果您拥有现代文件系统,则忽略它的优势将是愚蠢的。
user121391
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.