备份工具rsync的功能特性以及参数的使用,报错演示

rsync特点

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

适用于多种操作平台(unix/linux/windows等)

Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制

rsync默认运行端口  873端口

Rsync功能

Rsync具备使本地和远程两台主机之间的数据快速复制,远程备份的功能,Rsync命令本身即可实现异地主机复制数据,功能类似scp又优于scp,scp每次都是全量备份,rsync可以实现增量拷贝(和scp一样都是基于ssh服务传输),Rsync软件还支持配置守护进程,实现异机数据复制。

增量复制是Rsync一特点,优于scp,cp命令

本地数据同步复制,效果如cp
远程数据同步复制,如scp
本地数据删除,如rm
远程数据查看,如ls

后台服务模式,常用,用于实时数据同步,安全性更高

Rsync软件特性

支持拷贝普通文件,特殊文件(link文件,设备文件)
支持排除指定文件、目录的同步功能(同步数据时,指定文件不同步)
能够保持原有文件所有属性均不变(stat查看的状态)
实现增量复制(只复制变化的数据,数据传输效率极高)
可以配合ssh、rcp、rsh等方式进行隧道加密文件传输(rsync本身不加密数据)
可以通过socket(进行通信文件)传输文件和数据(c/s架构)
支持匿名用户模式传输+

rsync备份架构

rsync常用语法

命令语法,分几个模式

- 本地模式
rsync 参数   源路径  目标路径

- 远程模式,推送方式,把自己的数据推送到另一台机器上(上传)
语法1
rsync 参数  源路径  user@ip:目标路径
语法2
rsync 参数 源路径  user@ip::目标路径

- 远程模式,拉取方式,拉取别人机器的数据到自己的机器上(下载)
rsync  参数   user@ip:源路径   目标路径
rsync  参数   user@ip::源路径目标路径

参数解释
    -v        详细模式输出
    -a        归档模式,递归的方式传输文件,并保持文件的属性,等同于 -rlptgoD
    -r        递归拷贝目录
    -l        保留软链接
    -p        保留原有权限
    -t         保留原有时间(修改)
    -g        保留属组权限
    -o         保留属主权限
    -D        等于--devices  --specials    表示支持b,c,s,p类型的文件
    -R        保留相对路径
    -H        保留硬链接
    -A        保留ACL策略
    -e         指定要执行的远程shell命令
    -E         保留可执行权限
    -X         保留扩展属性信息  a属性
    
比较常用的组合参数
 rsync -avzP
-a  保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息

本地模式

对机器本身数据的上传下载

1、下载rsync服务
[root@rsync-41 ~]#yum install rsync -y
2、创建文件,练习拷贝
[root@rsync-41 ~]#mkdir /opt/666
[root@rsync-41 ~]#touch /opt/666/2022.png

拷贝文件
[root@rsync-41 ~]#rsync -avzP  /opt/666/2022.png   /root
sending incremental file list
2022.png

sent 86 bytes  received 35 bytes  242.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-41 ~]#ls
2022.png  anaconda-ks.cfg

生成一个3G文件,再拷贝大文件时,会特别的占用磁盘IO,占用网络宽带,造成其他程序手影响

[root@rsync-41 ~]#dd bs=100M count=30 if=/dev/zero  of=/root/2000.png
限速50M每秒  参数 --bwlimit
[root@rsync-41 ~]#rsync -avzP --bwlimit=50  /root/2000.png    /opt/666/
sending incremental file list
2000.png
  3,145,728,000 100%   50.94MB/s    0:00:58 (xfr#1, to-chk=0/1)

sent 3,059,278 bytes  received 35 bytes  50,567.16 bytes/sec
total size is 3,145,728,000  speedup is 1,028.25
[root@rsync-41 ~]#ls /opt/666/
2000.png  2022.png
对目录的拷贝

1、拷贝目录本身
[root@rsync-41 ~]#ls
1.log  2.log  3.log  anaconda-ks.cfg
[root@rsync-41 ~]#rsync -avzP   /root   /420/
[root@rsync-41 ~]#ls /420/
root
[root@rsync-41 ~]#ls /420/root/
1.log  2.log  3.log  anaconda-ks.cfg

2、不拷贝目录本身
[root@rsync-41 ~]#ls
1.log  2.log  3.log  anaconda-ks.cfg
[root@rsync-41 ~]#rsync -avzP   /root/   /420/
[root@rsync-41 ~]#ls -a /420/
.   1.log  3.log            .bash_history  .bash_profile  .cshrc  .tcshrc
..  2.log  anaconda-ks.cfg  .bash_logout   .bashrc        .ssh    .viminfo

3、增量拷贝,只拷贝 更新内容
[root@rsync-41 ~]#ls /420
1.log  2.log  3.log
[root@rsync-41 ~]#ls /421
1.log  2.log  3.log
[root@rsync-41 ~]#touch /420/333.png
[root@rsync-41 ~]#echo '123456' > /420/1.log 
[root@rsync-41 ~]#rsync -avzP   /420/   /421/
sending incremental file list
./
1.log
              7 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/14)
