Rsync
介绍
-
一款备份工具
-
异地传输每次要写脚本或者去手动scp就很麻烦
-
支持完全备份(全部重来)和增量备份(只修改变化的)
-
差量传输!!!(所以文件多了效率也会低)
工作指令
格式: rsync -options 源文件 远程主机:远程地址
常见参数
-r 对子目录递归处理
-l 拷贝链接文件
-p 保持权限
-t 保持原文件时间
-g 保持原组
-o 保持所属者
-D 表示块设备文件信息
-z 表示压缩传输
-H 表示硬连接文件
-P 显示进度
--delete 删除远程地址里不同步的多出来的文件
-a 就是-rlptgoD的缩写
所以我们一般使用:-azP
准备
-
如果你是CentOS就yum
-
如果你是Ubuntu系就apt
-
如果你是Mint玩家那就已经自带了
- 然后为了懒得演示输入密码的过程,就提前做好秘钥配对
ssh-keygen + ssh-copy-id不解释
Ps: 因为我比较懒所以直接root了(然而我知道这样是不好的......
实战
文件创建
A机:创建目录/myRsync,并在本目录下创建10个文件
image-20200121120134619B机:创建目录/myBackup,里面什么都没有
image-20200121115850583开始传输
A机:
image-20200121120255733输入:rsync -azP --delete "本机目录" 远程登录的用户@远程主机:远程位置 (后面和scp是一样的)
image-20200121120459550传输成功!!!
看看B机:
image-20200121120523021Done!
出现的小问题
- 每次都是手动push
- 如果用定时的话,很浪费资源
- 所以能不能在每次文件改变的时候自动push呢?
当然可以了!!!
结合inotify-tools
inotify-tools是什么
inotify说白了就是内核提供的一个文件系统事件监控机制(所以你要用的话前提是你内核版本高于2.6.13)
而inotify-tools就是一个可以利用这个内核接口获取情况的工具
所以说我们利用这个东西再结合上rsync就可以实现自动备份啦!
安装tools
image-20200121121811517简单使用
首先来看两个东西:
inotifywait:比较常用,检查文件是否被操作(执行后处于阻塞状态)
inotifywatch:多偏向于统计次数
我们来看下面一个例子:
image-20200121133741253我们使用到了这条指令:
inotifywait -mrq -e create,delete,modify /myRsnyc/
这条指令的意思就是:监听这个文件夹里发生的创建,修改,删除操作(-e就是指定监听指定的事件,如果省略,表示所有事件都进行监听,一共有四种选择,我们选了三种,还有一种是close_write),而且始终保持事件监听(-m)、递归监控目录数据信息变化(-r)、只打印事件信息(-q)
所以我们接下来可以写一个组合脚本来进行自动处理了
结合脚本
这里我们先做一个单相同步:把A机的新文件自动同步到B机去
脚本如下:
# !/bin/bash
a="inotifywait -mrq -e create,delete,modify,close_write /myRsync/" #表示我们会去监听/myRsnc这文件夹里的所有事件
b="rsync -azP --delete /myRsync/* root@192.168.3.84:/backup" #表示我们要执行的rsync指令,和之前一样的
$a | while read directory event file
do
$b
done
跑一下试试:
输入nohup ./你的文件的位置/脚本名字.sh &
那个&
代表让其自动运行,不被ctrl+c杀掉,当然如果你账户退出了也一样没了,所以结合了nohup使用,一直挂在后台运行.
另外注意一下给脚本权限(我懒我root别学我)
image-20200121141038507整挺好的,不错,就这样了
网友评论