rsync同步工具

简介:###

rsync 是Linux系统下的数据镜像备份工具,通过rsync 可以将本地的系统数据通过网络备份到任何远程主机上.
rsync 主页地址:http:/rsync.samba.org
rsync特性:

  • 可以镜像保存整个目录树和文件系统
  • 可以增量同步数据,文件传输效率高,因而同步时间很短
  • 可以保持原有文件的权限,时间等属性
  • 加密传输数据,保证了数据的安全性

安装rsync###

服务端和客户端都需要安装

./configure
make
make install

创建rsync 配置文件###

vi /etc/rsysncd.conf

uid=nobody
gid=nobody
max connections=10
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/run/rsyncd.log

[webdba]
path=/webdata
comment=webdba file
ignore errors
read only=true
list=false
uid=root
gid=root
auth users=backup
secrets file=/etc/server.pass

创建rsync连接用户和密码文件###

vi /etc/server.pass
backup:abc123

配置文件解释
uid 当模块传输文件时守护进程应该具有的用户ID,默认值时 "nobody"
gid 当模块传输文件时守护进程应该具有的用户组ID,默认值时 "nobody"
max connections 最大并发连接数,以保护服务器,超过限制的连接数请求时,将被暂时限制。默认为0(没有限制)
pid file 用来指定rsync 守护进程对应的PID文件路径
lock file 用来支持max connections 的锁文件,默认值时/var/run/rsyncd.lock
log file 指定rsync的日志输出文件路径
[webdba] 定义一个模块的开始 webdba对应的是模块名称
path 用来指定需要备份的文件或目录,必须填
list 当客户端请求可以使用模块列表时,该模块可以被列出。默认为True,如果需要被隐藏,可以设置为false
auth users 用来定义可以连接到该模块的用户名,多个用户用空格或者逗号分隔(需要注意这里的用户不是Linux的系统用户,没有任何关系)
secrets file 指定一个包含 "用户名:密码" 格式的文件

服务端启动 rsync 守护进程###

/usr/local/bin/rsync --daemon

ps -rf|grep rsync
root     20278     1  0 16:29 ?        00:00:00 /usr/local/bin/rsync --daemon 

客户端配置rsync###

创建一个 secrets file,此文件的内容为服务端的 rsyncd.conf 文件中 "auth users"选项指定用户的密码,仅为备份用户的密码,而这个文件的名称以及路径可以随意
指定,只要在执行 rsync 同步时指定即可。

vi /etc/server.pass
abc123

在客户端执行同步命令###

/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.60.253::webdba /webdba  --password-file=/etc/server.pass 

"--vzrtopg" 选项中
v 是"—verbose",即详细模式输出
z 表示"--compress" 即对备份的文件在传输时进行压缩处理
r 表示"--recursive",也就是对子目录以递 归模式处理
t 即"--times",用来保持文件时间信息
o 即"--owner"用来保持文 件属主信息
p 即"--perms"用来保持文件权限
g 即"--group"用来保持文件的属组信息

"--delete" 选项指定以 rsync 服务端为基准进行数据镜像同步,也就是要保持 rsync 服务端目录与客户端目录的完全一致性。在这里是以服务器为基准进行同步。

"--progress" 选项用于显示数据镜像同步的过程。

"backup@192.168.60.253::webdba" 表示对服务器 192.168.60.253 中的 webdba 模块进行备份,也就是指定备份的模块,backup 表示使用"backup"这个用 户对该模块进行备份。

"/webdba"用于指定备份文件在客户端机器上的存放路径,也就是将备份的文件 存放在备份机的/webdba 目录下。

"--password-file=/etc/server.pass" 用来指定客户机上存放的密码文件位置,这样在客户端执行同步命令时就无需输入交互密码了,注意,这个密码文件的名称和位置可以随意指定,但是在客户机上必须存在此文件,文件的内容仅仅为备份用户的密码,这里指的是 backup 的密码。

rsync+ssh 实现文件备份###

当在两台计算机之间保持大型、复杂目录结构的同步时候,使用 ssh+rsync 比 tar 或 wget 等方式都要快。而且可以做到精确同步。
首先需要利用 ssh 客户端密钥建立信任关系,然后直接调用 rsync 命令即可。
用法如下:

