rsync

1.rsync简介

rysnc是一种备份工具。支持增量备份和差异备份。rsync有三种备份方式,第一种是本地备份类似与cp命令,第二种是远程备份,类似与scp,使用的是ssh传输通道(需要进行ssh身份验证)。第三种是守护进程模式,需要有一台linux主机作为服务器监听端口,其他主要通过服务器的ip和端口进行访问(备份)操作

2.rsync用法

2.1选项

rsync有许多选项:

-n: 在不确定命令是否能按意愿执行时,务必要事先测试;-n可以完成此功能;
-v: –verbose,详细输出模式
-q: –quiet,静默模式
-c: –checksum,开启校验功能,强制对文件传输进行校验
-r: –recursive,递归复制;
-a: –archives,归档,保留文件的原有属性
-p: –perms 保留文件的权限
-t: –times 保留文件的时间戳
-l: –links 保留文件的符号链接
-g: –group 保留文件的属组
-o: –owner 保留文件的属主
-D: –devices 保留设备文件
-H, –hard-links 保留硬链结;
-S, –sparse 对稀疏文件进行特殊处理以节省DST的 空间;
-e ssh: 表示使用ssh协议作承载
-z: 对文件压缩后传输
–progress:显示进度条
–stats: 显示如何执行压缩和传输
–delete:删除那些DST中有而SRC没有的文件,即删除DST中多余的文件

2.2命令格式

1
2
3
4
5
6
7
8
9
10
11
Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

由此语法可知,rsync有三种工作方式:

(1).本地文件系统上实现同步。命令行语法格式为上述”Local”段的格式。

(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述”Access via remote shell”段的格式。

(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述”Access via rsync daemon”段的格式。

前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。

2.3 配置文件

rsync配置文件一般为/etc/rsyncd.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 10
timeout = 600
motd file = /var/rsyncd/rsyncd.moth
pid file = /var/rsyncd/rsync.pid
lock file = /var/run/rsync.lock
log file = /var/rsyncd/rsyncd.log
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[backup]
path = /backup
igonre errors
read only = false
write only = false
list = false
auth users = rsyncd_backup
secrets file = /etc/rsyncd.passwd

rsyncd.conf配置文件常用参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| rsyncd.conf参数 | 参数说明 |
| - | - |
| uid=rsync | rsync使用的用户。 |
| gid=rsync | rsync使用的用户组(用户所在的组) |
| use chroot=no | 如果为true,daemon会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系 |
| max connections=200 | 设置最大连接数,默认0,意思无限制,负值为关闭这个模块 |
| timeout=400 | 默认为0,表示no timeout,建议300-600(5-10分钟) |
| pid file | rsync daemon启动后将其进程pid写入此文件。如果这个文件存在,rsync不会覆盖该文件,而是会终止 |
| lock file | 指定lock文件用来支持“max connections”参数,使得总连接数不会超过限制 |
| log file | 不设或者设置错误,rsync会使用rsyslog输出相关日志信息 |
| ignore errors | 忽略I/O错误 |
| read only=false | 指定客户端是否可以上传文件,默认对所有模块为true |
| list=false | 是否允许客户端可以查看可用模块列表,默认为可以 |
| hosts allow | 指定可以联系的客户端主机名或和ip地址或地址段,默认情况没有此参数,即都可以连接 |
| hosts deny | 指定不可以联系的客户端主机名或ip地址或地址段,默认情况没有此参数,即都可以连接 |
| auth users | 指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问 |
| secrets file | 指定用户名和密码存放的文件,格式;用户名;密码,密码不超过8位 |
| [backup] | 这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护 |
| path | 这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题 |

3.实验

3.1 本地传输

文件同步
rsync -avz /etc/fstab /data/
目录同步
rsync -avz /data /opt
data 后面加/表示将data下的内容同步过去 不加/表示将data目录同步过去

–delete 让目标目录与原目录数据同步

image.png

3.2远程传输

image.png

image.png

备注:需要注意的是,远程传输方式使用的是ssh传输通道,ssh传输通道本身传输数据加密的,是安全的,但也有几个缺点:

1.用户权限问题
2.用户身份暴露(安全隐患)
3.文件路径暴露(安全隐患)

tcp传输过程,每传输一个数据都会有连接的建立,维护,断开过程。所以传输多个文件会比较慢

且两边都需要安装rsync程序。

第一次传输需要进行秘钥确定,且每次登陆需要输入密码,如不想输入密码,可生成秘钥并发送到远程主机。

image.png

image-20211123103427345

使用ssh-keygen生成秘钥,并使用ssh-copy-id 发送至远程主机

此时传输数据便不会提示输入密码(ssh登陆亦是如此)

3.3 守护进程方式

守护进程方式需要一台机器作为server端,启动rsync deamon程序,监听端口,通过ip+socket来进行交互。

1.rpm -ql rsync查看rsync是否有安装(有的rsync把rsync与rsync-deamon分开,需要注意下)

image.png

如果没有的话则需要安装

yum -y install rsync-deamon rsync

2.编辑配置文件

vim /etc/rsyncd.conf
3.创建程序用户
useradd -M -s /sbin/nologin rsync
chown -R rsync.rsync /backup
4.创建目录
mkdir /backup && chown -R rsync.rsync /backup
5.创建虚拟用户认证文件
echo “rsync_backup:1” > /etc/rsync.password
chmod 600 rsync.password
6.启动守护进程
systemctl start rsyncd

使用rsync带上参数–password-file=xxx指定密码文件可以免输入密码

首先 echo 123456 > /etc/rsync_password; chmod 600 /etc/rsync_password

然后 rsync -avz xxx rsyncd_backup@192.168.1.1::bakcup –password-file=/etc/rsync_password

或者设置环境变量:

export RSYNC_PASSWORD =123456

这样不用跟上参数也可以免密码传输


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!