是一个开源的快速备份工具,可以在不同主机之间同步整个目录
在远程同步任中,一个是源端,还有一个是发起端
源端负责文件的原始位置,发起端和源端的文件同步
拷贝文件,连接文件,设备
可以保持源文件或者目录的权限不变,时间,所有者,所在组等可均保持不变
可以实现增量同步,只同步发生变化的数据,数据传输效率很高
支持匿名备份:
如何安装rsync
-r: 递归模式,目录里面包含子目录里面的所有文件
-I:复制链接文件,软连接
-v:显示同步过程中的详细信息
-z:传输文件时,进行压缩
-a:归档模式,保留文件的权限,属性等
-p:保留文件的权限标记(所在组)
-t:保留时间标记(时间戳)
-g:保留文件的所在组(管理员)
-o:保留文件的所有者(管理员)
-D:保留设备文件和其他特殊文件
--delete:删除目标位置的有,但是原始位置没有的文件
下行同步:
从源端同步到客户端
上行同步:
从客户端同步到源端
从源端同步到客户端
配置sync源服务器
vim /etc/rsyncd.conf
设置密码
赋权
chmod 600 /etc/rsyncd_users.db
#保证所有用户对源目录/opt/test/都有读取权限
chmod +r /opt/test/
ls -ld /opt/test/
启动和关闭
#启动 rsync 服务程序
rsync --daemon #启动 rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
配置发起端:
rsync -avz backuper@20.0.0.51::test /opt
实现免密登录:
发起端
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -avz --password-file=/etc/server.pass [email protected]::test /opt/
源端配置
发起端
源端可以查看到
用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
改内核文件
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
inotifywait -mrq -e modify,create,move,delete /opt/test/
-m:表示持续监控
-r:递归整个目录
-q:信息提示
-e:指定监控的事件,多个事件用逗号隔开
实现免密登录
rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test/
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/test/ [email protected]::test/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY FILE EVENT
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
#如果rsync未在执行,则立即启动
$RSYNC_CMD
fi
done
chmod +x /opt/inotify.sh
chmod 777 /opt/test/
chmod +x /etc/rc.d/rc.local
echo 'nohup /opt/inotify.sh &' >> /etc/rc.d/rc.local #加入开机自动执行
可以结合定时任务,既实现了监控,也实现了同步
假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好使了,因为要等待很长一段时间。在这种情况下我们可以使用rsync来巧妙处理。rsync实际用的是替换原理。
先建立一个空的文件夹:
mkdir /home/blank
rsync --delete-before -a -H -v --progress --stats /home/blank/ /opt/test
--delete-before :在传输过程中进行删除
-a:归档模式
-H:硬链接
-v:输出过程信息
-progress:显示传输的过程
--stats :给出文件的传输状态