[toc]

Rsync功能描述

是一款开源,多功能,全量或者增量本地,远程数据同步,适用于linux,unix ,windows,macOS

官网:https://rsync.samba.org/

全量备份

将所有的数都进行一次备份

img

增量备份

基于全量备份来说,只给新增的数据进行备份

img

常用端口

1
2
3
4
5
6
7
8
9
# rsync端口是873

# 其他常见端口
ssh 22
telnet 23
http 80
ftp 21
https 443
rdp 3389

配置Rsync

环境准备

外网 内网 主机 角色
10.0.0.31 172.16.1.31 nfs rsync客户端
10.0.0.41 172.16.1.41 backup rsync服务端
1
2
3
4
5
6
# rsync服务类型
C/S类型

# 详细说明
C=client # 客户端
S=service # 服务端

rsync选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 常用选项
rsync -avz

# 选项
-a 归档模式传输 = -rtopglD
-----------------------------------
-r 递归
-t 保持文件时间属性
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-l 保留软链接
-D 保持设备文件信息
-----------------------------------
-v 详细模式输出,打印速度,文件数量
-z 过程中进行打包压缩,速度快

本地工作模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 本地拷贝数据命令

# 语法格式
Local: rsync [OPTION...] SRC... [DEST]
本地:rsync 选项 本地源文件 下载至本机路径

# 语法格式详解
Local: rsync [OPTION...] SRC... [DEST]
rsync # 备份命令(cp)
[options] # 选项(-avz)
SRC... # 本地源文件
[DEST] # 下载至本机路径

# 示例:
## 将backup_etc.sh文件推送到opt下
[root@backup ~]# rsync -avz backup_etc.sh /opt/

远程工作模式

Pull拉取数据命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 语法格式
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
拉取:rsync 选项 用户名@主机:目标源文件 下载至本机路径

# 语法格式详解
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Pull # 拉取, 下载
rsync # 备份命令
[options] # 选项(-avz)
[USER@] # 目标主机的系统用户
HOST # 目主机IP地址或域名
SRC... # 目标主机源文件
[DEST] # 下载至本地哪个位置

# 示例
## 拉取远程文件
rsync -avz root@172.16.1.41:/etc/hostname ./

## 拉取远程目录下的所有文件
rsync -avz root@172.16.1.41:/root/ /backup/

## 拉取远程目录以及目录下的所有文件
rsync -avz root@172.16.1.41:/root /backup/

Push推送数据命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 语法格式
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
推送:rsync 选项 本地源文件 用户名@主机:文件目标位置

# 语法格式详解
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Push # 推送, 上传
rsync # 备份命令
[options] # 选项
SRC... # 本地源文件
[USER@] # 目标主机的系统用户
HOST # 目主机IP地址或域名
[DEST] # 目标对应位置

# 示例
rsync -avz /backup/2018-10-01 root@172.16.1.41:/tmp/

守护进程

Pull拉取数据命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 语法格式
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
拉取:rsync 选项 远程用户(虚拟用户)@远程主机:远程主机模块 下载至本机路径

# 语法格式详解
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Pull # 拉取, 下载
rsync # 命令
[OPTION...] # 选项
[USER@] # 远程用户(虚拟用户)
HOST:: # 远程主机
SRC... # 远程主机模块
[DEST] # 下载至本机路径

# 示例
## 拉取rsync备份服务的"backup模块"数据至本地/mnt目录
rsync -avz rsync_backup@192.172.16.1.41::backup/ /mnt/ --passwordfile=/etc/rsync.password

Push推送数据命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 语法格式
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
推送: raync 选项 远程主机模块 远程用户(虚拟用户)@远程主机::上传至远程模块路径

# 语法格式详解
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
Push # 推送, 上传
rsync # 命令
[OPTION...] # 选项
SRC... # 远程主机模块
[USER@] # 远程用户(虚拟用户)
HOST:: # 远程主机
[DEST] # 上传至远程模块路径

# 示例
## 将本地/mnt目录推送至rsync备份服务器的backup模块
[root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup/ --passwordfile=/
etc/rsync.password

rsync服务配置

服务端配置

  1. 安装rsync

    1
    2
    # 安装rsync
    yum install -y rsync
  2. 编辑rsync配置文件

    1
    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
    # 编辑rsync配置文件
    vim /etc/rsyncd.conf

    ## 添加配置信息
    uid = rsync
    gid = rsync
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = welcome to oldboyedu backup!
    path = /backup

    # 配置详解
    uid = rsync # 服务启动的用户
    gid = rsync # 服务启动的用户组
    port = 873 # 监听端口 0~65535
    fake super = yes # 无需让rsync以root身份运行,允许接收文件的完整属性
    use chroot = no # 禁锢推送的数据至某个目录, 不允许跳出该目录
    max connections = 200 # 最大连接数
    timeout = 600 # 超时时间
    ignore errors # 忽略错误信息
    read only = false # 对备份数据可读写
    list = false # 不允许查看模块信息
    auth users = rsync_backup # 定义虚拟用户,作为连接认证用户
    secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径
    [backup] # 定义模块信息
    comment = commit # 模块注释信息
    path = /backup # 定义接收备份数据目录
  3. 创建rsync用户

    1
    2
    3
    # 创建rsync用户
    ## -s不登录此用户 -M不创建家目录
    useradd rsync -s /sbin/nologin -M
  4. 创建密码

    1
    2
    3
    4
    5
    6
    # 创建密码
    ## 免交互创建rsync_backup的密码为:123
    echo 'rsync_backup:123' > /etc/rsync.passwd

    # 检查密码是否创建成功
    cat /etc/rsync.passwd backup:123
  5. 更改密码文件权限

    1
    2
    3
    # 更改密码文件权限
    ## rsync要求密码文件的权限必须是600
    chmod 600 /etc/rsync.passwd
  6. 创建备份目录

    1
    2
    3
    # 创建备份目录
    ## 服务端备份模块文件存放路径
    mkdir /backup
  7. 修改模块路径属主和属组

    1
    2
    3
    4
    5
    6
    # 修改backup的属主和属组
    chown rsync:rsync /backup/

    # 检查属主和属组是否修改成功
    ll -d /backup/
    drwxr-xr-x 2 rsync rsync 6 Nov 29 11:52 /backup/
  8. 开启服务并加入开机自启

    1
    2
    3
    4
    5
    6
    7
    # 开启服务并加入开机自启
    ## 开启rsyncd服务
    systemctl start rsyncd
    ## 将rsyncd加入开机自启
    systemctl enable rsyncd
    Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to
    /usr/lib/systemd/system/rsyncd.service.
  9. 检查是否运行

    1
    2
    3
    # 检查rsyncd服务是否启动
    ps -ef | grep [r]sync
    root 17891 1 0 11:54 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
  10. 检查端口

    1
    2
    3
    4
    5
    6
    7
    # 检查端口
    ## 检查rsync服务的873端口是否开启
    netstat -lntup | grep 873
    tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
    17891/rsync
    tcp6 0 0 :::873 :::* LISTEN
    17891/rsync

客户端配置

  1. 安装服务

    1
    2
    # 安装服务
    yum install -y rsync
  2. 设置密码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 设置密码
    echo '123' > /etc/rsync.pass
    20 ✗ 12:09:08 root@nfs,172.16.1.31:~ # rsync -avz /etc rsync_backup@10.0.0.41::backup
    Password:

    ## 错误提示
    @ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1656)
    [sender=3.1.2]
    1.密码文件权限不是600
    2.密码文件里的免密和手动输入的不一致
    3.密码文件里的名字和配置文件中名字不一致