rsync介绍
rsync命令工具可以实现服务器间的文件同步(全量或者增量,比如使用–size-only来检查源端文件和目标端文件大小是否一致决定是否需要同步),由此同步的功能扩展,可以实现本机不同目录文件拷贝、快速删除海量文件等功能。但要注意,rsync不能实现远程服务器1和远程服务器2之间的文件同步,但是scp可以实现此功能。
rsync有几种工作模式
不管哪种模式,源文件都是在前面,目标文件在后面。
1)本地模式
语法:rsync [OPTION]… SRC [SRC]… DEST
如:rsync -av /tmp/test /data/test_bak/
2)远程shell模式(使用一个单冒号 :)
原理:启动一个shell程序(如rsh,ssh)
语法:
push模式(将本地文件push到远端):rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
pull模式(从远端pull文件到本地):rsync [OPTION]… [USER@]HOST:SRC [DEST]
如:
rsync -av -e ‘ssh -p 18822’ /tmp/test1 10.144.54.186:/tmp/ #指定使用18822端口,因为有生产服务器使用的不是默认是22端口
3)rsync daemon模式(使用两个单冒号 ::)
原理:本地主机通过网络套接字连接远程主机上的rsync daemon
push模式:rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
rsync [OPTION]… SRC rsync://[USER@]HOST[:PORT]/[DEST]
如:
pull模式:rsync [OPTION]… [USER@]HOST::SRC [DEST]
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
如:
rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.145.79.232::share_data/test1_dir /home/service/app
连接RSYNC DAEMON
rsync也可以不使用远程shell作为传输方式。这情况看下,将直接连接远程RSYNC守护进程,一般使
用的是TCP的873端口。(显然,这要求远程的RSYNC守护进程必须是已运行的,见下文"启动RSYNC服务以接受连接请求")
这种方式的rsync使用方式和远程shell方式一样,除了:
o 需要使用双冒号"::“分隔主机名和路径,或者使用rsync://的URL格式。
o “path"部分的第一个词语是一个模块名(译者注:如hostname::modname/file)。
o 远程RSYNC守护进程可能会输出你连接它的日期时间。
o 如果没有指定远程rsync服务的路径名,将列出rsync服务主机上可访问的路径。
o 如果没有指定本地目标地址,将列出远程rsync服务主机上指定的文件。
o 必须不能指定”–rsh”("-e")选项。
以下是拷贝远程模块名为"src"中的所有文件示例:
rsync -av host::src /dest
远程daemon上的某些模块可能需要身份验证。如果是这样,在连接时将会被询问输入密码。如果想要
避免被询问,可以通过设置环境变量RSYNC_PASSWORD的值为你要使用的密码,或者使用选项
“–password-file”。这非常适用于脚本中。
警告:在某些系统上,环境变量是对所有用户可见的,此时建议使用"–password-file"选项。
你可以通过web代理(web proxy)的方式与rsync daemon建立连接,只需设置环境变量RSYNC_PROXY的
值为hostname:port指向你的web代理。但要注意,web代理的配置必须得支持与873端口的代理连接。
你还可以使用代理程序与rsync daemon建立连接,只需设置环境变量RSYNC_CONNECT_PROG的值为你想
要运行的命令来代替建立套接字连接。环境变量的值中可能会包含"%H",它代表rsync命令中所指定
的主机名(因此如果想在值中包含一个"%“字符,需要使用”%%")。例如:
export RSYNC_CONNECT_PROG=‘ssh proxyhost nc %H 873’
rsync -av targethost1::module/src/ /dest/
rsync -av rsync:: //targethost2/module/src/ /dest/ (双冒号后面没有空格)
上面的命令中使用ssh在proxyhost上运行了nc命令,它将会转发所有数据到目标主机(%H)的873端口。
启动RSYNC服务以接受连接请求
要连接到一个rsync daemon,远程系统上的rsync daemon必须已经运行(或者像inetd一样,已经配置
了当特殊端口上有连接时会派生出rsync daemon)。关于如何启动一个能处理从套接字进来的连接的
daemon的完整信息,请看(5),这是rsync daemon的配置文件,它包含如何运行daemon的
非常详细的信息(包括独立模式(stand-alone)和inetd格式的配置)
如果你使用的是某种远程shell传输方式,则没有手动启动rsync daemon的必要。
使用rsync daemon模式的实例
本实例采取从服务端pull的方式拉取文件到客户端(服务端:10.90.122.231,客户端:10.90.19.243)
1.服务端配置
1.创建配置文件
mkdir -p /etc/rsync
cd /etc/rsync
touch #必须
touch #可选
touch #必须
chmod 600
chown root:root #用户必须和启动服务的用户保持一致
2.的配置:
## 文件的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See man page for more options.
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证www用户对文件有读取的权限;如果是从客户端=>服务端,要保证www对文件有写权限。
uid = service
gid = service
# 允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = yes
# 只读
read only = no
# 只写
write only = no
# 设定白名单,可以指定IP段(172.18.50.1/255.255.255.0),各个Ip段用空格分开
hosts allow = *
hosts deny = *
# 允许的客户端最大连接数
max connections = 4
# 欢迎文件的路径,非必须
motd file = /etc/rsync/
# pid文件路径
pid file = /etc/rsync/
# 记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定日志文件
log file = /var/log/
# 剔除某些文件或目录,不同步
exclude = lost+found/
# 设置超时时间
timeout = 900
ignore nonreadable = yes
# 设置不需要压缩的文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 模块,可以配置多个,使用如: rsync_man@server_address::share_data
[share_data]
# 模块的根目录,同步目录,要注意权限
path = /tmp/zp/
# 是否允许列出模块内容
list = no
# 忽略错误
ignore errors
# 添加注释
comment =
# 模块验证的用户名称,可使用空格或者逗号隔开多个用户名
auth users = rsync_man
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsync/
# 剔除某些文件或目录,不同步
exclude = lost+found/
3. 配置(欢迎提示语)非必须
++++++++++++++++++
sate zp : rsync start
++++++++++++++++++
4.的配置
rsync_man:oppo123 #rsync_man 是虚拟的同步用户,oppo123 要与客户端保持一致
5.启动rsync服务
rsync --daemon --config=/etc/rsync/
2.客户端配置
配置免密(非必须,如果不配置,会提示输入密码)
echo "oppo123" > /etc/rsync_passwd #路径随意,保证启动同步的用户有权限读取即可
chmod 600 /etc/rsync_passwd
3.客户端正式pull 来同步
rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.90.122.231::share_data /tmp/zp/
遇到的报错
1.file has vanished: "/crx-quickstart/repository/repository/datastore/tmp/" (in server_data)
A: 这个报错表示,rsync同步开始时标记这个文件需要同步,真正去同步的时候,发现这个文件不存在了,可能是这个过程中,该文件被源端删除了。遇到这个错误,不影响rsync的备份结果,只不过rsync的执行码不会是0 ,而是23或者24。
参考文档
rsync官方网站: /ftp/rsync/
rsync配置选项介绍(中文):/f-ck-need-u/p/
rsync介绍:/qq_32706349/article/details/91451053
rsync常见错误:/s/blog_4da051a60101h8am.html