在日常的工作中,作为一名运维从业者,常常会遇到服务器之间的文件转移和同步,那Rsync是centos比较常用的工具,那今天就带大家简单的了解一下Rsync的具体用法
https://www.hao0564.com/1676.html Rsync两台TrueNas之间的同步
一、Rsync服务简介
- 什么是Rsync
它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。可以保持原来文件的权限、时间、软硬链接等附加信息。
- Rsync的特性
(1)可以镜像保存整个目录树和文件系统;
(2)容易做到保存原有的权限,owner、group、时间(修改时间 modify time)、软硬链接等;
(3)传输效率高,使用同步算法,只比较变化的部分;
(4)支持匿名传输,方便网站镜像管理。
二、Rsync配置使用
1,安装rsync软件
# yum -y install rsync --安装rsync
# dnf install rsync --centos8
连接主机...
连接主机成功
Last login: Tue Feb 8 23:42:27 2022 from 192.168.3.100
[root@localhost ~]# yum install rsync
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* epel: mirrors.ustc.edu.cn
* extras: mirrors.bfsu.edu.cn
* updates: ftp.sjtu.edu.cn
软件包 rsync-3.1.2-10.el7.x86_64 已安装并且是最新版本
无须任何处理
查看是否已安装rsync程序包
[root@localhost ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
[root@localhost ~]#
- 配置文件
rsync的主要有以下三个配置文件,后面两个文件默认不存在,请手动创建它。
(1)rsyncd.conf(主配置文件)
(2)rsyncd.secrets(密码文件)
(3)rsyncd.motd(rsync服务器信息)
3,Rsync选项
-v # verbose 详细模式输出
-q # quiet 精简输出模式。
-c # checksum 打开校验开关,强制对文件传输进行校验
-a # archive 归档模式,以递归的方式传输文件,并保持所有文件属性,(-a = -rlptgoD)
-r # recursive 对子目录以递归模式处理
-R # relative 保留相对路径信息
-b # backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不>同的备份文件前缀
--backup-dir # 将备份文件(如~filename)存放在在目录下
-suffix=SUFFIX # 定义备份文件前缀
-u # update 仅进行更新,也就是跳过所有已经存在于DST(目标主机),并且文件时间晚于要备份的文件,不覆盖更新的文件
-l # links 保留软链接
-L # copy-links 想对待常规文件一样处理软链接
--copy-unsafe-links # 仅仅拷贝指向SRC(源主机)路径目录树以外的链结
--safe-links # 忽略指向SRC(源主机)路径目录树以外的链结
-H # hard-links 保留硬链结
-p # perms 保留文件权限
-t # times 保持文件时间信息
-g # group 保持文件属组信息
-o # owner 保持文件属主信息
-D # devices 保持设备文件信息,表示支持b,c,s,p类型的文件
-A # 保留acl(访问控制权限)权限
-S # sparse 对稀疏文件进行特殊处理以节省DST(目标主机)的空间
-n # dry-run 现实哪些文件将被传输。
-w # whole-file 拷贝文件,不进行增量检测
-x # one-file-system 不要跨越文件系统边界
-B # block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e # rsh=command 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH # 指定远程服务器上的rsync命令所在路径信息
-C # cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing # 仅仅更新那些已经存在于DST(目标主机)的文件,而不备份那些新创建的文件
--delete # 删除那些DST(目标主机)中SRC(源主机)没有的文件
--delete-excluded # 同样删除接收端那些被该选项指定排除的文件
--delete-after # 传输结束以后再删除
--ignore-errors # 及时出现IO错误也进行删除
--max-delete=NUM # 最多删除NUM个文件
--partial # 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force # 强制删除目录,即使不为空
--numeric-ids # 不将数字的用户和组id匹配为用户名和组名
--timeout=time ip # 超时时间,单位为秒
-I # ignore-times 不跳过那些有同样的时间和长度的文件
--size-only # 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM # 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T # temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR # 同样比较DIR中的文件来决定是否需要备份
-P # 等同于 --partial
--progress # 显示备份过程
-z # compress 对备份的文件在传输时进行压缩处理
--exclude # 指定不传输的文件
--exclude=PATTERN # 指定排除不需要传输的文件模式
--include=PATTERN # 指定不排除而需要传输的文件模式
--exclude-from=FILE # 排除FILE中指定模式的文件
--include-from=FILE # 不排除FILE指定模式匹配的文件
--version # 打印版本信息
--address # 绑定到特定的地址
--config=FILE # 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT # 指定其他的rsync服务端口
--blocking-io # 对远程shell使用阻塞IO
-stats # 给出某些文件的传输状态
--progress # 在传输时现实传输过程
--log-format=formAT # 指定日志文件格式
--password-file=FILE # 从FILE中得到密码
--bwlimit=KBPS # 限制I/O带宽,KBytes per second
-h # help 显示帮助信息
4,Rsync的普通用法
# rsync -av /test/ /backup --本机上的同步,把/test目录下的内容同步到/backup目录下(包括隐藏文件)
# rsync -av /test/ 192.168.1.20:/backup --把本地的/test目录内容,同步到远端191.168.1.10的/backup目录下
# rsync -av 192.168.1.20:/backup/ /backup/ --把远端192.168.1.20的/backup目录下的内容同步到本地的/backup目录
(注意:路径写法的区别!原目录后面加不加/也影响你的同步目录;没加/,就是将目录本身同步过去;目录加/,就是将目录里的内容同步过去!)
# rsync -av /home --exclude=abc /backup --将/home目录下除了abc其他内容都同步到/backup目录下
# rsync -a --delete /backup/ /test/ --如果同步后,源主机中有文件删除了,这时要想目标主机与源主机的内容保持一致,可以使用--delete参数进行同步
# rsync -av test@192.168.3.113::mydata /root/桌面/test/
把服务端mydata目录同步到本地(拉到)/root/桌面/test/
# rsync -av /tmp/ test@192.168.3.113::mydata
把本地目录/tmp/推到192.168.3.113的模组mydata里
# rsync -av /tmp/a /tmp/b
Rsync基本格式:rsync[-参数] [源文件地址][目标文件地址]
使用一下命令查看文件夹细节rsync[目录路径]
rsync 192.168.3.113::
*************************************************************************
远程拉到本地
rsync -avz myuser@192.168.101.28::模块名 DEST --password-file=/etc/rsyncd.passwd
本地推到远程
rsync -avz SRC myuser@192.168.101.28::模块名 --password-file=/etc/rsyncd.passwd
使用rsync协议
rsync -avz SRC rsync://myuser@192.168.101.28/模块名 --password-file=/etc/rsyncd.passwd
*******************************SSH***************************************
# rsync -av root@103.99.178.177:/www/wwwroot/www.so0564.com/WorkGroup/ /www/wwwroot/192.168.3.10/WorkGroup/
从远端服务器同步到本地
# rsync -av /root/桌面/ root@103.99.178.177:/tmp/zxb
把本地同步到远程服务器/tmp/zxb
#
rsync -av root@223.242.27.77:/www/wwwroot/192.168.3.10/WorkGroup/ /www/wwwroot/192.168.3.10/WorkGroup/
从远端服务器223.242.27.77同步到本地/www/wwwroot/192.168.3.10/WorkGroup/
#rsync -avuz -e 'ssh -p 2222' user@remote-server:/path/to/remote/folder
/path/to/local/folder
指定端口
#rsync -auz -e 'ssh -p 43378' /data/svn/ root@192.168.1.254:/data/backup
通过rsync,并使用auz参数,结合-e修改ssh的端口,将本地的/data/svn作为源数据,用root用户推到远端服务器192.168.1.254的/data/backup目录下
三、CentOS下的Rsync服务
- 系统环境
系统平台: CentOS 7.9
Rsync Server: 192.168.3113
Rsync Client: 192.168.1121
2,服务端配置
- 1.修改配置文件
vim /etc/rsyncd.conf
[root@localhost ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
#
#
[mydata]
path = /tmp/test/
ignore errors = yes
read only = no
write only = no
hosts allow = 192.168.0.0/16
hosts deny = *
list = false
uid = root
gid = root
auth users = test
secrets file = /etc/rsyncd/rsyncd.secrets 新建账号密码目录和文件,其他目录测试有问题
- 2,创建密码文件
在ect在创建目录mkdir /etc/rsyncd 然后后touch /etc/rsyncd/rsyncd.secrets
用vim /etc/rsyncd/rsyncd.secrets
或echo “test:123456” > /etc/rsyncd/rsyncd.secrets
- 3.修改文件权限为
600
(必须)
chmod 600 /etc/rsyncd/rsyncd.secrets
[root@localhost ~]# ls -lhs /etc/rsyncd/rsyncd.secrets
4.0K -rw-------. 1 root root 12 2月 8 17:21 /etc/rsyncd/rsyncd.secrets
- 4.开启
daemon
rsync --daemon
此时会开启一个默认端口 873 的监听
netstat -luntp
- 5,开通防火墙端口
rsync缺省的端口是873,您可以修改配置文件中的端口。
1)防火墙开通873端口
firewall-cmd --zone=public --add-port=873/tcp --permanent
2)重启防火墙
systemctl restart firewalld
3) 启用rsyncd服务
systemctl start rsyncd
4)把rsyncd服务设置为开机自启动
systemctl enable rsyncd
四,防火墙相关设置
# systemctl stop firewalld --临时关闭防火墙
# systemctl disable firewalld --永久关闭防火墙
关闭selinux,临时关闭:
# setenforce 0
永久关闭:
# vim /etc/selinux/config
SELINUX=disabled --将enforcing改为disabled
# reboot --重启系统永久生效
FQR汇总:
@ERROR: access denied to ngxlog from unknown (192.168.1.1)
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
原因:
是你的rsync sever端不允许192.168.1.1访问,一般出现这个问题的情况是你在rsyncd.conf
添加了 allow host 参数,而你当前连接的ip没有在此参数中。
解决办法:
添加如下参数:
allow host 192.168.1.1 或 192.168.1.0/24都行
拍错思路:
1.确定你同步的命令及相关参数设置都没有问题。
2.通过telnet测试服务ip及端口是否可连
telnet 192.168.2.3 873
3.上面2步没有问题就去rsync server端看下配置文件,防火墙等等
部分内容参考:https://juejin.cn/post/6888708683929223175/
https://blog.51cto.com/u_13525470/2063052
https://www.cnblogs.com/wucongzhou/p/12660135.html
rsync -av –exclude ‘/Downloads’ /mydocker/downloads/ root@61.191.98.15:/mydocker/downloads/