/usr/bin/rsync -avzPL  --timeout=600  root@IP:/A/B/C  /B/D/F 
命令              参数      超时时间       远程地址:远程服务器的目录  本地保存的目录


触发同步指令的方式有很多种,例如可以将同步指令放入客户端系统的 crontab 守护进程, 设定同步时间,然后让Linux 去触发同步指令,自动完成数据备份。这种数据备份方式可以用于数据安全性要求不是很高的业务系统上。

rsync 客户端命令参数

-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新 命名为~filename。可以使用–suffix 选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备 份的文件。(不覆盖更新的文件)
-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、ssh 方式进行数据同步
–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 服务端口
–blocking-io 对远程 shell 使用阻塞 IO
-stats 给出某些文件的传输状态
–log-format=formAT 指定日志文件格式
–password-file=FILE 从 FILE 中得到密码
–bwlimit=KBPS 限制 I/O 带宽,KBytes per second
-h, –help 显示帮助信息

常见 rsync 错误总结

  1. rsync: failed to connect to 118.244.216.177: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
    原因:防火墙屏蔽了端口
    解决:打开 873 段考
    iptables -i INPUT -p tcp --dport 873 -j ACCEPT iptables -L
    如果以上指令不行,可以直接停掉防火墙 /etc/init.d/iptables stop
  1. @ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
    那估计是密码文件没有设置权限哦: chmod 600 /home/admin/security/rsync.pass 应该差不多就可以了
  1. @ERROR: auth failed on module xxxxx
    rsync: connection unexpectedly closed (90 bytes read so far)
    rsync error: error in rsync protocol data stream (code 12) at io.c(150)
    这是因为密码设错了, 无法登入成功, 请检查一下 rsyncd.scrt 中的密码, 二端是否一致?
  1. password file must not be other-accessible continuing without password file Password:
    这表示 rsyncd.scrt 的档案权限属性不对, 应设为 600。
  1. @ERROR: chroot failed
    rsync: connection unexpectedly closed (75 bytes read so far)
    rsync error: error in rsync protocol data stream (code 12) at io.c(150)
    这通常是您的 rsyncd.conf 中的 path 路径所设的那个目录并不存在所致.请先用 mkdir 开 设好要备份目录
  1. @ERROR: access denied to www from unknown (192.168.1.123) rsync: connection unexpectedly closed (0 bytes received so far) [receiver] rsync error: error in rsync protocol data stream (code 12) at io.c(359)
    这是因为有两个网段都需要同步该文件夹内容,但没有在 hosts allow 后面添加另一个 IP 段 hosts allow = 192.168.1.0/24
    改为
    hosts allow = 192.168.1.0/24 192.168.2.0/24
    重新启动 rsync 服务,问题解决
  2. @ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
    client 端没有设置/etc/rsync.pas 这个文件,而在使用 rsync 命令的时候,加了这个参数 --password-file=/etc/rsync.scrt
  1. rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device
    (28)
    *** Skipping any contents from this failed directory ***
    磁盘空间满了
  1. rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)
    同步目录的权限设置不对,改为 755
  1. rsync: read error: Connection reset by peer (104)
    rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]
    未启动 xinetd 守护进程
    [root@CC02 /]# service xinetd start
  1. rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
    xnetid 查找的配置文件位置默认是/etc 下,在/etc 下找不到 rsyncd.conf 文件
  1. rsync: failed to connect to 203.100.192.66: Connection timed out (110) rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
    连接服务器超时,检查服务器的端口 netstat –tunlp,远程 telnet 测试
  1. 我需要在防火墙上开放哪些端口以适应 rsync?
    rsync 可以直接通过 873 端口的 tcp 连接传文件,也可以通过 22 端口的 ssh 来进行文件传递, 但也可以通过下列命令改变它的端口:
    rsync --port 8730 otherhost:: 或者
    rsync -e 'ssh -p 2002' otherhost:
  1. 如何通过 rsync 只复制目录结构,忽略掉文件呢?
    rsync -av --include '/' --exclude '' source-dir dest-dir
  1. 为什么我总会出现"Read-only file system"的错误呢? 看看是否忘了设"read only = no"了
  1. @ERROR: chroot failed
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
  1. @ERROR: auth failed on module tee
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证 失败。提供正确的用户名密码解决此问题。
  2. @ERROR: Unknown module ‘tee_nonexists’
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容