当前位置:   article > 正文

rsync文件同步_rsync 同步文件

rsync 同步文件

我最近在使用rsync,但是一直在这三者之间徘徊rsync、inotify、sersync。于是记录一下这三者之间的关系。
rsync是把文件进行同步的工具,具有很好的实时性。
inotify是监控某文件,并记录其中有什么文件做了改变,需要写脚本进行调用rsync的命令进行文件同步。
sersync是在inotify的基础上做了包装,可以自动调用rsync。

为此写了三篇笔记,第一篇是rsync,第二篇是rsync+inotify,第三篇是rsync+sersync

rsync的部署与使用

1、服务说明
Rsync 是一款开源,快速,多功能,可实现全量及增量(差异化)的本地或远程数据同步备份工具,适用于 Linux、Windows 等多种操作系统,常用于以下常见:

  • 本地和远程两台主机之间的数据同步,类似 scp,但 scp 每次都是全备,而 rsync 可以增量。
  • 本地主机的不同分区或目录之间全量及增量的复制数据。
  • 实现删除文件和目录的功能,类似 rm。

在同步数据时,rsync 默认通过独特的quick check 算法,它仅同步大小或者最后修改时间发生变化的文件或目录。

当然也可以根据权限,属主等属性的变化同步,但需要指定相应的参数。
甚至可以实现只同步一个文件里有变化的内容部分,所以 rsync 可以实现快速的同步备份数据。

rsync 是一个典型的 C/S 架构,默认监听873端口。

2、特性说明

rsync 具有的特性:

  • 支持拷贝特殊文件如链接文件,设备等。
  • 支持排除指定文件或目录同步。
  • 支持做到保持源文件或目录的权限,时间,软硬链接,属主,组等属性均不改变。
  • 支持实现增量同步,即只同步发生变化的数据。
  • 支持通过其它方式来配合传输文件(rsync 本身不对数据加密)。
  • 支持通过 soket(进程方式)传输文件和数据(服务端和客户端)。
  • 支持匿名的或认证的(无需系统用户)的进程模式传输。

rsync 的缺点:

  • 大量小文件同步的时候,比对时间较长。
  • 同步大文件有时也会出现问题,中断。
  • 未完整同步之前,是隐藏文件,可以通过续传等参数实现传输。
  • 一次性远程拷贝推荐使用 scp。

3、服务安装

准备两台 CentOS 7 的机器,IP 地址为:node-01(192.168.200.101)node-02(192.168.200.102)都安装好 rsync:

# 安装服务
yum -y install rsync

# 添加用户
useradd rsync -s /sbin/nologin -M

# 创建测试数据目录,由于同步真实用户使用的是 rsync 用户,所以需要给目录授权
mkdir /data
chown rsync.rsync /data/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Copy to clipboardErrorCopied在两台机器上都创建 /data目录用于数据测试

4、服务端配置

通过命令可看到配置文件支持的配置和说明:

man rsyncd.conf
  • 1

node-01:服务端配置主配置文件 /etc/rsyncd.conf

# RSYNC Config
# 指定传输文件使用的用户
uid = rsync
# 指定传输文件使用的用户组
gid = rsync
# 安全设置,切换到安全目录
use chroot = no
# 最大连接数
max connections = 10
# 客户端超时时间,单位秒,设置为 0 不超时
timeout = 900
# PID 文件
pid file = /var/run/rsyncd.pid
# 锁文件
lock file = /var/run/rsync.lock
# 日志文件
log file = /var/log/rsyncd.log
# 日志记录方式
transfer logging = yes
# 忽略文件
exclude = lost+found/
# 忽略不可读文件
ignore nonreadable = yes
# 传输时不压缩的文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 现在的版本需要添加,保留文件的完整属性
fake super = yes

# 模块
[data]
    # 对应的目录
    path = /data
    # 传输的删除时忽略 I/O 错误,报错会跳过--delete
    ignore errors
    # 允许写入
    read only = false
    # 不允许列出
    list = false
    # 允许的网段,多个使用空格隔开
    hosts allow = 192.168.200.0/24
    # 拒绝的网段,拒绝所有
    hosts deny = 0.0.0.0/32
    # 连接的虚拟用户,非系统用户
    auth users = rsync_user
    # 虚拟用户的账号密码文件
    secrets file = /etc/rsync-data.password
    # 注释说明
    comment = Test file share
  • 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
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

node-01:创建密码文件 /etc/rsync-data.password

echo "rsync_user:123456" > /etc/rsync-data.password
chmod 600 /etc/rsync-data.password
  • 1
  • 2

node-01:启动服务

rsync --daemon
netstat -tlunp | grep 873
  • 1
  • 2

如图所示:
在这里插入图片描述
5、客户端配置

不管是推送还是拉取文件,都是通过客户端向服务端发起,所以客户端根本不需要配置,只需要有 rsync 命令和服务端的密码即可。
node-02:配置密码文件 /etc/rsync-data.password

