rsync---备份命令

徐正雅
2023-12-01


一、功能

rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于unix/linux/windows等, 目前,已支持跨平台,可以在Windows与Linux间进行数据同步。

特征:

  1. 可以镜像保存整个目录树和文件系统;
  2. 可以很容易做到保持源文件的权限, 时间,软硬链接等;
  3. 无需特殊权限即可安装;
  4. 优化流程,传输效率高;
  5. 可以使用scp, ssh等方式来传输文件, 当然也可以通过直接的socket连接;
  6. 支持匿名传输

二、命令格式

# 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参数进行注释

四、常用示例

4.1 拷贝本地文件

[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

4.2 将本地机器的内容拷贝到远程机器

[root@study /]# rsync -avz anaconda-ks.cfg root@192.168.10.133:/root/b.cfg # 两边都要安装rsync 

4.3 将远程机器的内容拷贝到本地机器

#目录后面没有加"/",就表示拷贝当前目录和目录下的文件
[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

五、rsync守护进程部署方式

客户端—服务端

5.1 rsync守护进程服务端配置

第一步: 下载安装软

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.

5.2 rsync守护进程名称语法

Access via rsync daemon

  1. 客户端做拉的操作: 主要用于恢复数据
    Pull:
    rsync [OPTION…] [USER@]HOST::SRC… [DEST]
    rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]

  2. 客户端做推的操作: 主要用于备份数据
    Push:
    rsync [OPTION…] SRC… [USER@]HOST::DEST

       src: 要推送备份数据信息
       [USER@]: 指定认证用户信息
       HOST: 指定远程主机的IP地址或者主机名称
       ::DEST: 备份服务器的模块信息   
    

    rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST

5.3 rsync守护进程客户端配置

第一步: 创建一个秘密文件

[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

六、守护进程服务企业应用

6.1 守护进程多模块功能配置

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

6.2 守护进程的排除功能实践

准备环境:

[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
  1. 将/oldtest目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录不要做备份;

–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 
  1. 将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录1.txt 3.txt文件不要备份

–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

6.3 守护进程来创建备份目录

[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
# 注意:要创建的目录后面一定要跟上/,表示在此目录下
# 客户端无法在服务端创建多级目录
 类似资料: