通过Rsync+inotify-tools+ssh实现触发式远程数据的实时同步与备份

背景
文件的同步镜像在很多地方都需要用到,因此rsync这款免费软件得到了广泛的应用,包括在Windows平台上,都已经有了支持rsync的“cwRsyncServer”。
但是,我们一般都是通过结合crontab计划任务来实现文件同步的,这样做的缺点是效率低,不能做到实时同步。
现在,在Linux平台下我们可以利用2.6内核的inotify监控文件系统机制,通过inotify-tools来实现实时同步了。

Rsync简介
Rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 本来是用以取代rcp 的一个工具,它当前由 Rsync.samba.org 维护。Rsync 使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。

Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

Rsync 支持大多数的类 Unix 系统,无论是 Linux、Solaris 还是 BSD 上都经过了良好的测试。此外,它在windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS。

Rsync 的基本特点
可以镜像保存整个目录树和文件系统;
可以很容易做到保持原来文件的权限、时间、软硬链接等;
无须特殊权限即可安装;
优化的流程,文件传输效率高;
可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
支持匿名传输。

核心算法介绍
假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:
1. β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
2. β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。
3. β将这些校验结果发给α。
4. α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5. α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。

rsync有两种运行模式
直接执行命令,默认是通过ssh 协议传输数据,这就类似scp了,文件传输过程是加密的
在本地或者远端配置一个rsync damoon程序,启动了一个tcp端口,数据直接传输

rsync dameon是为了不使用ssh协议来传输数据,并不能实时同步

建议使用直接执行模式,简单可靠。

Rsync的优点与不足
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

初识inotify
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

而inotify-tools则是 inotify 的一个简单接口。同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。

rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

安装Rsync
目前各大Linux发行版本都已经具有了rsync与inotify-tools的软件包,推荐通过RPM,yum,apt-get等方式进行安装。
检查系统是否安装了rsync软件包
rpm -qa|grep rsync
如果没有发装,执以下命令进行安装
yum -y install rsync
检查rsync是否安装成功
netstat -a | grep rsync

安装inotify工具inotify-tools
由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持inotify:
[root@localhost /]# uname -r
2.6.32-431.5.1.el6.x86_64
[root@localhost /]# ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Mar 31 15:28 max_queued_events
-rw-r--r-- 1 root root 0 Mar 31 15:28 max_user_instances
-rw-r--r-- 1 root root 0 Mar 31 15:28 max_user_watches

如果有上面三项输出,表示系统已经默认支持inotify,接着就可以开始安装inotify-tools了。
yum install inotify-tools

inotify相关参数
inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小。下面分别做简单介绍。
/proc/sys/fs/inotify/max_queued_evnets
表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:
echo 30000000 > /proc/sys/fs/inotify/max_user_watches

inotifywait相关参数
Inotifywait是一个监控等待事件,可以配合shell脚本使用它,下面介绍一下常用的一些参数:
 -m, 即–monitor,表示始终保持事件监听状态。
 -r, 即–recursive,表示递归查询目录。
 -q, 即–quiet,表示打印出监控事件。
 -e, 即–event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。

不管是inotifywait还是inotifywatch都有-e参数,-e有以下事件动作

access 文件读取
modify 文件更改。
attrib 文件属性更改,如权限,时间戳等。
close_write 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。
close_nowrite 以只读模式打开的文件被关闭。
close 文件被关闭,不管它是如何打开的。
open 文件打开。
moved_to 一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。
moved_from 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。
move 包括moved_to和 moved_from
move_self 文件或目录被移除,之后不再监听此文件或目录。
create 文件或目录创建
delete 文件或目录删除
delete_self 文件或目录移除,之后不再监听此文件或目录
unmount 文件系统取消挂载,之后不再监听此文件系统。

配置ssh key信任
建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。

在两台服务器上创建rsync用户
[root@server1 ~]# useradd -m rsync
[root@server1 ~]# passwd rsync
[root@server2 ~]# useradd -m rsync
[root@server2 ~]# passwd rsync

[root@server1 ~]# su - rsync
[rsync@server1 ~]$ ssh-keygen -t rsa

在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/rsync/.ssh/目录下。

将公钥添加到远程主机的 authorized_keys 文件中
将文件上传到远程主机(假设远程主机IP为192.168.10.4)
[rsync@server1 ~]$ scp ~/.ssh/id_rsa.pub [email protected]:/home/rsync/

