rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同部分(即支持增量备份),而不是每次都整份传送
rsync 包括如下的一些特性:
能更新整个目录树和文件系统;
有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
能用rsh、ssh 或直接端口做为传输端口;
支持匿名rsync 同步文件,是理想的镜像工具;
Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
-r,�Crecursive 对子目录以递归模式处理
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
-u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
--port=PORT 指定其他的rsync服务端口
--delete 删除那些目标位置有而原始位置没有的文件
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes /second
--filter “- 文件名”需要过滤的文件
--exclude= :需要过滤的文件
-v 显示同步过程的详细信息
基于本地rsync同步
[root@localhost ~]# mkdir /todir
[root@localhost ~]# rsync -a /boot /todir/ //将boot文件夹复制到/todir/
[root@localhost ~]# ls /todir/
boot
[root@localhost ~]# rm -rf /todir/*
[root@localhost ~]# ls /todir/
[root@localhost ~]# rsync -a /boot/ /todir/ //将boot下的文件复制到/todir
[root@localhost ~]# ls /todir/
config-2.6.18-348.el5 symvers-2.6.18-348.el5.gz
grub System.map-2.6.18-348.el5
initrd-2.6.18-348.el5.img vmlinuz-2.6.18-348.el5
lost+found
[root@localhost boot]# rsync -av /boot/ /todir/ --delete //删除那些目标位置有而原始位置没有的文件
基于网络的rsync
基于SSH服务
[root@localhost ~]# mkdir /fromssh
[root@localhost ~]# rsync -az [email protected]:/boot/ /fromssh/ //-z表示压缩后复制
[root@localhost ~]# rsync -az /etc [email protected]:/opt/
[email protected]'s password:
基于RSYNC服务
[root@localhost ~]# rpm -q rsync
rsync-3.0.6-4.el5_7.1
[root@localhost ~]# cat /etc/rsyncd_users.db //创建认证用户
ruser:pwd@123
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db //必须要指定权限
[root@localhost ~]# cat /etc/rsyncd.conf //rsync的主配置文件
uid = nobody
gid = nobody
use chroot = yes //将用户锁定在根目录
log file = /var/log/rsyncd.log //日志文件路径
pid file = /var/run/rsyncd.pid //pid文件
[tools] //共享名
path = /usr/src //路径
read only = yes //只读权限
dont compress =*.gz *.bz2 *.tgz *.zip //过滤内容
auth users = ruser //指定认证用户
secrets file = /etc/rsyncd_users.db //认证用户文件
[root@localhost ~]# chkconfig rsync on
[root@localhost ~]# service xinetd restart //启动服务
[root@localhost ~]# netstat -ln | grep :873 //默认端口为873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
客户端:
[root@test1 ~]# rsync [email protected]::tools //两个::表示基于rsync
[root@test1 ~]# mkdir -p /data/fromrsync
[root@test1 ~]# rsync -avz --delete [email protected]::tools /data/fromrsync/
扩展:
触发同步脚本
[root@node1 ~]# yum -y install gcc* httpd //安装依赖软件包
[root@node1 ~]# tar -zxvf inotify-tools-3.14.tar.gz -C /usr/src/ //解压安装
[root@node1 ~]# cd /usr/src/inotify-tools-3.14/
[root@node1 inotify-tools-3.14]# ./configure
[root@node1 inotify-tools-3.14]# make
[root@node1 inotify-tools-3.14]# make install
[root@node1 inotify-tools-3.14]# service portmap restart
[root@node1 inotify-tools-3.14]# chkconfig portmap on
[root@node1 inotify-tools-3.14]# mkdir -p /data/nfsdir
[root@node1 inotify-tools-3.14]# grep nfs /etc/fstab
192.168.100.20:/webbak/www1 /data/nfsdir nfs defaults 0 0
[root@node1 inotify-tools-3.14]# mount -a
[root@node1 inotify-tools-3.14]# df -hT | grep nfs
nfs 7.6G 1.1G 6.1G 16% /data/nfsdir
[root@node1 ~]# cat /usr/bin/in_rsync.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq -e modify,create,move,delete /var/www/html | while read DIR EVENT FILE
do
/usr/bin/rsync -aHvz --delete /var/www/html/ /data/nfsdir
done
//脚本表示监控/var/www/html目录,如果这个目录下有更改,写入,移动,删除动作的时候触发/usr/bin/rsync -aHvz --delete /var/www/html/ /data/nfsdir操作
[root@node1 ~]# chmod 700 /usr/bin/in_rsync.sh //给予x权限
[root@node1 ~]# echo "/usr/bin/in_rsync.sh" >> /etc/rc.local //写入开机启动