rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于unix/linux/windows等, 目前,已支持跨平台,可以在Windows与Linux间进行数据同步。
特征:
# Rsync的命令格式常用的有以下三种;
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
-L 保留源文件的软连接文件
-H 保留源文件的硬链接文件
-r 递归模式,包含目录及子目录的所有信息
-z 在传输文件的同时进行压缩
-v 显示同步过程的信息
-t 保留文件的时间标记(修改时间不变)
-o 保留文件的属主标记
-p 保留了文件的权限标记
-D 保留了设备文件和一些特殊的文件
-S 对零散文件的处理
-g 保留了文件的属组信息
-a 归档
-v 显示详细的传输信息
-P 显示数据传输的进度信息
--version 查看rsync版本
--exclude=PATTERN 排除指定数据不被传输
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE 显示传输的速率 100Mb/8=12.5MB
--delete 无差异同步参数(慎用)
PS: 如果让-o和-g参数生效,需要将配置文件uid和gid改为root,需要将 fake super参数进行注释
[root@study ~]# ls
anaconda-ks.cfg
[root@study ~]# rsync -a anaconda-ks.cfg a.cfg
[root@study ~]# ll a.cfg
-rw-------. 1 root root 1388 Nov 23 2020 a.cfg
[root@study /]# rsync -avz anaconda-ks.cfg root@192.168.10.133:/root/b.cfg # 两边都要安装rsync
#目录后面没有加"/",就表示拷贝当前目录和目录下的文件
[root@study ~]# rsync -avz root@192.168.10.133:/etc/yum.repos.d /root/
[root@study ~]# ls
anaconda-ks.cfg yum.repos.d
# 目录后面加"/", 表示拷贝当前目录下的文件
[root@study ~]# rsync -avz root@192.168.10.133:/etc/yum.repos.d/ /root/
[root@study ~]# ls
anaconda-ks.cfg CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo
CentOS-Base.repo.backup CentOS-fasttrack.repo CentOS-Vault.repo
客户端—服务端
第一步: 下载安装软
rpm -qa|grep rsync
yum install -y rsync
第二步: 编写配置文件
man rsyncd.conf
vim /etc/rsyncd.conf
##created by HQ at 2017
###rsyncd.conf start##
uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
lock file = /var/run/rsync.lock --- 锁文件
log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题
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 oldboy"
path = /backup --- 模块中配置参数 指定备份目录
第三步: 创建rsync服务的虚拟用户
[root@server ~]# useradd rsync -M -s /sbin/nologin
第四步: 创建备份服务认证密码文件
[root@server ~]# echo "rsync_backup:redhat123" > /etc/rsync.password
# 赋予文件权限
[root@server ~]# chmod 600 /etc/rsync.password
第五步: 创建备份目录并修改属主属组信息
[root@server ~]# mkdir /backup/ # 创建备份目录
[root@server ~]# chown rsync.rsync /backup/ # 修改属主属组权限
第六步: 启动备份服务
[root@server ~]# systemctl restart rsyncd # 重启服务
[root@server ~]# systemctl enable rsyncd # 设置开机自启动
[root@server ~]# systemctl status rsyncd # 查看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 Sun 2021-06-13 22:52:02 CST; 20s ago
Main PID: 4126 (rsync)
CGroup: /system.slice/rsyncd.service
└─4126 /usr/bin/rsync --daemon --no-detach
Jun 13 22:52:02 server systemd[1]: Started fast remote file copy program daemon.
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
src: 要推送备份数据信息
[USER@]: 指定认证用户信息
HOST: 指定远程主机的IP地址或者主机名称
::DEST: 备份服务器的模块信息
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
第一步: 创建一个秘密文件
[root@client ~]# echo "redhat123" > /etc/rsync.password # /etc/rsync.password 这个文件要和服务端匹配
[root@client ~]# chmod 600 /etc/rsync.password # 修改权限
第二步: 进行免交互传输数据测试
[root@client ~]# rsync -azv /etc/hosts rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 140 bytes received 43 bytes 366.00 bytes/sec
total size is 158 speedup is 0.86
sa sa_data.txt
dev dev_data.txt
dba dba_data.txt
[backup]
comment = "backup dir by oldtest"
path = /backup
[dba]
comment = "backup dir by oldtest"
path = /dba
[dev]
comment = "backup dir by oldtest"
path = /devdata
准备环境:
[root@client ~]# mkdir -p /oldtest
[root@client ~]# mkdir -p /oldtest/{a..c}
[root@client ~]# touch /oldtest/{a..c}/{1..3}.txt
[root@client ~]# tree /oldtest
/oldtest
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── c
├── 1.txt
├── 2.txt
└── 3.tx
–exclude=PATTERN (排除指定数据不被传输)
绝对路径方式:
[root@client ~]# rsync -azv /oldtest --exclude=/oldtest/b/1.txt --exclude=/oldtest/c/ rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
oldtest/
oldtest/a/
oldtest/a/1.txt
oldtest/a/2.txt
oldtest/a/3.txt
oldtest/b/
oldtest/b/2.txt
oldtest/b/3.txt
sent 382 bytes received 135 bytes 206.80 bytes/sec
total size is 0 speedup is 0.0
查看服务端是否已经备份
[root@server ~]# tree /backup/
/backup/
├── hosts
└── oldtest
├── a
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── b
├── 2.txt
└── 3.txt
3 directories, 6 file
相对路径方式:
[root@client ~]# rsync -avz /oldtest --exclude=b/1.txt --exclude=c/ rsync_backup@192.168.10.133::backup password-file=/etc/rsync.password
–exclude-from=file — 批量排除
第一步: 编写好一个排除文件
[root@client ~]# cat /oldtest/exclude.txt
b/1.txt
c/2.txt
c/3.txt
exclude.txt # 这里出现exclude.txt是因为我们要把排除文件删掉,这不是我们想要的内容
第二步: 实现批量排除功能
[root@client ~]# rsync -avz /oldtest --exclude-from=/oldtest/exclude.txt rsync_backup@192.168.10.133::backup --password-file=/etc/rsync.password
sending incremental file list
oldtest/
oldtest/a/
oldtest/a/1.txt
oldtest/a/2.txt
oldtest/a/3.txt
oldtest/b/
oldtest/b/2.txt
oldtest/b/3.txt
oldtest/c/
oldtest/c/1.txt
sent 457 bytes received 158 bytes 1,230.00 bytes/sec
total size is 0 speedup is 0.00
[root@client ~]# rsync -azv /etc/hosts rsync_backup@192.168.10.133::backup/192.168.10.132/ --password-file=/etc/rsync.password
sending incremental file list
created directory 192.168.10.132
hosts
sent 140 bytes received 80 bytes 440.00 bytes/sec
total size is 158 speedup is 0.72
# 注意:要创建的目录后面一定要跟上/,表示在此目录下
# 客户端无法在服务端创建多级目录