rsync远程同步文件_ssh远程登录

rsync远程同步文件_ssh远程登录一、简介二、配置项三、远程同步测试免交互配置:四、实时同步1、在客户机上安装notify2、编写监控脚本五、rsync批量快速删除大量文件一、简介一款快速增量备份工具RemoteSync,远程同步支持本地复制,或者与其他SSH、rsync主机同步它名称里面的r指的是remote,rsync其实就是”远程同步”(remotesync)的意思。与其他文件传输工具(如FTP或scp)不同,rsync的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、简介

一款快速增量备份工具Remote Sync,远程同步
支持本地复制,或者与其他SSH、rsync
主机同步
它名称里面的r指的是 remote,rsync 其实就是”远程同步”(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,如果没有相当于新建则是全量备份,如果目标方已有一些文件,则用增量备份方式仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

二、配置参数

1、参数

-a、–archive参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。
–append参数指定文件接着上次中断的地方,继续传输。
–append-verify参数跟–append参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。
-b、–backup参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由–suffix参数指定的文件后缀名,默认是~。
–backup-dir参数指定文件备份时存放的目录,比如–backup-dir=/path/to/backups。
–bwlimit参数指定带宽限制,默认单位是 KB/s,比如–bwlimit=100。
-c、–checksum参数改变rsync的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。
–delete参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。
-e参数指定使用 SSH 协议传输数据。
–exclude参数指定排除不进行同步的文件,比如–exclude=”*.iso”。
–exclude-from参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。
–existing、–ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。
-h参数表示以人类可读的格式输出。
-h、–help参数返回帮助信息。
-i参数表示输出源目录与目标目录之间文件差异的详细情况。
–ignore-existing参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。
–include参数指定同步时要包括的文件,一般与–exclude结合使用。
–link-dest参数指定增量备份的基准目录。
-m参数指定不同步空目录。
–max-size参数设置传输的最大文件的大小限制,比如不超过200KB(–max-size=‘200k’)。
–min-size参数设置传输的最小文件的大小限制,比如不小于10KB(–min-size=10k)。
-n参数或–dry-run参数模拟将要执行的操作,而并不真的执行。配合-v参数使用,可以看到哪些内容会被同步过去。
-P参数是–progress和–partial这两个参数的结合。
–partial参数允许恢复中断的传输。不使用该参数时,rsync会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与–append或–append-verify配合使用。
–partial-dir参数指定将传输到一半的文件保存到一个临时目录,比如–partial-dir=.rsync-partial。一般需要与–append或–append-verify配合使用。
–progress参数表示显示进展。
-r参数表示递归,即包含子目录。
–remove-source-files参数表示传输成功后,删除发送方的文件。
–size-only参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。
–suffix参数指定文件名备份时,对文件名添加的后缀,默认是~。
-u、–update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。
-v参数表示输出细节。
-vv表示输出更详细的信息,
-vvv表示输出最详细的信息。
–version参数返回 rsync 的版本。
-z参数指定同步时压缩数据。

2、配置源的两种表示方法

格式一:
用户名@主机地址::共享模块名

rsync -avz 用户名@源地址::共享模块名称 /目标位置

格式二:
rsync://用户名@主机地址/共享模块名

rsync -avz rsync://用户名@源地址/共享模块 /目标位置

三、远程同步

服务器192.168.133.50
客户机192.168.133.75
systemctl stop firewalld
setenforce 0

[root@master ~]# rpm -q rsync 系统是自带的
rsync-3.0.9-18.el7.x86_64
[root@master ~]# vim /etc/rsyncd.conf 编辑此文件后面添加以下内容
 22  uid = root
 23  gid = root
 24  use chroot = yes                                              禁锢在源目录
 25  pid file = /var/run/rsyncd.pid                                 进程文件目录
 26  log file = /var/log/rsyncd.log                                 日志文件目录
 27  dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    因为本身具有压缩共呢个所以取消其他压缩功能,
 28  adress = 192.168.133.50                                      设定监听地址
 29  port = 873                                                    监听端口号 tcp/udp 873
 30  hosts allow = 192.168.133.0/24                                 允许访问的客户机地址
 31  
 32  [ceshi]                                                         共享模块名称
 33         path = /data/back                                        原目录实际路径   
 34         comment = web service                                     备注
 35         read only = yes                                           是否只读 
 36         auth users = user1                                 授权账户,多个账号以空格分隔
 37         secrets file = /root/rsyncd_users.db               存放账户信息的数据文件  

第一部分:定义共享模块全局模块配置
第二部分:共享模块(可以为多个)可以对应不同的”源目录”和授权账号信息
第三部分:此配置文件是为rsync –daemon模式设置的

如果采用匿名的方式,只要将其中的“auth users” 和“secrets file” 配置项去掉即可

[root@master ~]# vim /root/rsyncd_users.db 为备份账户创建数据文件
user1:123123                                                  建立同步用户

设定权限一定要600 权限拥有者可读写,其他人不可读写执行

[root@master ~]# chmod 600 /root/rsyncd_users.db
[root@master ~]# mkdir -p /data/back 建立设定的文件夹
[root@master ~]# chmod +r /data/back 给文件夹加可读权限
[root@master ~]# rsync --daemon 开启rsync
[root@master ~]# netstat -natp |grep rsync 查看状态

在这里插入图片描述

测试

主服务器上

[root@master ~]# cd /data/back/ 进入文件夹
[root@master back]# ls 目前是空的
[root@master back]# touch file{1..9}.txt 新建文件
[root@master back]# ls 查看文件
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt  file6.txt  file7.txt  file8.txt  file9.txt

客户机上

[root@client back]# ls 文件夹目前是空的
[root@client back]# rsync -avz user1@192.168.133.50::ceshi /data/back 取文件
Password: 

这时就可以从主服务器上下拉文件了
在这里插入图片描述

免交互配置:

在客户机目标文件夹下

[root@client back]# echo "123123" >server.pass
[root@client back]# chmod 600 server.pass

在主服务器上新建文件

[root@master back]# touch file{a..h}.txt

然后去客户机上

[root@client back]# rsync -avz --password-file=/data/back/server.pass rsync://user1@192.168.133.50/ceshi /data/back 第二种命令

在这里插入图片描述

可以设定crontab

四、实时同步

使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为inotify通知机制由 Linux内核提供,因此主要做本机监控,在触发式备份中,应用时更适合上行同步。
在这里插入图片描述

[root@master ~]# vim /etc/rsyncd.conf
read only = no                                                    根据之前的只把只读关闭
[root@master ~]# ss -ntap |grep rsync 查看进程号
LISTEN     0      5            *:873                      *:*                   users:(("rsync",pid=39065,fd=3))
LISTEN     0      5           :::873                     :::*                   users:(("rsync",pid=39065,fd=5))
[root@master ~]# kill -3 39065 关闭进程
[root@master ~]# ss -ntap |grep rsync 查看已经关闭
[root@master ~]# rsync --daemon 重启服务
[root@master ~]# ss -ntap |grep rsync 查看状态
LISTEN     0      5            *:873                      *:*                   users:(("rsync",pid=39578,fd=3))
LISTEN     0      5           :::873                     :::*                   users:(("rsync",pid=39578,fd=5))

主客机上都要配置

[root@master ~]# vim /etc/sysctl.conf 最后添加
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@master ~]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

1、在客户机上安装inotify

1.1调整inotify内核参数(优化)

/etc/ sysctl.conf(内核参数配置文件)
inotifywait:#用于持续监控,实时输出结果(增删改属性修改)
格式: inotifywait[参数]
常见参数
-m 持续进行监控
-r 递归监控所有子对象
-q 简化输出信息
-e 指定要监控哪些事件类型
inotifywatch:#用于短期监控,任务完成后再出汇总结果
max_queue_event #监控事件队列大小
max_user_instances #最多监控实例数
max_user_watches #每个实例最多监控文件数

#客户端: inotify内核参数

cat /proc / sys/fs/inotify/max_queued_events
cat /proc / sys/fs/inotify/max_user_instances
cat /proc / sys/ fs/inotify/max_user_watches
vim /etc/ sysctl.conf
fs.inotify.max_queued_events = 32768                                 # 监控时间队列,默认为16384
fs.inotify.max_user_instances = 1024                                   # 最多监控实例数,默认为128
fs.inotify.max_user_watches = 1048576                             #每个实例最多监控文件数,默认为8192

#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值

sysctl -p

把安装包导入系统/opt

[root@client opt]# ls
inotify-tools-3.14.tar.gz  rh
[root@client opt]# tar zxf inotify-tools-3.14.tar.gz
[root@client opt]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make && make install

