赞
踩
- rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
- rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。
- 它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
- rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬连接等。
无需特殊权限即可安装。
快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容
压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽
安全:可以使用scp、ssh等方式来进行文件传输
支持匿名传输,以方便进行网站镜像
rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步
rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。
在平时使用过程,我们使用最多的是rsync-daemon方式。
注意:在使用rsync时,服务器和客户端都必须安装rsync程序。
rsync-daemon认证
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。
并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
注意:
rsync-daemon认证方式,需要服务器和客户端都安装rsync服务
并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。
客户端启动不启动rsync服务,都不影响同步的正常进行。
ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。
此时同步操作不在局限于rsync中定义的同步文件夹。
注意:
ssh认证方式,不需要服务器和客户端配置rsync配置文件
只需要双方都安装rsync服务,并且也不需要双方启动rsync。
若rsync服务端SSH为标准端口,此时rsync使用方式如下:
rsync -avz /root/test root@10.10.10.10:/root/
若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:
rsync -avz /root/test -e 'ssh -p1234' root@10.10.10.10:/root/
1.1yum安装rysnc
yum -y install rsync ##yum 安装rsync
##设置开机启动
echo “/usr/local/bin/rsync --daemon -config=/etc/rsyncd.conf” >>/etc/profile
1.2准备rsync的配置文件
编辑配置文件 vim /etc/rsync.conf # 以用户rsync用户启动 uid = rsync gid = rsync #无需让rsync以root身份运行,允许接受文件的完整性 fake super = yes #禁锢推送的数据至某个目录,不允许跳出该目录 use chroot = no #最大连接数 max connection = 200 #超时时间 timeout = 600 #进程对应的进程号文件 pid file = /var/run/rsyncd.pid #锁文件 lock file = /var/run/rsync.lock #日志文件,显示出错信息 log file = /var/log/rsyncd.log #忽略错误信息 ignore errors #对备份数据可读写 read only = false #不允许查看模块信息 list = false # 定义虚拟用户,作为连接认证用户 auth users = myuser #定义rsync服务用户连接认证密码文件路径 secrets file = /etc/rsync.passwd #定义模块信息 [backup] #模块注释信息 comment = commit #定义接受备份数据目录 path = /bakup
1.3配置并启动守护进程
# 需要一个rsync进程运行时使用的普通用户 rsync useradd rsync -M -s /sbin/nologin #服务端需要定义一个客户端连接 虚拟用户名和密码 #密码文件形式 user:passwd echo "myuser:123456" > /etc/rsync.passwd chmod 600 /etc/rsync.passwd #准备模块定义好的目录,客户端的数据都存放在该目录下 mkdir /backup chown -R rsync.rsync /backup #启动服务 rsync --daemon #查看服务 [root@localhost ~]# ps -ef | grep rsync root 24759 1 0 00:38 ? 00:00:00 rsync --daemon root 24767 16523 0 00:38 pts/0 00:00:00 grep --color=auto rsync [root@localhost ~]# netstat -lntup | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 24759/rsync tcp6 0 0 :::873 :::* LISTEN 24759/rsync
在客户端安装完毕rsync服务后,是不需要启动rsync服务的。
我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。
该密码文件中的密码要与rsync服务器上的密码文件中的密码对应
并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配
yum -y install rsync #安装rsync
echo “123456”>>/etc/rsync.passwd #密码到密码文件
chmod 600 /etc/rsync.passwd # 修改权限
# 查看 rsync 守护程序分配的所有 module 列表,可以执行下面命令。
rsync rsync://10.10.100.220
#具体写法是服务器与目标目录之间使用双冒号分隔`::`
#地址中的module并不是实际路径名,而是 rsync 守护程序指定的模块名
#把本地的文件同步到远程服务器
#rsync [OPTION]… [SRC]… [USER@]HOST::DEST
#rsync [选项] [--port=] [--password-file=] [/local/path] [用户名]@服务端IP::[模块名]
rsync -av --password-file=/etc/rsync.passwd local/ myuser@10.10.100.220::backup
#把远程机器的文件同步到本地
#rsync [OPTION]… [USER@]HOST::SRC [DEST]
#rsync [选项] [--port=] [--password-file=] [用户名@]服务端IP::[模块名] [/local/path]
rsync -av --password-file=/etc/rsync.passwd myuser@10.10.100.220::backup local/
举例
[root@localhost opt]# touch test.txt #创建test.txt文件
[root@localhost opt]# ll
-rw-r--r-- 1 root root 0 Jul 1 05:03 test.txt
#上传文件到服务器
[root@localhost opt]# rsync -avz --password-file=/etc/rsync.passwd /opt/* #myuser@10.10.100.220::backup
sending incremental file list
test.txt
rsync: chgrp ".test.txt.6WNQtu" (in backup) failed: Operation not permitted (1)
sent 90 bytes received 127 bytes 20.67 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
查看服务器(上传成功)
查看服务器的文件
查看同步情况
rsync -avz --password-file=/etc/rsync.passwd myuser@10.10.100.220::backup /opt
-v, –verbose详细模式输出。 -a, –archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。 -z, –compress对备份的文件在传输时进行压缩处理。 --delete:删除那些DST中存在而在SRC中没有的文件。 所有命令: -a:–archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。 -r:–recursive 复制所有下面的资料,递归处理。 -p:–perms 保留档案权限,文件原有属性。 -t:–times 保留时间点,文件原有时间。 -g:–group 保留原有属组。 -o:–owner 保留档案所有者(root only)。 -D:–devices 保留device资讯(root only)。 -l:–links 复制所有的连接,拷贝连接文件。 -z:–compress 压缩模式,当资料在传送到目的端进行档案压缩。 -H:–hard-links 保留硬链接文件。 -A:–acls 保留ACL属性文件,需要配合–perms。 -P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。 --version:输出rsync版本。 -v:–verbose 复杂的输出信息。 -u:–update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。 --port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。 --delete:删除那些目标位置有的文件而备份源没有的文件。 --delete-before: 接收者在传输之前进行删除操作 --password-file=FILE :从 指定密码文件中获取密码。 --bwlimit=KBPS:限制 I/O 带宽。 --filter “-filename”:需要过滤的文件。 --exclude=filname:需要过滤的文件。 --progress:显示备份过程。
断点续传:
–partial
默认情况下,rsync将删除所有部分传输的文件,如果传输被中断。 在某些情况下,保留部分已经传输的文件时所希望的,使用–partial参数告知rsync保留部分传输过的文件,可以使该文件剩余部分传输的更快速。
–partial-dir=DIR
保留部分传输文件时,比–partial参数更好的方法是指定一个目录来保存部分数据(而不是将其写入目标文件)。在下一个传输过程中,rsync将使用这个dir中的文件作为数据,以加快回复传输的速度,并在它达到目的后将其删除。
rsync -avz --partial /tmp/test.txt myuser@10.10.100.220::backup
rsync -avz --partial-dir=DIR /tmp/test.txt myuser@10.10.100.220::backup
rsync限速使用:
限速参数:
–bwlimit=KBPS
该参数允许最大传输速率是多少KB/s,设置为0则不限速
rsync -avz --bwlimit=100 /tmp/test.txt myuser@10.10.100.220::backup
# 在独立运行时,用于指定的服务器运行的 IP 地址 address = IP # 监听端口 port = 873 # rsync 的守护进程将其 PID 写入指定的文件 pid file = /var/run/rsyncd.pid # 指定支持 max connections 参数的锁文件 lock file = /var/run/rsync.lock # 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog log file = /var/log/rsyncd.log #========== 控制参数 =============# # 以指定的 UID 传输文件 uid = rsync # 指定该模块以指定的 GID 传输文件。 gid = rsync # 禁锢推送的数据至某个目录, 不允许跳出该目录, # 默认为 yes,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下 # 这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限 # 并且不能备份指向 path 外部的符号连接所指向的目录文件 use chroot = no # 无需让rsync以root身份运行,允许接收文件的完整属性 fake super = yes # 大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试 # 默认为0 (没有限制) max connections = 200 # 超时时间 timeout = 600 # 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。 # 一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作 # 以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。 ignore errors # 指定是否允许客户上传文件。 # 默认为true,不允许用户上传文件, # 若为 false 并且服务器目录也具有读写权限则允许上传。 read only = false # 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。 # 默认为 true,如果设置该选项为 false,可以创建隐藏的模块 list = false
模块参数主要用于定义 rsync 服务器哪个目录要被同步。
模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。
而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:
# 指定模块名
[backup]
# 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的
path = /backup
# 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
comment = commit
# 指定多个由空格隔开的多个文件或目录(相对路径) # 并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。 exclude = exclude_file # 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义 exclude from = exclude-file.txt # 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。 # 这等同于在客户端命令中使用 –include 来指定模式 。 include = include-file.txt # 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义 include from = exclude-file.txt # 一个模块只能指定一个exclude 参数、一个include 参数 # 结合 include 和 exclude 可以定义复杂的exclude/include 规则 # 这几个参数分别与相应的rsync 客户命令选项等价,唯一不同的是它们作用在服务器端
# rsync 默认匿名方式传输 # 若只配置匿名访问的 rsync 服务器,则无需设置下述参数 # 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。 # 这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中 auth users = user_name # 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用 secrets file = /etc/rsync.passwd # rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。 # rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为: # username:passwd # 一般来说口令最好不要超过8个字符 # 一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。 # 其中每一个认证模块可以对应不同的客户端。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。