333.png
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=2/14)

sent 399 bytes  received 58 bytes  914.00 bytes/sec
total size is 5,026  speedup is 11.00

4、无差异拷贝  命令--delete 将目标目录数据清空,与源数据一致,是有一点危险的

[root@rsync-41 ~]#ls /420
1.log  2.log  333.png  3.log
[root@rsync-41 ~]#ls /421
1.log  2.log  333.png  3.log
[root@rsync-41 ~]#touch /421/{7..9}.txt
[root@rsync-41 ~]#rm -rf /421/333.png 
[root@rsync-41 ~]#ls /421
1.log  2.log  3.log  7.txt  8.txt  9.txt
[root@rsync-41 ~]#rsync -avzP --delete  /420/   /421/
sending incremental file list
deleting 9.txt
deleting 8.txt
deleting 7.txt
./
333.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=2/14)

sent 352 bytes  received 66 bytes  836.00 bytes/sec
total size is 5,026  speedup is 12.02
[root@rsync-41 ~]#ls /421
1.log  2.log  333.png  3.log

远程模式

1、准备两台机器,都下载rsync服务
[root@rsync-41 ~]#yum install rsync -y
[root@rsync-31 ~]#yum install rsync -y

2、传输目录加目录本身
[root@rsync-41 ~]#ls /420
1.log  2.log  333.png  3.log
[root@rsync-41 ~]#rsync -avzP   /420  root@nfs-31:/root
root@nfs-31's password: 
sending incremental file list
420/
420/.bash_history

[root@nfs-31 ~]#ls
420  anaconda-ks.cfg
[root@nfs-31 ~]#ls ./420/
1.log  2.log  333.png  3.log


3、不传输目录本身,传输目录下的数据
[root@rsync-41 ~]#ls /420
1.log  2.log  333.png  3.log
[root@rsync-41 ~]#rsync -avzP   /420/  root@nfs-31:/root
root@nfs-31's password: 
sending incremental file list
[root@nfs-31 ~]#ls
420  anaconda-ks.cfg
[root@nfs-31 ~]#ls
1.log  2.log  333.png  3.log  420  anaconda-ks.cfg

4、下载
[root@nfs-31 ~]#ls
1.png  2.png  3.png  anaconda-ks.cfg

[root@rsync-41 ~]#rsync -avzP     root@nfs-31:/root/ /root
root@nfs-31's password: 
receiving incremental file list
./
1.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/14)
2.png
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/14)
3.png
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/14)

sent 85 bytes  received 425 bytes  204.00 bytes/sec
total size is 6,419  speedup is 12.59
[root@rsync-41 ~]#ls
1.png  2.png  3.png  anaconda-ks.cfg

rsync服务模式(服务端)

守护进程
rsync默认借助ssh协议进行数据同步
1.采用系统默认用户,如root,不安全,可能对系统造成危害,root密码泄露
2.使用普通用户的话,又导致权限不足
3.因此配置守护进程模式,rsync提供了配置文件,有各种功能

守护进程传输模式是在客户端和服务端之间进行的数据复制。
服务端需要配置守护进程,在客户端执行命令,实现数据拉取和推送。

rsync守护进程模式

