rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
它的特性如下:
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜像。
rsync官网:rsysc
优点:
支持增量备份。
选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等。
传输前执行压缩。适用亍异地备份 ,镜像服务器等应用 。
使用ssh做为传输端口。 sftp ,ssh
区别:
当文件数据很大时候:
端口: 873
模式:C/S 。 如果直接使用命令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 已经安装
[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%]
[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
【选项】 源文件 目标文件
常见的选项:
-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
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
[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
使用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分执行脚本