Rsync+Inotify

Rsync:linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

特性:

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜象。

 

【Rsync服务端】

1、 查看rsync安装包。

rpm -qa rsync

安装软件包:yum install -y rsync

2、 添加rsync服务的用户,管理本地目录用的。

useradd -s /sbin/nologin -M rsync

id rsync

3、 生成rsyncd.conf配置文件。

vi /etc/rsyncd.conf放入事先准备的配置。

[配置文件/etc/rsync.conf]

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[backup]

path = /backup

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

 

man rsyncd.conf去查www.samba.org/ftp/rsync/rsyncd.conf.html

4、 根据rsyncd.conf的auth users配置账号,远程连接用的。并根据secrets file参数生成密码文件。

echo “rsync_backup:oldboy” >/etc/rsync.password

cat /etc/rsync.password

5、 为密码文件配置权限。

chmod 600 /etc/rsync.password

ls -l /etc/rsync.password

6、 创建共享的目录并授权rsync服务管理

mkdir /backup -p

chow -R rsync.rsync /backup

如果没有/backup目录,就会chdir fialed。

7、 启动rsync服务并检查

rsync –daemon

ps aux|grep rsync|grep -v grep

lsof -I :873

8、 加入开机自启动

echo “/usr/bin/rsync --daemon” >>/etc/rc.local

tail -l /etc/rc.local

【Rsync客户端】

1、 生成连接服务器需要的密码文件。

echo “oldboy” >/etc/rsync.password

cat /etc/rsync.password

2、 为密码文件配置权限

chmod 600 /etc/rsync.password

ls -l /etc/rsync.password

3、 同步文件

推送:

rsync -avz /tmp/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

rsync -avz /tmp/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password

拉取:

rsync -avz rsync_backup@172.16.1.41::backup /tmp/ --password-file=/etc/rsync.password

rsync -avz rsync://rsync_backup@172.16.1.41/backup/ /tmp/ --password-file=/etc/rsync.password

Note:上述的backup为模块名,不是路径。

 

 

 

 

【语法】

rsyn [参数] 源 虚拟用户@IP::模块 --password-file=/etc/rsync.password

rsyn [参数] 虚拟用户@IP::模块 目的 --password-file=/etc/rsync.password

【参数】

-v,--verbose详细模式输出,传输时的进度等信息。

-z,--compress传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。

-a,--archive归档模式,表示以递归方式传输文件,并保持所有文件属性。等于-rtopgDl。

-r,--recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意时小写r。

-t,--times保持文件时间信息。

-o,--owner保持文件属主信息。

-p,--perms保持文件权限。

-g,--group保持文件属组信息。

-P,--progress显示同步的过程及传输时的进度等信息。

-D,--devices保持设备文件信息。

-l,links保持软链接。

-e,--rsh=COMMAND使用的信道协议,指定替代rsh的shell程序。例如:ssh

--exclude=PATHTERN指定排除不需要传输的文件模式(和tar参数一样)

--exclude-from=file(文件名所在的目录文件)(和tar参数一样)

--bwlimit=RATE limit socket I/O bandwidth

--delete 让目录目录SRC和源目录数据DST一致。

 

优点:

  1. 增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)。
  2. 远程SHELL通道模式还可以加密(SSH)传输,socket(daemon)需要加密传输,需配合vpn服务。

缺点:

  1. 大量小文件时候同步的时候,比对时间较长,有的时候,rsync进程可能会停止。
  2. 同步大文件,10G这样的大文件有时也会有问题,如中断。未完整同步前,是隐藏文件,可以通过续传等参数实现传输。

note:一次性远程拷贝可以用scp。

 

 

SYNOPSIS

Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:

  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Access via rsync daemon:

  Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

  Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

 


 

 

inotify-tools

异步文件系统事件监测机制。

inotify-tools提供两种工具,一是 inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。

安装:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

yum install -y inotify-tools

 

inotifywait语法:inotifywait [参数] [要监测的文件]

inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]

示例:inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e creat,delete /backup

常用参数:

    --timefmt 时间格式  

    %y年 %m月 %d日 %H小时 %M分钟  

    --format 输出格式  

    %T时间 %w路径 %f文件名 %e状态  

    -m 始终保持监听状态,默认触发事件即退出。  

    -r 递归查询目录  

    -q 打印出监控事件  

    -e 定义监控的事件,可用参数:  

    open 打开文件  

    access 访问文件  

    modify 修改文件  

    delete 删除文件  

    create 新建文件  

attrb  属性变更  

 

note:脚本编写时可以在命令结尾加&表示后台运行

事件相关参数默认大小:

[root@m01 ~]# cd /proc/sys/fs/inotify/

[root@m01 inotify]# cat max_user_watches

8192             #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

[root@m01 inotify]# cat max_user_instances

128              #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

[root@m01 inotify]# cat max_queued_events

16384            #设置inotify实例事件队列可容纳的事件数量

 

 

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 以指定事件降序排列

 

 

脚本:实现实时同步/data到nfs服务器上

vim /server/scripts/read_time_sync.sh

#!/bin/sh

Path=/data

Ip=172.16.1.41

/usr/bin/inotifywait -mrq --format '%w%f' -e close-write,delete $Path \

while read file

  do

    cd $Path

    [ -f $file ] &&\

    rsync -az ./$file --delete rsync_backup@$Ip::nfsbackup --password-file=/etc/rsync.password

  done