Rsync文件传输
# 介绍
Rsync(Remote Sync)是一个快速、灵活、稳定的文件同步和传输工具,适用于各种场景,包括备份、数据同步、远程文件共享等。
以下是Rsync服务的一些关键特性和用法:
- 快速传输:Rsync采用差异传输算法,只传输文件的变化部分,而不需要每次都传输整个文件,因此可以大大提高传输效率。
- 远程同步:Rsync可以通过SSH等安全协议进行加密的远程同步,确保数据传输的安全性。
- 保持文件属性:Rsync可以保持文件的权限、时间戳等属性,确保在同步过程中文件的完整性和一致性。
- 灵活的过滤规则:可以使用通配符或正则表达式指定需要同步的文件或目录,也可以排除不需要同步的文件或目录,从而实现灵活的同步策略。
- 增量备份:通过Rsync的差异传输算法,可以实现增量备份,只传输已更改的文件部分,从而节省存储空间和带宽。
- 支持部分文件同步:Rsync支持在文件级别进行同步,可以部分同步大文件,而不需要重新传输整个文件。
- 轻量级和易于使用:Rsync是一个轻量级的命令行工具,易于安装和使用,适用于各种操作系统和环境。
我们可以服务方式启动Rsync,可以在一台计算机上安装Rsync软件,并配置Rsync服务的设置,如同步目录、账号密码文件路径、监听端口等。
也可以直接作为SSH文件传输工具进行使用,这种方式不需要进行配置,直接即可使用。
# 服务搭建
# 1.先确认rsync是否安装
rpm -qa rsy*
# 2.编写配置文件
我们可以通过"man rsyncd.conf"命令查看配置文件的配置方法。
配置文件路径:/etc/rsyncd.conf
配置参数:
# 指定管理备份目录的用户
uid = rsync
# 指定管理备份目录的用户组
gid = rsync
# 定义rsync备份服务的网络端口号
port = 873
# 传输时是否将当前用户伪装成超级用户进行传输
fake super = yes
# 和安全相关的配置
use chroot = no
# 客户端最大同时连接数
max connections = 200
# 超时时间,单位秒,超过将被断开连接,也就是客户端连接空闲最大时间(没有数据传输)
timeout = 300
# 服务启动时,记录服务进程PID到指定文件,可用于快速关闭服务进程,或判断服务是否运行
pid file = /var/run/rsyncd.pid
# 锁文件,用于到达最大连接数时,禁止更多的连接
lock file = /var/run/rsyncd.lock
# 运行日志文件
log file = /var/log/rsyncd.log
# 是否暂时忽略传输中的简单错误,配置之后,出了小问题,可以等传完之后在处理
# 比如传到一半有一些小文件出问题没有传输成功,如果不配置该文件就会停止传输
ignore errors = yes
# 指定备份目录是否只读
read only = false
# 是否允许客户端查看所有的模块信息,站在安全的角度尽量不要开启,避免其他人知道模块名
# 开启后客户端可以通过"rsync rsync_backup@10.0.0.41::"命令查看所有模块信息
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]
# 模块的描述
comment = "backup dir by oldboy"
# 指定备份目录
path = /backup
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 3.创建管理备份目录的虚拟用户
# 用于管理备份目录
useradd -M -s /sbin/nologin rsync
2
# 4.创建备份服务认证用户密码文件
echo "test:qwe123123" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
2
# 5.创建备份目录
mkdir /backup
# 备份目录属主和属组,修改为配置的管理用户
chown rsync:rsync /backup
# 修改目录权限,防止其他用户可查看
chmod -R 700 /backup
2
3
4
5
# 6.启动备份服务
systemctl start rsyncd && systemctl enable rsyncd
systemctl status rsyncd
2
# 7.执行Rsync守护进程方式命令
从备份服务器拉取备份的数据:rsync [OPTION] rsync://[USER@]HOST[:PROT] /SRC... [DEST]
从客户端推送数据到备份服务器:rsync [OPTION] SRC... [USER@]HOST::DEST
参数说明:
SRC
- 要推送的备份数据路径[USER@]
- 指定的认证用户HOST
- 指定远程主机的IP地址或主机名称DEST
- 备份服务器Rsync文件配置的模块名
# Rsync服务方式客户端配置
在客户端创建一个密码文件,只将密码信息放置在密码文件中,修改密码文件权限不让其他用户看到。
然后使用rsync时指定该参数 --password-file=[密码文件路径]
表示使用密码文件登录。
# 数据传输过程
1.客户端执行命令。
rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup\
2.服务端查找认证用户存不存在。
查找rsyncd.conf的认证用户配置中是否存在该用户 如果没有用户则报错 auth failed on module backup
3.验证用户密码是否正确。
验证用户密码是否正确是否与账号密码文件内用户的密码一致 如果不一致则报错 auth failed on module backup
4.客户端发送备份数据到服务端备份目录,服务端以备份管理用户身份接收数据。
权限会被修改为备份管理用户的属组和属组
# 常用参数
-a
包含rtopgDl参数
-v
显示详细的传输信息
- file list传输的增量文件
- sent 发送的字节数
- received 接收的字节数
- bytes/sec 传输的速率
- total size is 传输的总大小
-z
压缩传输
--password-file=[密码文件路径]
使用密码文件登录用户
-r
对目录进行递归传输
-t
保持传输后文件修改时间不变
-o
保持文件的属主不变
-g
保持文件的属组不变
-p
保持文件的权限不变
-D
保持设备文件不变 防止传输后变成普通文件
-l
保持链接文件属性不变 (传快捷方式)
-L
备份链接文件时传输链接的源文件
-P
显示数据传输的进度信息
--exclude=[PATTERN]
排除指定数据 不被传输 (单个文件)
--exclude-from=[file]
排除文本文件中指定的文件 不被传输 (多个文件)
--bwlimit=RATE
指定传输速率
--delete
无差异同步(慎用),客户端目录没有的文件,备份服务器有的话将被删除
# 应用技巧
# 守护进程多模块功能配置
- 模块同等于目录路径(记得创建目录),不同的数据备份在不同的目录,设置不同的模块。
# 守护进程的排除功能
命令指定
- 使用--exclude=排除文件,相对路径是相对于
/备份目录
,例如:/tedir --exclude=sonA/1.txt
。同时也支持绝对路径。
文件指定
- 使用--exclude-from=排除文本路径
- 将要排除的文件以绝对或者相对路径写入文本,然后使用命令指定该文本。
# 备份文件到子目录下
- 可防止多台服务器备份的文件名重复而造成的覆盖。
- 在备份时,直接在模块后面指定目录,目录以/结尾,例如:
::backup/dir01/
Rsync只能创建一级目录,无法创建多级目录
# 守护进程的访问策略配置
一般有以下三种情况:
只有白名单,没有黑名单。
- 只有在白名单内的主机或网段才能传输。
只有黑名单,没有白名单。
- 只有不在黑名单内的主机或网段才能传输。
有白名单,也有黑名单。
- 先匹配白名单,再匹配黑名单。即允许又阻止一个网段或主机时,白名单优先于黑名单。
# 常见错误
出现传输不了可以查看日志文件,前提是配置文件内配置了日志文件才会有。
rsync: recv_generator: failed to stat "hosts" (in backup): Permission denied (13)
selinux导致的远程备份连接失败,关闭selinux即可。
auth failed on module backup
该报错一是认证用户相关问题、认证用户不存在、认证用户密码错误,密码错误有以下几种情况:
1.注意密码后面的空格,可用vim搜索空格,或者底行模式使用:set list。
2.认证密码文件路径配置错误,查看实际密码文件路径和配置路径是否一致。
3.服务端password文件权限不正确,拥有者必须是root用户。
No route to host
防火墙配置问题,修改或关闭防火墙解决。
The remote path must start with a module name to a /
语法错误,目标备份目录应当是模块。
Unknown module 'backup'
模块名称错误,没找到指定模块。
cannot stat destination "." (in backup) failed: Permission denied (13)
备份管理用户对备份目录没有权限。
设置权限为管理用户可操作即可,但一般设置属主和属组并设置对应权限,防止普通用户可操作。
chdir failed
备份目录没有建立,或者建立的备份目录和配置文件中定义的不一样。
invalid uid rsync
没有rsync用户,一般rsync创建为虚拟用户即可。
name lookup failed for 172.16.1.31: Name or service not known
rsync客户端连接慢,可以查看日志进行分析。或者试试编写rysnc服务端hosts解析文件。
Connection refused (111)
rsync服务没有正确启动。