使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中
[rsync@server2 ~]$ mkdir .ssh
[rsync@server2 ~]$ chmod 700 .ssh
[rsync@server2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

重启SSH服务
[root@server1 ~]# /etc/init.d/sshd restart
[root@server2 ~]# /etc/init.d/sshd restart

创建inotify_rsync.sh脚本
[root@server1 ~]# vim inotify_rsync.sh
#!/bin/sh
SRC=/home/rsync/test
[email protected]:/home/rsync/test

su - rsync
inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
do
/usr/bin/rsync -ahqzt --delete $SRC $DST
done

相关注解如下:
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC}
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件

/usr/bin/rsync -ahqzt –delete $SRC $DST
-a 存档模式
-h 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件

要排除同步某个目录时,为rsync添加–exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加–exclude或–excludei参数,具体查看man inotifywait。

inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。

赋予脚本可执行权限
[root@server1 ~]# chmod +x inotify_rsync.sh
执行脚本
[root@server1 ~]# /root/inotify_rsync.sh &
设置脚本开机自启动
[root@server1 ~]# cat "/root/inotify_rsync.sh &" >> /etc/rc.local

测试
首先在server1服务器的/home/rsync/test目录下创建文件或目录,然后再到server2的/home/rsync/test目录下查看,如果看到就说明成功了。
[rsync@server1 ~]$ cd test
[rsync@server1 test]$ touch a.txt

注意:第一次SSH连接的时候可能需要输入一次密码,之后就不需要输入了。

[rsync@server2 ~]$ cd test
[rsync@server2 test]$ ls
a.txt

看到了a.txt文件,说明文件同步已经成功!

常用技巧
源文件夹最后的/很有讲究,/代表整个文件夹的内容,下面两行是一样的效果,这是关键,要仔细理解

rsync -av /src/foo /dest

rsync -av /src/foo/ /dest/foo
差异是源参数末尾的斜杠。如果源参数的末尾有斜杠,就会复制指定目录的内容,而不复制目录本身。目标参数末尾的斜杠没有作用。

要想通过命令行根据模式排除文件,应该使用 –exclude。请记住,如果模式中的任何字符对于 shell 有特殊含义,比如 *,那么应该把模式放在单引号中:

在实施备份之前,还需要打通本地服务器和备份服务器直接的ssh登陆,很简单,通过ssh-keygen生成一个秘钥对,然后把idrsa.pub的内容添加到目标服务器的authorizedkeys文件中

把每项需要备份的目录,写到一个shell文件中,然后配置crontab,定时执行,非常完美!!

rsync不能自动运行,必须显式的调用,最简单的方法是配置crontab

linux内核2.6.13之后支持inotify,可以用它和rsync来实现实时同步,对于网站备份来说,我觉得没有什么必要

有时会遇到这样的情况:向inotify监控的目录(这里是/web/wwwroot/)写入一个很大文件时,由于写入这个大文件需要一段时间,此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,即:“-e close_write,delete,create,attrib”。

可能遇到的问题
问题:upper limit on inotify watches reached!
现象:在对一个大磁盘进行inotify监听时,爆出如下错误:
Failed to watch /mnt/;
upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches’.
原因:inotify默认设置监控的文件数量太少,增加监控的文件数量即可
解决方案:cat一下这个文件,默认值是8192,echo 8192000 > /proc/sys/fs/inotify/max_user_watches即可~
示例脚本
http://rsync.samba.org/examples.html

Rsync的命令格式各类
1)rsync [OPTION]… SRC DEST
拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data1 /backup
2)rsync [OPTION]… SRC [USER@]HOST:DEST
使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src
3)rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://kinggoo.com/www
4)rsync [OPTION]… [USER@]HOST:SRC DEST
使用远程shell程序(如rsh、ssh等)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/kinggoo /data1
5)rsync [OPTION]… [USER@]HOST::SRC DEST
从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av [email protected]::www /data1
6)rsync [OPTION]… SRC [USER@]HOST::DEST
从本地拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /data1 [email protected]::www

Rsync 参数选项说明
rsync参数的具体解释如下:
官方的英文解释:http://rsync.samba.org/ftp/rsync/rsync.html

-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
–no-motd 后台输出调试信息模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
–no-OPTION 关闭某一个隐藏的选项
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
rsync foo/bar/foo.c remote:/tmp/
rsync 参数在/tmp目录下创建foo.c文件,而如果使用-R参数:
rsync -R foo/bar/foo.c remote:/tmp/
Rsync 参数会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。
–no-implied-dirs 不使用路径中的一些目录
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀
–backup-dir 将备份文件存放在某目录下
-suffix=SUFFIX 定义需要备份的文件前缀
-u, –update 也就是跳过所有已经的文件(不覆盖已更新的文件)

