简介:###
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 错误总结
- 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
- @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 应该差不多就可以了
- @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 中的密码, 二端是否一致?
- password file must not be other-accessible continuing without password file Password:
这表示 rsyncd.scrt 的档案权限属性不对, 应设为 600。
- @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 开 设好要备份目录
- @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 服务,问题解决- @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
- rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device
(28)
*** Skipping any contents from this failed directory ***
磁盘空间满了
- rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)
同步目录的权限设置不对,改为 755
- 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
- rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
xnetid 查找的配置文件位置默认是/etc 下,在/etc 下找不到 rsyncd.conf 文件
- 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 测试
- 我需要在防火墙上开放哪些端口以适应 rsync?
rsync 可以直接通过 873 端口的 tcp 连接传文件,也可以通过 22 端口的 ssh 来进行文件传递, 但也可以通过下列命令改变它的端口:
rsync --port 8730 otherhost:: 或者
rsync -e 'ssh -p 2002' otherhost:
- 如何通过 rsync 只复制目录结构,忽略掉文件呢?
rsync -av --include '/' --exclude '' source-dir dest-dir
- 为什么我总会出现"Read-only file system"的错误呢? 看看是否忘了设"read only = no"了
- @ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
- @ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证 失败。提供正确的用户名密码解决此问题。- @ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。