linux点滴:rsync
rsync(remote sync)是一款远程同步工具,可以实现全量备份、增量备份、本地备份、删除,核心功能是远程数据备份。
工作原理
rsync核心算法
1.分块checksum算法
首先,把文件平均切成若干个小块,然后对每块计算两个checksum
- rolling checksum:弱checksum,用来区别不同。
- md5 checksum:强checksum,用来确认相同。
2.传输算法
checksum列表
- rolling checksum
- md5 checksum
- 文件块编号
源目标的checksum列表和目的目标的checksum列表做对比,获取文件块的改变信息。
3.checksum查找算法
源端拿到目录的checksum文件块后,会存放到哈希表中。
4.比对算法
取出文件块,做rolling checksum
计算,从hash表中查找相应的值,如果没有,则不需要比较md5 checksum
,表示有不同的信息。如果有,比较md5 checksum
。rolling checksum
和md5 checksum
都相同,说明在目标端中有相同的块,然后记下这一块在目标端下的文件编号。总之,只要rolling checksum
或 md5 checksum
其中有一个在目标端的checksum
哈希表中找不到匹配项,那么触发算法对目标端的rolling动作。
优点
- 支持
daemon
的增量备份 - 远程shell通道模式可以加密传输
缺点
- 同步大量小文件时,比对时间较长。
- 同步大文件时有可能会中断
参数
- -a:--archive,归档模式,以递归模式传输文件并保持文件属性,相当于-rtopgDI。
- -v:--verbose,详细输出
- -z:--compress,压缩传输
- -e:指定传输时的协议,如ssh
1.本地模式##
一般用于拷贝或者删除
拷贝用法:
rsync -avz /tmp /mnt
删除用法:
rsync -avz --delete /null /mnt
注:--delete表示让目标目录和源目录保持同步
2.通道模式##
通过远程shell进行数据传输
语法:
Pull:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:rsync [OPTION...] SRC... [USER@]HOST:DEST
Pull:从远端拉取到本地
如:rsync -avz -e 'ssh -p 22' test@192.168.10.1:/test/ /tmp/
Push:从本地推送到远端
如:rsync -avz -e 'ssh -p 22'
注:/
表示该目录下,不加表示该目录。
3.daemon模式##
准备阶段
服务端:备份服务器-172.16.1.41
客户端:NFS服务器-172.16.1.31
#cat /etc/redhat-release
CentOS release 6.7 (Final)
#uname -r
2.6.32-573.el6.x86\_64
#uname -m
x86_64
#/etc/init.d/iptables stop #关闭防火墙
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
Q:如果没有关闭防火墙,会出现如下错误
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
服务端
- 查看安装包
#rpm -qa rsync #如果不显示任何信息,使用yum安装
rsync-3.0.6-12.el6.x86_64
#yum install rsync -y
- 配置rsyncd.conf
需要手动创建
#vim /etc/rsyncd.conf
###rsync_config start###
uid = rsync #用户名
gid = rsync #用户组
use chroot = no #不使用chroot
max connections = 200 #最大连接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #进程文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #日志文件
ignore errors #忽略一些无关的IO错误
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 #密码文件
[backup] #模块
path = /backup #备份路径
[test] #增加的模块
path = /test #备份路径
#rsync_config end##
cat /etc/rsyncd.conf #查看
- 创建rsync用户
#useradd rsync -s /sbin/nologin -M
#tail -1 /etc/passwd
Q1:如果没有创建用户,客户端推送会出现如下错误
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 创建备份目录
#mkdir -p /backup
#ls -ld /backup
#chown -R rsync.rsync /backup/
#ls -l /backup/
Q2:如果没有给/backup/授权rsync用户文件拥有者的权限,会出现如下错误
rsync: mkstemp ".1.upENcr" (in backup) failed: Permission denied (13)
rsync: mkstemp ".10.ut1KcG" (in backup) failed: Permission denied (13)
rsync: mkstemp ".2.DodKcV" (in backup) failed: Permission denied (13)
- 创建密码文件
#echo "rsync_backup:123456" /etc/rsync.password
#cat /etc/rsync.password
#chmod 600 /etc/rsync.password
#ls -l /etc/rsync.password
Q3:如果没有创建密码文件、密码文件错误或没有给600权限,会出现如下错误
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
- 启动服务
#rsync --daemon
#lsof -i:873
- 开机自启动
#echo "rsync --daemon" >>/etc/rc.local
#tail -1 /etc/rc.local
- 增加模块
[test] #增加的模块
path = /test #备份路径
- 小结
创建rsync用户
创建备份目录,并给文件拥有者。
创建密码文件,并给文件拥有者可读、可写的权限。
加入开机自启动
客户端
- 创建密码文件
#echo "123456" >/etc/rsync.password
#cat /etc/rsync.password
#chmod 600 /etc/rsync.password
#ls -l /etc/rsync.password
Q4:如果没有密码文件,会出现如下错误
rsync: could not open password file "/etc/rsync.password": No such file or directory (2)
Password: #等待输入密码状态
Q5:如果密码错误或没有给600权限,会出现如下错误
password file must not be other-accessible
continuing without password file
Password: #等待输入密码状态
- 创建目录
#mkdir /backup #推送或拉取目录
#ls -ld /backup
- 测试同步
Push:
\#rsync –avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password #方法1
\#rysnc –avz /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password #方法2
Pull:
\#rysnc –avz /backup/ rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password #方法1
\#rsync –avz /backup/ rsync://rsync_backup@10.0.0.41/backup/ --password-file=/etc/rsync.password #方法2
- 排除同步
--exclude=a #排除单个文件
--exclude={a,b,c,d} #排除多个文件
--exclude-from=file #排除文件中的列表
- 小结
创建密码文件,并给文件拥有者可读、可写权限。
单独创建推送或拉取的目录
rsync一般结合cron定时任务实现全网备份,结合inotify或sersync实现实时备份。
作者:kaliylinux
出处:http://www.cnblogs.com/kaliy
linux点滴:rsync的更多相关文章
- Windows Linux 之间rsync同步CODE文件
Windows Linux 之间rsync同步CODE文件 一.环境Windows:OS:Microsoft Windows Web Server 2008 SP1IP:192.168.88.197 ...
- Linux下Rsync+sersync实现数据实时同步
inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...
- linux下rsync和tar增量备份梳理
前面总结过一篇全量备份/增量备份/差异备份说明,下面介绍下linux下rsync和tar两种增量备份的操作记录: 1)rsync备份 rsync由于本身的特性,在第一次rsync备份后,以后每次都只是 ...
- Linux下Rsync+Inotify-tools实现数据实时同步
Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...
- linux设置rsync+inotify实时同步文件
linux设置rsync+inotify实时同步文件 应用场景: 同步接收方:test01 接收目录:/opt/software/test/a/ 同步发起方:test02 同步目录:/opt/so ...
- Linux服务-rsync
目录 1. rsync简介 2. rsync特性 3. rsync的ssh认证协议 4. rsync命令 5. rsync+inotify Linux服务-rsync 1. rsync简介 rsync ...
- linux中rsync备份文件
linux中rsync备份文件 备份文件的方式 备份方式: cp : 本机复制 scp: 远程复制 推(本地上传到远程服务器): scp 1.txt root@ip:[路径] [root@m01 ~] ...
- Linux 安装Rsync和配置
1.检查rsync 是否已经安装 [root@test home]# rpm -qa|grep rsync 若已经安装,则使用rpm -e 命令卸载. [root@test home]#rpm -e ...
- 【Linux】rsync同步文件 & 程序自启动
rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...
随机推荐
- mha日常维护命令
mha日常维护命令 http://m.blog.chinaunix.net/uid-28437434-id-3959021.html?/13033.shtml 1.查看ssh登陆是否成功masterh ...
- Java ZIP File Example---refernce
In this tutorial we are going to see how to ZIP a file in Java. ZIP is an archive file format that e ...
- typeid关键字
这么看下去太要命了,有太多东西要学了... 而且视频看起来的确费神,费脑,费耳朵. 所以决定由视频驱动转向代码驱动.主攻vs,c++然后先把界面东西做出来,然后在想后面的东西. 所以今天 [先上来看了 ...
- Lucene全文检索系列(一)
1. Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.Lucene以其方便使用.快速实施以及灵活性受到广泛的关注.它可以方便地嵌入到各种应用中实现针对应用的全文 ...
- file_up
一.接收数据 表单提交的数据会自动封装为数组 用$_GET, $_POST, 或$_REQUEST获得表单提交的数据; 二.文件上传的相关配置 1.表单设置: 要进行文件的上传,需要对form表单 ...
- Extjs combo赋值与刷新的先后顺序
今天在跟一个弹出框中的多选下拉框赋值并实现反选的时候.惊讶的发现:原来我之前对于Combo的赋值的认知观是错误的. 我开始在窗体的beforeshow事件中对Combo控件赋值.开始使用了setVal ...
- Ubuntu 16.04 - 64bit 访问Windows磁盘报错 he NTFS partition is in an unsafe state. Please resume and shutdown Windows fully (no hibernation ...
今天在打开某个磁盘时,突然报错,报错信息如下 原因:Windows 未正常关闭,导致系统误以为存在临时缓存文件 解决方法: http://www.linuxidc.com/Linux/2014-05/ ...
- tlb,tlh,tli文件的关系
tlb文件:com类型库文件.在需要使用对应com类的模块里,“#import ...*.tlb”使用之. tlh.tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件.因为odl和tl ...
- C# string.Format格式化时间或货币
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- SQL Server 错误检测与修复
简介 在一个理想的世界中,不会存在任何数据库的损坏,就像我们不会将一些严重意外情况列入我们生活中的日常一样,而一旦这类事情发生,一定会对我们的生活造成非常显著的影响,在SQL Server中也同样如此 ...