-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口 (默认是873)
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–log-format=FORMAT 指定日志文件格式 (在rsyncd.conf设定)
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

rsync.conf配置中log format的参数
log format

This parameter allows you to specify the format used for logging file transfers when transfer logging is enabled. The format is a text string containing embedded single-character escape sequences prefixed with a percent (%) character. An optional numeric field width may also be specified between the percent and the escape letter (e.g. “%-50n %8l %07p”).

The default log format is “%o %h [%a] %m (%u) %f %l”, and a “%t [%p] ” is always prefixed when using the “log file” parameter. (A perl script that will summarize this default log format is included in the rsync source code distribution in the “support” subdirectory: rsyncstats.)

The single-character escapes that are understood are as follows:

%a the remote IP address 远程IP地址
%b the number of bytes actually transferred 传输字节数
%B the permission bits of the file (e.g. rwxrwxrwt) 该文件的权限位
%c the total size of the block checksums received for the basis file (only when sending) 为基础的块校验接收文件的总大小,仅发送成功
%f the filename (long form on sender; no trailing “/”) 文件名字
%G the gid of the file (decimal) or “DEFAULT” 文件gid
%h the remote host name 远程主机名
%i an itemized list of what is being updated 被更新的详细列表
%l the length of the file in bytes 该文件的长度(以字节为单位)
%L the string ” -> SYMLINK”, ” => HARDLINK”, or “” (where SYMLINK or HARDLINK is a filename)
%m the module name 该模块的模块名
%M the last-modified time of the file 文件的最后修改时间
%n the filename (short form; trailing “/” on dir)
%o the operation, which is “send”, “recv”, or “del.” (the latter includes the trailing period) 操作,是 “发送”,“接收”,或“删除”。
%p the process ID of this rsync session 会话id
%P the module path 该模块的路径
%t the current date time 当前的日期时间
%u the authenticated username or an empty string 认证的用户名或留空
%U the uid of the file (decimal) 该文件的UID(十进制)

inotify-tools工具的语法参数
inotifywait
语法:
inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]
参数:
-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–-outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt
指定时间格式,用于–format选项中的%T格式。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

inotifywatch
语法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ … ]
参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout
设置超时时间
-e , –event
只监听指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。

UTC、GMT与DST
目前世界上常见的计时方式主要有:太阳时(MT)和原子时。GMT(格林尼治时间)的正午是指当太阳横穿格林尼治子午线时的时间,由于地球的自转呈现不规则性,并且正在缓慢减速,因此格林威治时间目前已经不再作为标准时间使用,取而代之的是协调时间时(UTC),它是由原子钟提供,它是基于标准的GMT提供的准确时间,若在不需要精确到秒的前提下,通常也将GMT与UTC视作等同。

DST(daylight saving time)也称为夏令时,它是以节约能源为目的而人为规定的一种制度,它规定某段时间作为夏令时间,并在标准时间的基础上提前多长时间(通常是一个小时),同时DST还规定了规定生效的起始时间和末尾时间,详细规则会在tzset函数中介绍,值得注意的是目前只是部分国家实施了夏令时制度。

标准时间是相对于UTC/GMT时间而言的,它在UTC/GMT之上增加了时区信息,比如中国标准时间是GMT+8,即在UTC时间上增加8个小时。

参考资料
官方网站:http://rsync.samba.org/
通过rsync+inotify-tools+ssh实现触发式远程实时同步:http://heylinux.com/archives/817.html
通过rsync+inotify实现数据的实时备份:http://ixdba.blog.51cto.com/2895551/580280/
将rsync与linux内核中的Inotify功能复用,达到实时监控同步数据,附带脚本:ttp://kinggoo.com/rsync-inotify.htm
rsync+inotify实现服务器之间文件实时同步:http://dl528888.blog.51cto.com/2382721/771533/
rsync 排除目录:http://www.linuxqq.net/archives/599.html
利用inotify+rsync实现linux文件批量更新:http://kerry.blog.51cto.com/172631/734087/
使用rsync+inotify-tools+ssh实现文件实时同步:http://www.com133.com/64

rsync 排除指定目录或文件进行同步:http://digdeeply.org/archives/09081402.html
rsync只同步特定的文件:http://hi.baidu.com/leechl/item/37cdc04f720ccfd4c1a592b2

评论被关闭.