rsync

关于作者

周李杰,最后一批90后,现居湖北武汉

孤独患者,懒癌中期,无脑幻想者。但却人畜无害,无需远离。

兴趣众多,然无一精通。正努力成为一个有趣的人。

1
2
> print("👆以上是不完整的我") //请我吃大餐将会了解更多
>

[TOC]

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

1
2
3
4
5
6
[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服务

1
2
3
4
5
[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 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
[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.

监听端口

1
2
3
[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 【选项】 源文件 目标文件

常见的选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-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 用于上传、写。

创建用户

1
2
3
4
5
6
7
8
[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:所有的身份验证令牌已经成功更新。

设置权限

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

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

创建测试数据

1
2
3
4
5
[root@server222 mnt]# echo "123qwe" > 123qwe
[root@server222 mnt]# ls
123qwe cdrom
[root@server222 mnt]# cat 123qwe
123qwe

client111同步数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@client111 ~]# mkdir /root/mnt
[root@client111 ~]# cd /root/mnt/
[root@client111 mnt]# pwd
/root/mnt
[root@client111 mnt]# rsync -azP --delete natasha@192.168.176.222:/mnt/ /root/mnt
natasha@192.168.176.222'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上。

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
[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 hary@192.168.176.222
ssh: Could not resolve hostname copy: Name or service not known
[root@client111 mnt]# ssh-copy-id hary@192.168.176.222
/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
hary@192.168.176.222's password:


Number of key(s) added: 1

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

测试hary登陆server222

1
2
3
4
[root@client111 mnt]# ssh hary@192.168.176.222
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 ~]$

编写脚本

1
2
3
4
[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 hary@192.168.176.222:/mnt/ /root/mnt/

测试脚本

1
2
3
4
5
6
7
[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

定期备份

1
2
3
4
5
6
[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分执行脚本
打赏
  • © 2019-2020 Li Jie
  • Powered by Hexo Theme Ayer
    • PV:
    • UV:

喜欢就打赏吧~

支付宝
微信