rsync 使用介绍

本贴最后更新于 1393 天前,其中的信息可能已经渤澥桑田

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 命令格式

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:

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 配置文件常用参数说明

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.png

使用 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

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...