Rsync服务详解
2021-11-15 本文已影响0人
小屁孩云熙
1. 备份服务器说明
1.1 作用
- 数据备份的服务器
- 进行日志统一保存
1.2 如何部署搭建
利用rsync
服务
1.3 扩展
在某个目录下所有文件中 查找 特殊字符串
grep -r "xxx" /data/
-r 递归查找
2. rsync 介绍
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具
2.1 rsync 软件使用方法
2.1.1 rsync 命令
实现 1v4
- 本地备份数据
rsync 命令可以 顶替 cp 命令 实现本地备份数据
# 001 - cp 命令备份过程
# 备份目录
[root@sec01 ~]# ll /tmp/
total 0
# 使用 cp 命令备份,并查看结果
[root@sec01 ~]# cp /etc/hosts /tmp
[root@sec01 ~]# ll /tmp/
total 4
-rw-r--r--. 1 root root 158 Nov 11 10:52 hosts
# 002 - rsync 命令备份过程
# 备份目录
[root@sec01 ~]# ll /tmp/
total 0
# 使用 rsync 命令进行备份,并查看结果
[root@sec01 ~]# rsync /etc/hosts /tmp
[root@sec01 ~]# ll /tmp
total 4
-rw-r--r--. 1 root root 158 Nov 11 10:53 hosts
- 远程备份数据
rsync 命令可以 顶替 scp 命令 实现远程备份数据
# scp 命令实现远程备份数据
# 远程主机备份目录
[root@NeoKylin ~]# mkdir /backup
[root@NeoKylin ~]# ll /backup
total 0
# 本地主机进行备份
[root@sec01 ~]# scp -rp /etc/hosts 10.1.1.101:/backup
The authenticity of host '10.1.1.101 (10.1.1.101)' can't be established.
ECDSA key fingerprint is SHA256:GLYtRcs9toG4qNkP9CJWbSIVXTiRJnC9+Ce/LW+5opk.
ECDSA key fingerprint is MD5:ca:79:89:e1:a2:b9:f3:6d:cf:4a:bf:c8:9e:03:9d:c2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.101' (ECDSA) to the list of known hosts.
root@10.1.1.101's password:
hosts 100% 158 50.8KB/s 00:00
# 远程主机查看结果
[root@NeoKylin ~]# ll /backup
total 4
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
# scp命令 参数说明
1. -r 递归复制传输数据
2. -p 保持文件属性信息不变
# rsync 命令实现远程备份数据
# 远程主机备份目录
[root@NeoKylin ~]# ll /backup
total 4
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
# 本地主机备份
[root@sec01 ~]# rsync -rp /etc/hosts 10.1.1.101:/backup/hosts_rsync
root@10.1.1.101's password:
# 远程主机查看结果
[root@NeoKylin ~]# ll /backup
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 扩展 - rsync命令 备份目录
# 环境部署
[root@sec01 ~]# mkdir /data
[root@sec01 ~]# touch /data/{01..03}.txt
[root@sec01 ~]# ll /data/
total 0
-rw-r--r--. 1 root root 0 Nov 11 11:10 01.txt
-rw-r--r--. 1 root root 0 Nov 11 11:10 02.txt
-rw-r--r--. 1 root root 0 Nov 11 11:10 03.txt
# 001
# 远程主机环境
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 开始远程备份
[root@sec01 ~]# rsync -rp /data 10.1.1.101:/backup
root@10.1.1.101's password:
# 查看结果
[root@NeoKylin ~]# ll /backup
total 8
drwxr-xr-x. 2 root root 48 Nov 11 11:11 data
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
[root@NeoKylin ~]# tree /backup
/backup
├── data
│ ├── 01.txt
│ ├── 02.txt
│ └── 03.txt
├── hosts
└── hosts_rsync
1 directory, 5 files
# 002
# 远程主机环境
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 开始远程备份
[root@sec01 ~]# rsync -rp /data/ 10.1.1.101:/backup
root@10.1.1.101's password:
# 查看结果
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 0 Nov 11 11:22 01.txt
-rw-r--r--. 1 root root 0 Nov 11 11:22 02.txt
-rw-r--r--. 1 root root 0 Nov 11 11:22 03.txt
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
[root@NeoKylin ~]# tree /backup/
/backup/
├── 01.txt
├── 02.txt
├── 03.txt
├── hosts
└── hosts_rsync
0 directories, 5 files
# 总结:以上 001 和 002 两种方式都实现了目录远程备份。区别在于,备份命令中,如果备份目录后面跟 '/' ,则会将目录下的文件全部备份到目标主机,若不跟 '/',则会将整个目录备份至目标主机。
- rsync 可以替代删除命令(实现无差异同步数据)
# 远程主机 目录情况
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 0 Nov 11 11:22 01.txt
-rw-r--r--. 1 root root 0 Nov 11 11:22 02.txt
-rw-r--r--. 1 root root 0 Nov 11 11:22 03.txt
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 本地主机
[root@sec01 ~]# ll /tmp/
total 0
[root@sec01 ~]# rsync -rp --delete /tmp/ 10.1.1.101:/backup
root@10.1.1.101's password:
# 查看目标主机结果
[root@NeoKylin ~]# ll /backup/
total 0
# 注意:
rsync -rp --delete /tmp/ 10.1.1.101:/backup
要想清空目标目录,命令中 空目录(/tmp) 后面一定要跟 '/',否则会将该目录备份到对方目录中。
# 扩展 - 面试题目
有一个存储数据信息的目录,目录中数据存储了约50GB,如何快速删除该目录
rsync -rp --delete 空目录 目标目录
- 替代查看文件命令 ls
[root@sec01 ~]# ls /etc/hosts
/etc/hosts
[root@sec01 ~]# rsync /etc/hosts
-rw-r--r-- 158 2021/10/13 21:23:51 hosts
[root@sec01 ~]# rsync /etc/hosts000
rsync: link_stat "/etc/hosts000" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
2.1.2 rsync 语法及格式
SYNOPSIS
# 本地备份数据
Local: rsync [OPTION...] SRC... [DEST]
# 远程备份数据
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
# 守护进程方式备份数据,备份服务
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
# 拉取:客户端恢复数据
# 推送:客户端备份数据
- 守护进程方式备份数据
- 可以进行一些配置管理
- 可以进行安全策略管理
- 可以实现自动传输备份数据
2.2 rsync 服务部署安装过程
2.2.1 扩展 - Linux 系统安装部署服务流程
- 下载安装软件
- 编写配置文件
- 搭建服务环境
- 启动服务程序(开机自启)
- 测试服务功能
2.2.2 rsync 守护进程部署方式(服务端)
2.2.2.1 下载安装软件
# 检查是否安装
[root@backup ~]# rpm -qa|grep rsync
rsync-3.1.2-4.el7.x86_64
[root@backup ~]# rpm -qa rsync
rsync-3.1.2-4.el7.x86_64
# 若未安装,进行安装
yum install rsync -y
2.2.2.2 编写配置文件
配置文件帮助说明
man rsyncd.conf
备份原文件
cp /etc/rsyncd.conf{,.bak}
编写配置文件
vim /etc/rsyncd.conf
# rsync_config
# created by yunxuan at 2021
# rsyncd.conf start
# 指定管理备份目录的用户
uid = rsync
# 指定管理备份目录的用户组
gid = rsync
# 定义rsync备份服务的端口号,默认为873
port = 873
# 将rsync虚拟用户伪装成一个超级管理员用户
#fake super = yes
# 和安全相关的配置
use chroot = no
# 最大连接数,同时只有200个客户端连接至服务端
max connections = 200
# 超时时间,单位为秒
timeout = 300
# 记录进程号码信息 1. 让程序快速结束进程(kill杀死进程) 2. 判断服务是否运行
pid file = /var/run/rsyncd.pid
# 锁文件,第201个连接请求时拒绝
lock file = /var/run/rsync.lock
# rsync服务的日志文件,用于排错分析问题
log file = /var/log/rsyncd.log
# 忽略传输中的简单错误
ignore errors
# 指定备份目录可读可写
read only = false
# 列表功能,使客户端可以查看服务端的模块信息
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 yunxuan"
# 指定备份目录
path = /backup
2.2.2.3 搭建服务环境
- 创建 rsync 服务的虚拟用户
[root@backup ~]# id rsync
id: rsync: no such user
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
- 创建备份服务 认证密码文件
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 20 Nov 11 17:09 /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 20 Nov 11 17:09 /etc/rsync.password
- 创建备份目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Nov 11 17:11 /backup/
2.2.2.4 启动备份服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-11-11 17:12:47 CST; 1min 37s ago
Main PID: 8021 (rsync)
CGroup: /system.slice/rsyncd.service
└─8021 /usr/bin/rsync --daemon --no-detach
Nov 11 17:12:47 backup systemd[1]: Started fast remote file copy program daemon.
[root@backup ~]# netstat -lntup|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 8021/rsync
tcp6 0 0 :::873 :::* LISTEN 8021/rsync
2.2.3 rsync 客户端部署方式
- 创建密码文件
[root@nfs01 ~]# echo "123456">/etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
123456
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 Nov 11 18:42 /etc/rsync.password
- 进行免交互数据传输
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
sent 47 bytes received 20 bytes 134.00 bytes/sec
total size is 320 speedup is 4.78
2.2.4 rsync 服务功能测试
2.2.4.1 语法格式介绍
- 推送方式 - 客户端向服务端备份数据
Access via rsync daemon:
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
SRC:要推送的备份数据
[USER@]:指定认证用户信息
HOST:指定远程主机的IP地址或者主机名称
::DEST:备份服务器的模块信息
2.2.4.2 测试
- 测试001
# 客户端数据推送
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: chgrp ".hosts.wsQmU0" (in backup) failed: Operation not permitted (1)
sent 210 bytes received 124 bytes 133.60 bytes/sec
total size is 320 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
# 服务端检查结果
[root@backup ~]# ll /backup/
total 4
-rw------- 1 rsync rsync 320 Nov 11 17:26 hosts
- 报错说明
详见4.4章节
- 错误溯源
[root@nfs01 tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 11 18:47 t01
[root@nfs01 tmp]# id yunxuan
uid=1000(yunxuan) gid=1000(yunxuan) groups=1000(yunxuan)
[root@nfs01 tmp]# su - yunxuan
[yunxuan@nfs01 ~]$ cd /tmp/
[yunxuan@nfs01 tmp]$ chgrp yunxuan t01
chgrp: changing group of ‘t01’: Operation not permitted
2.3 rsync 命令参数详细说明
2.3.1 命令参数详解
参数 | 说明 |
---|---|
-v --verbose | 显示详细的传输信息 |
-a --archive | 命令的归档参数 包含:rtopgDl |
-r --recursive | 递归参数 |
-t --times | 保持文件属性信息时间信息不变(修改时间) |
-o --owner | 保持文件的属主信息不变 |
-g --group | 保持文件的属组信息不变 |
-p --perms | 保持文件权限信息不变 |
-D -- | 保持设备文件信息不变 |
-l --links | 保持链接文件属性不变 |
-L | 保持链接文件数据信息不变 |
-P | 显示数据传输的进度信息 |
--exclude=PATTERN | 排除指定数据不被传输(单个文件排除) |
--exclude-from=file | 排除指定数据不被传输(批量排除) |
--bwlimit=RATE | 限制传输的速率(100Mb/s <==> 12.5MB/s) |
--delete | 无差异同步参数(慎用) |
2.3.2 扩展
2.3.2.1 如何使得参数 o 和 g 生效
要使得参数 o 和 参数 g 生效,即客户端服务器上文件的属主和属组信息,同步至备份服务器依旧和客户端服务器保持一致。
修改 rsyncd.conf
配置文件
uid = root
gid = root
fake super = no
修改完配置文件,需要重启服务
2.3.2.2 慎用
rsync -avz --delete /null/ root@172.16.1.41:/
# 慎用
若 /null 目录为空,执行此命令对端服务器根目录直接清空。
3. rsync 传输数据的原理
image-20211115192841082.png4. rsync 服务传输数据过程中常见的报错及解决方案
4.1 认证用户名错误或者密码错误
image-20211111175737522.png# 查看服务端认证用户及密码配置
01. 查看 /etc/rsyncd.conf 配置文件中,认证用户及密码文件保存位置配置
02. 查看相关配置文件,确认认证用户和密码,再次进行数据传输
## 可能原因
1.密码真的输入错误,用户名真的错误
2.secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
3.letc/rsync.password文件权限不是600
4.rsync backup:123456 密码配置文件后面注意不要有空格
5.rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
4.1.1 扩展 - 如何确认文件内容行尾有空格
- 001
vim 目标文件
01. 行底模式搜索
02. 行底模式输入命令 set list,如果有空格行尾会显示$符号
image-20211111183504910.png
- 002
[root@nfs01 tmp]# cat -A t01
123 $
4.2 服务端未创建备份目录
image-20211111180102191.png# 服务端执行
01. 查看服务配置中,备份目录是什么
02. 创建备份目录
03. 设置目录属主和属组
mkdir /backup
chown -R rsync.rsync /backup
4.3 服务端备份目录权限问题
image-20211111180343334.png查看服务端备份目录权限
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 root root 6 Nov 11 18:03 /backup/
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Nov 11 18:03 /backup/
4.4 rsync虚拟用户无权限修改文件属主和属组信息报错
image-20211111180541506.png问题:
由于rsync服务同步数据原理造成
同步的文件属主和属组均为root用户或者其他用户,客户端同步过去之后,以rsync配置文件中设置的虚拟用户的身份修改文件的属主和属组信息(改为rsync配置文件中设置的虚拟用户)
# 解决方法(两种)
001. 同步之前修改文件的属主和属组信息,再进行同步
[root@nfs01 ~]# useradd rsync
[root@nfs01 ~]# chown rsync.rsync /etc/hosts
[root@nfs01 ~]# ll /etc/hosts
-rw-r--r--. 1 rsync rsync 320 Nov 11 01:19 /etc/hosts
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 102 bytes received 49 bytes 60.40 bytes/sec
total size is 320 speedup is 2.12
002. 修改 rsyncd.conf 配置文件
# 将rsync虚拟用户伪装成一个超级管理员用户
fake super = yes
保存,重启服务,同步将会正常。
[root@backup ~]# vim /etc/rsyncd.conf
[root@backup ~]# grep fake /etc/rsyncd.conf
fake super = yes
[root@backup ~]# systemctl restart rsyncd
[root@nfs01 ~]# ll /etc/hosts
-rw-r--r--. 1 root root 320 Nov 11 01:19 /etc/hosts
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
sent 50 bytes received 23 bytes 29.20 bytes/sec
total size is 320 speedup is 4.38
4.5 对端安全设备阻断
image-20211111182153233.png检查防火墙等安全设备或者安全策略
01. 修改安全策略
02. 关闭防火墙
4.6 命令输入错误
image-20211111182425390.png正确姿势
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
3. 扩展部分
3.1 守护进程多模块功能配置
sa sa_data.txt
dev dev_data.txt
dba dba_data.txt
3.1.1 配置
vim /etc/rsyncd.conf
# 其中,底行模式中 23,25copy31 解释为下:
将23行至25行的内容 复制到 31行之后
image-20211115162738166.png
# 改完配置,重启服务
[root@backup ~]# systemctl restart rsyncd
# 创建备份目录
[root@backup ~]# echo /{dba,dev_data}
/dba /dev_data
[root@backup ~]# mkdir /{dba,dev_data}
# 给相应备份目录授权
[root@backup ~]# chown -R rsync.rsync /{dba,dev_data}
[root@backup ~]# ll -d /{dba,dev_data}
drwxr-xr-x 2 rsync rsync 6 Nov 15 16:31 /dba
drwxr-xr-x 2 rsync rsync 6 Nov 15 16:31 /dev_data
3.1.2 测试
# 进行测试
# 01. 测试之前备份服务器环境
[root@backup ~]# ll /{backup,dba,dev_data}
/backup:
total 0
/dba:
total 0
/dev_data:
total 0
# 02. 数据同步
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 210 bytes received 43 bytes 506.00 bytes/sec
total size is 320 speedup is 1.26
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::dev --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 210 bytes received 43 bytes 506.00 bytes/sec
total size is 320 speedup is 1.26
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::dba --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 210 bytes received 43 bytes 506.00 bytes/sec
total size is 320 speedup is 1.26
# 03. 查看结果
[root@backup ~]# ll /{backup,dev_data,dba}
/backup:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts
/dba:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts
/dev_data:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts
3.2 守护进程的排除功能
3.2.1 环境准备
[root@nfs01 ~]# mkdir -p /data/{a..c}
[root@nfs01 ~]# touch /data/{a..c}/{1..3}.txt
[root@nfs01 ~]# tree /data
/data
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── c
├── 1.txt
├── 2.txt
└── 3.txt
3 directories, 9 files
3.2.2 实验1(以单个文件排除)
需求:备份 a 目录所有文件,b目录除 1.txt 之外的所有文件,c目录不备份。
- 以绝对路径的方式
# 01. 备份
[root@nfs01 ~]# rsync -avz /data --exclude=/data/b/1.txt --exclude=/data/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt
sent 376 bytes received 135 bytes 1,022.00 bytes/sec
total size is 0 speedup is 0.00
# 02. 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── b
├── 2.txt
└── 3.txt
3 directories, 5 files
- 以相对路径的方式
# 01. 备份
[root@nfs01 ~]# rsync -avz /data --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt
sent 376 bytes received 135 bytes 1,022.00 bytes/sec
total size is 0 speedup is 0.00
# 02. 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── b
├── 2.txt
└── 3.txt
3 directories, 5 files
- 注意:备份目录加不加 '/' 的区别
以上两种都是在备份目录结尾未加 '/'
# 备份目录(/data/),末尾加'/'
[root@nfs01 ~]# rsync -avz /data/ --exclude=/data/b/1.txt --exclude=/data/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/1.txt
b/2.txt
b/3.txt
c/
c/1.txt
c/2.txt
c/3.txt
sent 591 bytes received 214 bytes 1,610.00 bytes/sec
total size is 0 speedup is 0.00
# 结果(将/data目录下的文件备份过去,不会将/data目录也备份过去。因此,按需使用)
[root@backup backup]# tree /backup
/backup
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── c
├── 1.txt
├── 2.txt
└── 3.txt
3 directories, 9 files
3.2.3 实验2(将排除的文件名写入到一个文件,统一排除)
需求:备份 a 目录所有文件,b 目录除 1.txt 之外的所有文件,c 目录只备份 2.txt 文件
3.2.3.1 绝对路径
- 编辑排除文件
[root@nfs01 data]# cat exclude_file.txt
/data/b/1.txt
/data/c/1.txt
/data/c/3.txt
/data/exclude_file.txt
[root@nfs01 data]# pwd
/data
- 数据同步
[root@nfs01 ~]# rsync -avz /data --exclude-from=/data/exclude_file.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt
data/c/
data/c/2.txt
sent 450 bytes received 158 bytes 1,216.00 bytes/sec
total size is 0 speedup is 0.00
- 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 2.txt
│ └── 3.txt
└── c
└── 2.txt
4 directories, 6 files
3.2.3.2 相对路径
- 编辑排除文件
[root@nfs01 ~]# cat /data/exclude_file.txt
b/1.txt
c/1.txt
c/3.txt
exclude_file.txt
- 数据同步
[root@nfs01 ~]# rsync -avz /data/ --exclude-from=/data/exclude_file.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/2.txt
b/3.txt
c/
c/2.txt
sent 435 bytes received 157 bytes 1,184.00 bytes/sec
total size is 0 speedup is 0.00
- 查看结果
[root@backup backup]# tree /backup/
/backup/
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 2.txt
│ └── 3.txt
└── c
└── 2.txt
3 directories, 6 files
3.2.3.3 扩展(注意:此种方式无法排除相应文件)
# 排除文件
[root@nfs01 ~]# cat /data/exclude_file.txt
/data/b/1.txt
/data/c/1.txt
/data/c/3.txt
/data/exclude_file.txt
# 数据同步
[root@nfs01 ~]# rsync -avz /data/ --exclude-from=/data/exclude_file.txt rsync_backup@10.1.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
exclude_file.txt
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/1.txt
b/2.txt
b/3.txt
c/
c/1.txt
c/2.txt
c/3.txt
sent 707 bytes received 237 bytes 629.33 bytes/sec
total size is 65 speedup is 0.07
# 查看结果
[root@backup backup]# tree /backup/
/backup/
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── c
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── exclude_file.txt
3 directories, 10 files
3.3 守护进程创建备份目录
3.3.1 实验1
需求:将 web01 服务器和 nfs01 服务器上的 hosts 文件备份至 备份服务器
- 数据同步
# web01 服务器同步数据
[root@web01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.1.1.7/ --password-file=/etc/rsync.password
sending incremental file list
created directory 10.1.1.7
hosts
sent 210 bytes received 74 bytes 568.00 bytes/sec
total size is 320 speedup is 1.13
# nfs01 服务器同步数据
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.1.1.31/ --password-file=/etc/rsync.password
sending incremental file list
created directory 10.1.1.31
hosts
sent 210 bytes received 75 bytes 570.00 bytes/sec
total size is 320 speedup is 1.12
- 查看结果
[root@backup backup]# ll
total 0
drwxr-xr-x 2 rsync rsync 19 Nov 15 17:55 10.1.1.31
drwxr-xr-x 2 rsync rsync 19 Nov 15 17:54 10.1.1.7
[root@backup backup]# tree
.
├── 10.1.1.31
│ └── hosts
└── 10.1.1.7
└── hosts
2 directories, 2 files
注意: rsync 客户端无法在服务端创建多级目录,只能创建一级目录
[root@web01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.1.1.7/a/b/c --password-file=/etc/rsync.password
sending incremental file list
rsync: change_dir#3 "/10.1.1.7/a/b" (in backup) failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(695) [Receiver=3.1.2]
3.4 守护进程的访问控制
3.4.1 守护进程的白名单和黑名单
host allow = 172.16.1.0/24
host deny = 0.0.0.0/32
# 允许172.16.1.0/24 网段内的主机均可以在服务端同步数据
# 不禁止任何地址进行数据同步
如果 host deny = 0.0.0.0/0 ,除了白名单之外,其余任何地址阻止
3.4.2 配置安全控制
3.4.2.1 只有白名单
如何白名单中有对应IP允许,则可以传输。否则,拒绝连接。
3.4.2.2 只有黑名单
如果黑名单中没有对应IP信息,则可以传输数据。如果黑名单中有对应IP信息,则拒绝连接。
3.4.2.3 黑白名单均有
白名单优先级高于黑名单,若出现黑白名单冲突。
3.5 守护进程的列表功能
使得客户端可以查看服务端的模块信息
- 编辑配置文件并重启服务
# 01. 编辑配置文件
vim /etc/rsyncd.conf
list = true
# 02. 重启服务
systemctl restart rsyncd
- 客户端查看服务端模块信息
[root@nfs01 ~]# rsync rsync_backup@172.16.1.41::
backup "backup dir by yunxuan"
dev "backup dir by yunxuan"
dba "backup dir by yunxuan"
总结:建议设置 list = false ,否则不安全。