rsync

文章目录

    • rsync
    • rsync特性
    • 与scp命令比较
    • 备份源
    • 安装rsync
      • 安装xinetd服务来管理rsync服务
    • 开启rsync 服务
    • 监听端口
    • rsync 命令的基本用法
    • 实战1:
      • 创建用户
      • 设置权限
      • 创建测试数据
      • client111同步数据
    • 实战2:
      • 编写脚本
      • 测试脚本
      • 定期备份

rsync

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

rsync特性

它的特性如下:

  • 可以镜像保存整个目录树和文件系统。

  • 可以很容易做到保持原来文件的权限、时间、软硬链接等等。

  • 无须特殊权限即可安装。

  • 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

  • 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

  • 支持匿名传输,以方便进行网站镜像。

rsync官网:rsysc

与scp命令比较

优点:

  • 支持增量备份。

  • 选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等。

  • 传输前执行压缩。适用亍异地备份 ,镜像服务器等应用 。

  • 使用ssh做为传输端口。 sftp ,ssh

区别:

当文件数据很大时候:

  • scp 无法备份大量数据, 特点: 先统一信息,像windows复制。
  • rsync 边复制,边比较,边统计。

端口: 873
模式:C/S 。 如果直接使用命令rsync,就是点到点传输。

备份源

何为备份源?

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。

安装rsync

[root@server222 ~]# rpm -qf `which rsync`
rsync-3.0.9-18.el7.x86_64
[root@server222 ~]# rpm -ivh /mnt/cdrom/Packages/rsync-3.0.9-18.el7.x86_64.r            pm
警告:/mnt/cdrom/Packages/rsync-3.0.9-18.el7.x86_64.rpm: 头V3 RSA/SHA256 Signatu            re, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
        软件包 rsync-3.0.9-18.el7.x86_64 已经安装

安装xinetd服务来管理rsync服务

[root@server222 cdrom]# rpm -ivh /mnt/cdrom/Packages/xinetd-2.3.15-13.el7.x86_64.rpm
警告:/mnt/cdrom/Packages/xinetd-2.3.15-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:xinetd-2:2.3.15-13.el7           ################################# [100%]

开启rsync 服务

[root@server222 ~]# systemctl restart rsyncd
[root@server222 ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2019-08-22 23:57:10 CST; 2s ago
 Main PID: 14359 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─14359 /usr/bin/rsync --daemon --no-detach

8月 22 23:57:10 server222 systemd[1]: Started fast remote file copy program ...n.
8月 22 23:57:10 server222 systemd[1]: Starting fast remote file copy program.....
8月 22 23:57:11 server222 rsyncd[14359]: rsyncd version 3.0.9 starting, liste...3
Hint: Some lines were ellipsized, use -l to show in full.

监听端口

[root@server222 ~]# netstat -antup | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      14359/rsync
tcp6       0      0 :::873                  :::*                    LISTEN      14359/rsync

rsync 命令的基本用法

格式:rsync 【选项】 源文件 目标文件

常见的选项:

-a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同亍加了参数-rlptgoD
-r,–recursive 对子目彔以递归模式处理
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL 属性信息
-P 显示传输进度
-u, --update 仅仅进行更新,也就是跳过所有已经存在亍目标位置,并且文件时间晚亍要备份的文件。(丌
覆盖更新的文件)
--port=PORT 指定其他的rsync服务端口 873
--delete 删除那些目标位置有而原始位置没有的文件
--password-file=FILE 从FILE 中得到密码
--bwlimit=KBPS 限制I/O 带宽,Kbytes /second
--filter “- 文件名”需要过滤的文件
--exclude= :需要过滤的文件
-v 显示同步过程的详细信息

–delete 删除那些目标位置有而原始位置没有的文件

例如 目彔/web : /back a.txt

实战1:

client111:192.168.176.111

server222:192.168.176.222

备份server222的/mnt 目录到client111 的/root/mnt。
创建用户hary用于下载、读;创建用户natasha 用于上传、写。

创建用户

[root@server222 ~]# useradd hary
[root@server222 ~]# useradd natasha
[root@server222 ~]# echo '123456' | passwd --stdin hary
更改用户 hary 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@server222 ~]# echo '123456' | passwd --stdin natasha
更改用户 natasha 的密码 。
passwd:所有的身份验证令牌已经成功更新。

设置权限

[root@server222 ~]# setfacl -R -m user:hary:r-x /mnt

[root@server222 ~]# setfacl -R -m user:natasha:rwx /mnt

创建测试数据

[root@server222 mnt]# echo "123qwe" > 123qwe
[root@server222 mnt]# ls
123qwe  cdrom
[root@server222 mnt]# cat 123qwe
123qwe

client111同步数据

[root@client111 ~]# mkdir /root/mnt
[root@client111 ~]# cd /root/mnt/
[root@client111 mnt]# pwd
/root/mnt
[root@client111 mnt]# rsync -azP --delete [email protected]:/mnt/ /root/mnt
[email protected]'s password:
..........

sent 74971 bytes  received 4361814808 bytes  10918372.41 bytes/sec
total size is 4515096809  speedup is 1.04
[root@client111 mnt]# ls
123qwe  cdrom
[root@client111 mnt]# cat 123qwe
123qwe

实战2:

使用ssh 密钥实现无交亏备份。做成脚本,将server222上的数据,定期备份到client111上。

[root@client111 mnt]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):#直接回库
Enter passphrase (empty for no passphrase):#直接回库
Enter same passphrase again:#直接回库
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:SsPRWpKt+9+YLYH4IcfSGFsH/rKlKFxb3QzwqC/DdMs root@client111
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|       +o        |
|      +.+=       |
|     ..*+ +      |
|      *XS= +     |
|     .X+X = o    |
|   . +o% B .     |
|    o *.E .=     |
|     . o..+.o    |
+----[SHA256]-----+
[root@client111 mnt]# ssh copy id [email protected]
ssh: Could not resolve hostname copy: Name or service not known
[root@client111 mnt]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:


Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

测试hary登陆server222

[root@client111 mnt]# ssh [email protected]
Last failed login: Sat Aug 24 00:59:25 CST 2019 from 192.168.176.111 on ssh:notty
There were 2 failed login attempts since the last successful login.
[hary@server222 ~]$

编写脚本

[root@client111 mnt]# vim /root/rsync-ssh-get-mnt.sh
[root@client111 mnt]# cat /root/rsync-ssh-get-mnt.sh
#!/bin/bash
rsync -az --delete [email protected]:/mnt/ /root/mnt/

测试脚本

[root@client111 mnt]# chmod +x /root/rsync-ssh-get-mnt.sh
[root@client111 mnt]# rm -rf /root/mnt/*
[root@client111 mnt]# pwd
/root/mnt
[root@client111 mnt]# ls
[root@client111 mnt]#
[root@client111 mnt]# /root/rsync-ssh-get-mnt.sh

定期备份

[root@client111 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@client111 ~]# crontab -l
01 3 * * * /root/rsync-ssh-get-mnt.sh &
# 每天的凌晨3点10分执行脚本

你可能感兴趣的:(Linux)