2、编写监控脚本

[root@client ~]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /data/"
RSYNC_CMD="rsync -azH --delete --password-file=/data/back/server.pass /data/back user1@192.168.133.50::ceshi"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
# echo "${FILE} was rsynced" >>/opt/inotify_rsync.log

    fi
done

在这里插入图片描述

[root@client ~]# chmod +x /opt/inotify.sh

然后所有服务器都给目标和源目录加上权限

[root@client inotify-tools-3.14]# chmod 777 /data/back
[root@client back]# cd /opt 进入客户机启动脚本
[root@client opt]# ./inotify.sh &

这时你在客户机上的源目标文件夹任何操作都会被在主服务器上的目的文件夹里操作

[root@client back]# touch a{1..10}.txt 客户机创建文件
[root@master back]# ls 主服务器上查看已同步
a10.txt  a1.txt  a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  a7.txt  a8.txt  a9.txt  server.pass

加入开机自启

chmod +x letc/rc.d/rc.local
echo " /opt/inotify.sh" >>/etc/rc.d/rc.local

五、rsync批量快速删除大量文件

1、rm和rsync的比较

1、rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。
2、rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。
另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。

tips:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录
最重要的是,它的处理速度相当快,处理几个G的文件也就是秒级的事
最核心的内容是:rsync实际上用的就是替换原理

2、实际操作

在机器上一个目录里创建多个文件

[root@localhost data]# touch {1..1000}.txt

在这里插入图片描述

[root@localhost opt]# mkdir empty 然后创建一个空文件
[root@localhost opt]# rsync --delete-before -aHv --progress -stats empty/ data/ 删除
或者
[root@localhost opt]# rsync --delete-before -d empty/ data

空文档后的“/”一定要打否则命令不起效果
-delete-before 传输前进行删除操作
-progress 传输时显示传输过程
-a 归档,表示以递归方式传输文件
-H 保持硬链接的文件
-v 详细模式
-stats 给出某些文件的传输状态
-d 不递归地传输目录
在这里插入图片描述
注意:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182516.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • delphi remobjects

    delphi remobjects概述:RemObjectsSDK是一个先进的远程框架,允许你通过网络远程地访问驻留在服务器上的对象。RemObjectsSDK允许你开发客户/服务应用程序,利用高优化性能的SmartServices或跨平台兼容性的标准WebServices,使客户端和服务器端轻松高效的通讯。高亮特征强大的远程框架为客户端和服务器间有效通讯提供广泛的选项,跨越各种质量的网络(从本地局域网…

    2022年10月31日
  • 点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

  • 界面无小事(五):自定义TextView

    界面无小事(五):自定义TextView

  • java类加载和初始化_java静态变量什么时候初始化

    java类加载和初始化_java静态变量什么时候初始化????Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)????基础推荐:Java基础教程系列????实战推荐:SpringBoot基础教程????简介:Java领域优质创作者????、CSDN哪吒公众号作者✌、Java架构师奋斗者????????扫描主页左侧二维码,加入群聊,一起学习、一起进步????欢迎点赞????收藏⭐留言????目录一、类的加载与ClassLoader的理解1、加载2、链接3、初始化二、什么时候会发生类初始化1

  • 使用VSCode编写的代码中文乱码的解决方案【临时+永久】

    使用VSCode编写的代码中文乱码的解决方案【临时+永久】问题描述这是由于编码不同而造成的问题,何为编码?常见的如Uncoide,UTF-8,UTF-16,GB2312,GBK,GB18030VSCode默认的文件编码是UTF-8,而你要用C/C++打印中文在屏幕上时就会出现错误。因为打印时中文的输出编码是GBK或者GB18030或者GB2312,就会导致出错。简单来说就是,我用中文,你用英文,当然无法理解了。解决方法临时修改在VSCode状态栏处,你会看到一个UTF-8的字样,点击它,修改为GBK,GB18030或GB231

  • 前端VSCode常用插件及安装

    前端VSCode常用插件及安装新手前端VSCode常用插件及其安装方法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号