Answers:
如果:
您可以使用find -ctime
或file -cnewer
列出自上次执行以来已更改文件的列表,并仅复制已修改的文件(只需进行光荣的差异推送)。
这对于多个主机来说翻译得非常好:只需在源上执行差异tar,然后在所有主机上解压缩即可。
它给你这样的东西:
find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt
for HOST in host1 host2 host3 ...
do
cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
done
脚本已经过完善,但是您明白了。
另一种策略是使ssh和rsync更快。如果要通过受信任的网络(读为:私有),则无需加密实际有效负载。您可以使用HPN ssh。此版本的ssh仅加密身份验证。同样,rsync版本3在构建文件列表时开始传输文件。与rsync版本2相比,这当然可以节省大量时间。我不知道这是否是您要的内容,但希望对您有所帮助。另外,rsync确实以某种方式支持多播,尽管我不会假装理解如何。
当您将rsync作为备份方法进行备份时,如果要备份的文件很多,将会遇到的最大问题是。Rsync可以毫无问题地处理大型文件,但是如果您要备份的文件数量太大,那么您会注意到rsync不会在合理的时间内完成。如果发生这种情况,您将需要将备份分解成较小的部分,然后遍历这些部分,例如
find /home -mindepth 1 -maxdepth 1 -print0 | xargs -0 -n 1 -I {} -- rsync -a -e ssh {} backup@mybackupserver:/backup/
或将文件集缩小以减少文件数量。
至于有数十台计算机反映这些更改的镜像,则取决于备份需要多新鲜。一种方法是将更改从主服务器镜像到备份服务器,然后让其他服务器通过初始备份服务器上的rsync守护程序将其更改从备份服务器中拉出,然后安排其他服务器稍稍拉动在不同的时间或使用脚本使用无密码的ssh连接到每台服务器,并告诉它们拉出新的备份副本,这将有助于防止最初的备份服务器不堪重负-但是您是否要花那么多麻烦将取决于您要备份多少台其他计算机。
find /Backup/ -name '*.bak' -print0 | xargs -0 -n 1 rsync -e ssh
吗?
rsync有一种方法可以断开副本。换句话说,rsync可以(概念上)区分目录树并生成一个补丁文件,然后您可以将该补丁文件应用于与原始源相同的任意数量的文件。
它要求您调用与主服务器的rsync并使用进行镜像--write-batch
;它产生一个文件。然后,您可以将此文件传输到任意数量的其他目标,然后使用将该批处理应用于每个目标--read-batch
。
如果您在与主服务器相同的机器上保留了上一个rsynced状态的本地副本(即当前镜像的副本),则可以在主服务器上生成此“补丁”而无需联系任何镜像:
在高手:
rsync --write-batch=my-batch.rsync /master/data /current/mirror
添加您想要的任何其他选项。这将做两件事:
/current/mirror
改变以反映/master/data
my-batch.rsync
供以后使用。将my-batch.rsync
文件从主服务器传输到所有镜像,然后在镜像上应用补丁,可以这样说:
rsync --read-batch=my-batch.rsync /local/mirror
这种方法的好处:
--read-batch
镜像本身仅占用大量CPU / IO)