echo "123456" > /etc/rsync-data.password
chmod 600 /etc/rsync-data.password
  • 1
  • 2

和服务端不同的是,客户端的文件只需要密码,不需要数据传输虚拟用户名。但是密码文件的权限必须改为600

6、发送测试
发送文件的方向为客户端向服务端发送。
node-02:创建文件测试发送

# 创建文件
echo "Hello World" > demo.txt

# 发送文件
rsync -avz demo.txt rsync_user@'192.168.200.101'::data/hello.txt --password-file=/etc/rsync-data.password
  • 1
  • 2
  • 3
  • 4
  • 5

如图所示:
!
node-01:查看文件
在这里插入图片描述
可以发现文件名称修改了,并且保存的用户是 rsync。

注:有的时候命名传输过去了,但是依然有报错:rsync: chgrp “/.” (in ftp2) failed: Operation not permitted (1)

经排查是由于-a参数导致的,因为-a是归档模式传输,并保持所有文件属性,等价于-rtopgDl(还没有具体深入研究),可以使用下面这个命令替代

7、参数说明

rsync 中常用的参数包含如下一些:

-a:--archive,归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rtopgDl
-v:--verbose,详细模式输出,传输时的进度等信息。
-z:--compress,传输时进行压缩以提高传输效率,--compress-level=NUM 可按级别压缩。
-r:对子目录以递归模式,即目录下的所有目录都同样传输。
-o:保留文件属性。
-p:保留文件权限。
-g:保留文件组权限。
-D:保留设备文件信息。
-l:保留文件软链接。
-P:显示同步的过程及传输时的进度等信息。
-e:使用的信道协议,指定替代 rsh 的 shell 程序,例如:ssh。
--exclude=PATTERN:指定排除不需要传输的文件模式。
--delete:让目标目录 SRC 和源目录数据 DST 一致。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

实际应用中常用的参数:

-avzP:带提示的文件传输。
-az:定时任务不用输出过程。
  • 1
  • 2

8、同步命令

# 推送文件
rsync -avz 本地文件 同步用户@'服务端IP'::模块名/文件名 --password-file=密码文件

# 拉取文件
rsync -avz 同步用户@'服务端IP'::模块名/文件名 本地路径 --password-file=密码文件
  • 1
  • 2
  • 3
  • 4
  • 5

注意,这种写法在 IP 和模块之前需要使用 ::,如果不想改文件名字,推送时候模块名后不加文件名即可。

另外一种写法:

# 推送文件
rsync -avz 本地文件 rsync://同步用户@'服务端IP':模块名/文件名 --password-file=密码文件

# 拉取文件
rsync -avz rsync://同步用户@'服务端IP':模块名/文件名 本地路径 --password-file=密码文件
  • 1
  • 2
  • 3
  • 4
  • 5

此时就不需要使用 ::。

9、完全同步
node-02:创建相关文件目录并同步给 node-01

# 创建相关目录文件测试
cd /data/
mkdir a b c
touch a/a.txt b/b.txt c/c.txt
touch e.txt

# 同步文件
rsync -avz /data/ rsync_user@'192.168.200.101'::data/ --password-file=/etc/rsync-data.password
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此时查了 node-01上面的文件:
在这里插入图片描述
可以发现虽然同步的,但是 node-01 上面的文件和 node-02 上不一致,旧的文件还在。

node-02:通过 --delete参数处理同步:

rsync -avz --delete /data/ rsync_user@'192.168.200.101'::data/ --password-file=/etc/rsync-data.password
  • 1

查看 node-01:
在这里插入图片描述
此时 node-01 和 node-02 才完全保持一致。

10、排除文件

有些时候某些文件不想同步,就可以加入参数 --exclude:
node-02:排除单个文件

# 创建新文件
cd /data/
touch d.txt

# 同步文件,排除指定文件
rsync -avz --delete --exclude="d.txt" /data/ rsync_user@'192.168.200.101'::data/ --password-file=/etc/rsync-data.password
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在 node-01上查看:
在这里插入图片描述
可以发现文件并未同步。

node-01:删除所有文件

rm -rf /data/*
  • 1

node-02:排除多个文件

# 排除多个文件
rsync -avz --delete --exclude={a,b,c} /data/ rsync_user@'192.168.200.101'::data/ --password-file=/etc/rsync-data.password
  • 1
  • 2

在 node-01上面查看:
在这里插入图片描述
11、使用 SSH

除了使用默认的 rsh传输数据,也可以指定其它协议,如 ssh。
node-02:通过 ssh 传输文件

rsync -avz -e "ssh -p 22" /data/ root@192.168.200.101:/data/
  • 1

此时就不需要模块,密码文件这些,类似 scp 的操作,需要手动输入密码,当然服务器可以配置免密登录。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/208970
推荐阅读
相关标签
  

闽ICP备14008679号