1.通过配置文件设置rsync功能
2.rsync命令变了,通过模块名同步指定的文件夹,而不是一个指定的文件夹路径。
修改rsync配置文件(rsync服务端)
uid = www                     # 运行进程的用户
gid = www                     # 运行进程的用户组
port = 873                     # 监听端口
fake super = yes              # 无需让 rsync 以 root 身份运行,允许接收文件的完整属性
use chroot = no               # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200         # 最大连接数
timeout = 600                 # 超时时间
ignore errors                 # 忽略错误信息
read only = false             # 对备份数据可读写
list = false                  # 不允许查看模块信息
auth users = rsync_user          # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd   # 定义 rsync 服务用户连接认证密码文件路径

[backup]                     # 定义模块信息
comment = 注释信息             # 模块注释信息
path = /backup                 # 定义接收备份数据目录

[data]
path = /data
EOF

创建用户、数据目录
创建用户
[root@rsync-41 ~]#useradd -u 1000 -M -s /sbin/nologin www
[root@rsync-41 ~]#id www
uid=1000(www) gid=1000(www) groups=1000(www)

创建数据目录
[root@rsync-41 ~]#mkdir /data
[root@rsync-41 ~]#mkdir /backup

修改属主属组
[root@rsync-41 ~]#chown -R www:www /data/
[root@rsync-41 ~]#chown -R www:www /backup/
[root@rsync-41 ~]#ll -d /data/
drwxr-xr-x 2 www www 6 Apr 20 16:50 /data/
[root@rsync-41 ~]#ll -d /backup/
drwxr-xr-x 2 www www 6 Apr 20 16:51 /backup/

创建虚拟用户密码文件与授权
创建虚拟用户密码
[root@rsync-41 ~]#echo 'rsync_user:111111' > /etc/rsync.passwd
[root@rsync-41 ~]#cat  /etc/rsync.passwd
rsync_user:111111

给密码文件授权
[root@rsync-41 ~]#chmod 600 /etc/rsync.passwd 
[root@rsync-41 ~]#ll /etc/rsync.passwd 
-rw------- 1 root root 18 Apr 20 16:55 /etc/rsync.passwd

开机启动,运行rsyncd服务
[root@rsync-41 ~]#systemctl start rsyncd
[root@rsync-41 ~]#systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@rsync-41 ~]#systemctl status 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 Wed 2022-04-20 16:58:21 CST; 1min 0s ago
 Main PID: 14926 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─14926 /usr/bin/rsync --daemon --no-detach

Apr 20 16:58:21 rsync-41 systemd[1]: Started fast remote file copy progra....
Apr 20 16:58:21 rsync-41 systemd[1]: Starting fast remote file copy progr....
Apr 20 16:58:21 rsync-41 rsyncd[14926]: params.c:Parameter() - Ignoring b...s
Apr 20 16:58:21 rsync-41 rsyncd[14926]: rsyncd version 3.1.2 starting, li...3
Hint: Some lines were ellipsized, use -l to show in full.

检查端口、进程
[root@rsync-41 ~]#netstat -tunlp|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      14926/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      14926/rsync         
[root@rsync-41 ~]#ps -ef |grep rsync
root      14926      1  0 16:58 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      14960  14013  0 17:00 pts/1    00:00:00 grep --color=auto rsync
[root@rsync-41 ~]#

rsync服务模式(客户端)

密码验证的三种方式
1、交互式,需要手动输入密码
rsync -avzP   /tmp/200M.log  rsync_user@rsync-41::backup

2、生成密码文件 /etc/rsync.mima,参数--password

echo '111111'  > /etc/rsync.mima
rsync -avzP  --password-file=/etc/rsync.mima   /tmp/200M.log  rsync_backup@rsync-41::data
如果是脚本,可以去掉vP显示过程的参数
rsync -az  --password-file=/etc/my_rsync.pwd   /tmp/200M.log  rsync_backup@rsync-41::data

3、生成密码变量,让当前系统中存在叫做 RSYNC_PASSWORD 这个变量,以及变量的值,是配置文件中的密码即可
export RSYNC_PASSWORD='111111'
rsync -avzP    /tmp/200M.log  rsync_backup@rsync-41::backup
交叉式
上传数据到backup模块
[root@rsync-41 ~]#ls /backup/
[root@rsync-41 ~]#

