RSYNC如何执行增量备份

rsync如何知道哪些文件被更改,哪些不是? 它是否在文件的任何地方logging数据?

因为我想要做增量备份,但首先它会传输所有文件。

所以我的主要问题是:如果我通过FTP上传初始文件,而不是通过rsyncrsync仍然会跳过那些现有的文件,或者它会在第一次运行时上传所有的文件。

Rsync有一些标志,控制着它的内容,以及它将拷贝到目的地的内容。 大多数情况下使用“-a”标志,这是“存档”标志,这可能是你想要的。 使用“-av”标志运行rsync并使其对要备份的数据执行首次运行。 下一次运行时,它会对文件执行块校验和,只复制在现有文件上已修改的部分,复制新文件并删除不再存在的文件。 检查“-a”选项部分:

http://linux.die.net/man/1/rsync

第一次运行将是BandWidth密集型的,下面的运行很可能是处理器密集型的,但与初始运行相比使用的带宽很小。 除非你的数据集有很多stream失。

Rsync并不关心你如何获得源文件或目标目录中的文件,它只会复制这两者之间的变化,除非你添加标志来做不同的事情。

如果要logging更改的内容,可以使用“–log-file”选项。 总而言之,这听起来像你想要的东西:

 rsync -av --log-file=/var/log/rsync.log -e "ssh -l backup-user" backup-user@source-machine::module /nas01/backups 

rsync不会logging任何数据,它会检查文件修改时间戳,然后检查内容。 如果你先通过ftp上传,那么rsync将不会重新传输所有的数据,但可能会通过所有的内容和修复时间戳。 但不会再有大的转移。

rsync不会做'增量',它更像'差异'。 它不会传输变化 (假定一些先前运行的知识),它会传递差异 (通过比较源文件和目标文件)

这个过程的简化:

  • 首先检查文件大小,创build/修改date,标志…如果全部相同,则跳过该文件。
  • 如果目标上没有该名称的文件,只需复制整个文件。
  • 如果目标上有文件,则会计算每个2KB文件的校验和并传输给发件人。
  • 发件人比较源文件的内容并与目标进行比较,并将尚未存在的数据连同对任何匹配数据的引用一起传送。 这样,目标就可以使用旧的目标和新的块来重build整个文件。

也许我很迂腐,但增量备份意味着你有一个完整的备份第一。 然后,您备份自备份以来更改的文件。 然后,您将备份自上一次备份以来发生更改的备份,因此您需要完整备份以及自该备份以来的所有增量备份。

所以, 只使用归档模式不是增量备份我认为这个区别很重要,因为这意味着你不能在更改之前及时获取文件

如果您想要执行真正的增量备份,则可以使用诸如--backup-dir选项。 这里有一个例子。

如果真正的问题是“我想通过rsync进行增量备份”,则有几个选项可用。 我使用Dirvish:

http://www.dirvish.org/

恢复很容易,因为它为您提供快照:它使用硬链接为您提供完整的快照,同时节省文件相同的空间。 在内部,它使用rsync的–link-dest选项:

 --link-dest=DIR hardlink to files in DIR when unchanged 

由于它使用rsync,它也可以节省networking带宽(从而节省时间),因为这些变化非常小。 如果你有tar和sneakernet一个本地创build的dirvish图像第一,如果你有很多的文件和一个缓慢的链接,它也可以。