[root@nfs-31 ~]#rsync -avzP   /root/啦啦啦.log   rsync_user@rsync-41::backup
Password: 
sending incremental file list
啦啦啦.log
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 96 bytes  received 43 bytes  30.89 bytes/sec
total size is 0  speedup is 0.00

[root@rsync-41 ~]#ls /backup/
啦啦啦.log

下载data模块数据
[root@rsync-41 ~]#ls /data/
对对对.png

[root@nfs-31 ~]#rsync -avzP    rsync_user@rsync-41::data  /root
Password: 
receiving incremental file list
./
对对对.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/2)

sent 50 bytes  received 135 bytes  41.11 bytes/sec
total size is 0  speedup is 0.00
[root@nfs-31 ~]#ls
anaconda-ks.cfg  啦啦啦.log  对对对.png
[root@nfs-31 ~]#

生成密码文件
1、生成密码文件
[root@nfs-31 ~]#echo '111111'  > /etc/rsync.mima
[root@nfs-31 ~]#cat /etc/rsync.mima
111111

2、降低密码文件的权限,必须是600

3、上传数据到backup模块
[root@rsync-41 ~]#ls /backup/
啦啦啦.log

[root@nfs-31 ~]#rsync -avzP  --password-file=/etc/rsync.mima   /root/对对对.png   rsync_user@rsync-41::backup
sending incremental file list
对对对.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 96 bytes  received 43 bytes  278.00 bytes/sec
total size is 0  speedup is 0.00

[root@rsync-41 ~]#ls /backup/
啦啦啦.log  对对对.png

4、下载data模块的数据
[root@rsync-41 ~]#touch /data/那个女孩.mp5
[root@rsync-41 ~]#ls /data/
对对对.png  那个女孩.mp5

[root@nfs-31 ~]#rsync -avzP  --password-file=/etc/rsync.mima    rsync_user@rsync-41::data  /root
receiving incremental file list
./
那个女孩.mp5
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/3)

sent 50 bytes  received 170 bytes  440.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs-31 ~]#ls
anaconda-ks.cfg  啦啦啦.log  对对对.png  那个女孩.mp5

生成密码变量
1、设置环境变量
[root@nfs-31 ~]#export RSYNC_PASSWORD=111111

2、上传数据到backup模块
[root@rsync-41 ~]#ls /backup/
啦啦啦.log  对对对.png

[root@nfs-31 ~]#rsync -avzP    /root/偶像剧.mv   rsync_user@rsync-41::backup
sending incremental file list
偶像剧.mv
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 94 bytes  received 43 bytes  274.00 bytes/sec
total size is 0  speedup is 0.00

[root@rsync-41 ~]#ls /backup/
偶像剧.mv  啦啦啦.log  对对对.png

3、下载data模块数据
[root@rsync-41 ~]#ls /data/
对对对.png  那个女孩.mp5  鬼迷心窍.txt


[root@nfs-31 ~]#ls
anaconda-ks.cfg


[root@nfs-31 ~]#rsync -avzP    rsync_user@rsync-41::data /root
receiving incremental file list
./
对对对.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=2/4)
那个女孩.mp5
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=1/4)
鬼迷心窍.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=0/4)

sent 88 bytes  received 271 bytes  718.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs-31 ~]#ls
anaconda-ks.cfg  对对对.png  那个女孩.mp5  鬼迷心窍.txt

配置文件里指定的www用户
当rsyncd运行后,工作进程会以www用户去执行,降低权限
以及接收到的数据,都会被强转为www用户
如上面上传到backup模块的文件,属主属组都是www,而从data模块下载了的都是该操作用户的属主属组


[root@rsync-41 ~]#ll /backup/
total 0
-rw-r--r-- 1 www www 0 Apr 20 17:53 偶像剧.mv
-rw-r--r-- 1 www www 0 Apr 20 17:10 啦啦啦.log
-rw-r--r-- 1 www www 0 Apr 20 17:14 对对对.png


[root@rsync-41 ~]#ll /data
total 0
-rw-r--r-- 1 root root 0 Apr 20 17:14 对对对.png
-rw-r--r-- 1 root root 0 Apr 20 17:28 那个女孩.mp5
-rw-r--r-- 1 root root 0 Apr 20 17:55 鬼迷心窍.txt
[root@nfs-31 ~]#ll
total 4
-rw-------. 1 root root 1400 Apr 18 17:50 anaconda-ks.cfg
-rw-r--r--  1 root root    0 Apr 20 17:14 对对对.png
-rw-r--r--  1 root root    0 Apr 20 17:28 那个女孩.mp5
-rw-r--r--  1 root root    0 Apr 20 17:55 鬼迷心窍.txt

报错演示

password file must not be other-accessible
[root@nfs-31 ~]#rsync -avzP  --password-file=/etc/rsync.mima   /root/对对对.png   rsync_user@rsync-41::backup
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]


错误提示,密码文件不得以其他方式访问
要降低客户端密码文件权限为600
chmod 600 /etc/rsync.mima
No route to host
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]


无法连接到 172.16.1.41:没有到主机的路由 (113),判断是防火墙的缘故
1.关闭iptables,或者添加规则
iptables -F
systemctl stop firewalld

2.关闭selinux
[root@nfs01 ~]# setenforce 0  #临时关闭
[root@rsync01 ~]# sed -i 's/enforcing/disabled/g' /etc/selinux/config  #重启永久关闭
ERROR: The remote path must start with a module name not a /
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

原因:客户端命令敲错了(英文意思远程路径必须以模块名称开头,而不是/模块名)
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
@ERROR: auth failed on module backup
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

错误中文意思(模块备份时身份验证失败)
1.密码文件错误/etc/rsync.password
2.密码文件参数和实际的密码文件名不一致,检查secrets file = /etc/rsync.password
3.密码文件权限不对 ll /etc/rsync.password  不是600
4.检查免密文件,是否手误
[root@rsync01 ~]# cat /etc/rsync.password
rsync_backup:chaoge
5.rsync客户端的密码文件写错,只需要写入密码即可
[root@nfs01 ~]# cat /etc/rsync.password
chaoge
@ERROR: Unknown module 'backup'
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

错误中文意思(未知模块“备份”)
1、 /etc/rsyncd.conf配置文件模块名称书写错误

2、配置文件中网段限制不对
Permission denied
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)
sent 196 bytes  received 27 bytes  63.71 bytes/sec
total size is 349  speedup is 1.57
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

中文意思(权限被拒绝)
1. 共享目录的属主和属组不正确,不是rsync
2. 共享目录的权限不正确,不是755
3.注意防火墙,selinux的关闭
chdir failed
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

中文意思(失败)
1. 备份存储目录没有建立
2. 建立的备份存储目录和配置文件定义不一致
invalid uid rsync
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

中文意思(无效的uid用户)
rsync服务对应rsync虚拟用户不存在了
Connection refused (111)
[root@yuchao-muban ~]#  rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

中文意思(连接被拒绝)
1.检查防火墙,selinux的关闭
2.检查rsync服务端rsyncd是否开启

Rsync服务端排错思路

1、检查rsync服务端的配置文件路径是否正确:/etc/rsyncd.conf
2、查看配置文件的host allow,host deny允许的ip网段是否允许客户端访问
3、查看配置文件中的path参数路径是否存在,权限是否正确(和配置文件的UUID参数对应)
4、查看rsync服务是否启动,端口、进程是否存活
5、查看iptables防火墙、selinux是否允许rsync服务通过,或是关闭
6、查看服务端rsync配置文件的密码文件,权限是否600,格式,语法是否正确,且和配置文件的secrect files参数对应
7、如果是推送数据,要查看配置rsyncd.conf中的用户对该rsync模块下的文件是否可以读取

Rsync客户端排错

1、查看rsync客户端配置的密码文件权限是否600,密码文件格式是否正确,是否和服务端的密码一致
2、尝试telnet连接rsync服务端的873端口,检测服务是否可以连接
3、客户端执行命令语法要检查,细心
posted @ 2022-07-06 20:12  张开嘴  阅读(274)  评论(0编辑  收藏  举报