使用inotify-tools与rsync构建实时备份系统
使用inotifywait监控文件变动
inotifywait是 inotify-tools
包中提供的一个工具,它使用 inotify
API 来监控文件/目录中的变动情况。
在archlinux上,我们可以使用下面命令来安装
sudo pacman -S --noconfirm inotify-tools
平时 inotifywait
会挂起在那里,直到文件/目录发生了要引起关注的事件后,它会退出并输出事件发生的场所、事件的名称以及引起事件的文件(当事件发生在目录上时才会输出).
inotifywait
最常用的选项有两个,一个是 -r
一个是 -e
,其中:
- -r
- 表示递归监控子目录中文件发生的事件
- -e
- 指定要监控的事件列表。对于备份系统来说,只需要监控 modify、create和delete三种事件就行了。
比如,我们运行
inotifywait -r -e modify,create,delete /tmp
表示监控 /tmp
目录及其子目录中文件修改、文件创建和文件删除三种事件。
这时程序一直在挂起状态
[lujun9972@X61 ~]$ inotifywait -r -e modify,create,delete /tmp
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
这时在 /tmp
目录下新建一个文件
touch /tmp/newFile
则 inotifywait
进程退出,并输出如下信息
/tmp/ CREATE newFile
使用rsync同步变动
rsync是一款快速增量备份工具。它的具有以下几个特点使得它很适合用作做备份的工具:
- 增量备份,只会传输修改过的内容
- 可以在传输过程中实时解压缩,减少带宽消耗
- 可以保持原来文件的权限、事件、软硬链接
- 即支持本机复制,也支持远程复制
rsync常用法为:
rsync -avz --delete src/ foo:/data
其中
- -a
- 表示archive mode,即备份目录下的所有内容(包括子目录中的内容),并且保持软链接、文件属性、文件修改事件、文件的所有者和宿主信息不变,并且同步字符/块设备以及命名socket和fifo等特殊文件。
- -v
- 表示输出备份的详细信息
- -z
- 表示传输时进行压缩
- –delete
- 删除备份目的地里src中没有的文件
- src/
- 表示要备份的是src目录下的所有内容,注意这里最后的
/
不能去掉,否则会把src目录本身备份过去 - foo:/data
- 表示备份的目的地是foo主机下的
/data/
目录
整合起来
接下来我们只需要用个 while
死循环把两个工具整合起来就行了,非常简单
#!/bin/bash if [[ $# -ne 2 ]];then
cat<<EOF
Usage $(basename $0) source_dir [host:]dest_dir
EOF
exit 0
fi source_dir=$1
dest_dir=$2
while :
do
inotifywait -r -e modify,create,delete ${source_dir} && rsync -avz ${source_dir}/ ${dest_dir} --delete
done
这里有必要说明的是,虽然用 inotifywait
能探测出文件具体做了什么改动,但实际上我们根本不需要知道具体的改变是什么。
我们只需要知道有所改变了,然后具体改变了什么由 rsync
来自己处理就行了。
原文地址:https://lujun9972.github.io/blog..
使用inotify-tools与rsync构建实时备份系统的更多相关文章
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- rsync+inotify-tools实时备份脚本
1.1 实时备份 1.需求分析: 为什么要实时复制 因为nfs是单点非常的不安全 而通过定时任务备份会造成数据丢失 这是就需要需要实时备份 2实时方案 1).搭建好服务端backup与客户端nfs的 ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...
- NoSQL:如何使用NoSQL架构构建实时广告系统
JDNoSQL平台是什么 JDNoSQL平台是一个分布式面向列的KeyValue毫秒级存储服务,存储结构化数据和非机构化数据,支持随机读写与更新,灵活的动态列机制,架构上支持水平扩容,提供高并发.低延 ...
- 搭建rsync+inotify实现实时备份
一.环境搭建说明 系统环境 CentOS7.5 备份节点 主机名:backup01 IP地址:172.16.2.41 数据节点 主机名:nfs-master IP地址:172.16.2.31 二.在备 ...
- 通过rsync+inotify实现数据的实时备份
我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...
- rsync+inotify实现数据的实时备份
一.rsync概述 1.1.rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需 ...
- 实时备份工具之inotify+rsync
1.inotify简介 inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率.细粒度.异步地监控机制, 用于通知用户空间程序的文件系统变化.可利用它对用户空间进行安全. ...
- 通过rsync+inotify实现数据的实时备份(多台备份机)
在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.ta ...
随机推荐
- Intellij IDEA +genymotion安装配置
Intellij IDEA是一款非常好用的java编辑器,比Eclipse的代码提示要友善的多,优缺点不多讲了. 下面讲如何安装配置. 1)如官网下载最新版本 http://www.jetbrains ...
- Ubuntu15.10下安装Docker
1.首先查看linux系统版本 head -n 1 /etc/issue 2.升级包管理器 sudo apt-get update sudo apt-get install apt-transport ...
- cmd/bat 判断日期,并删除文件
代码来自互联网. ---------------------------------------- @echo off set a=2018-07-9 set ndate=%date:~,10%set ...
- hdu 3530 区间和在一定范围内最长区间
http://acm.hust.edu.cn/vjudge/problem/11253 这题要找到区间和在[m,k]范围内的最长区间 用两个单调序列保存区间最大值和最小值.当最大值-最小值>k时 ...
- Html+CSS--->第一周初探
html css 学了一周的前端,谈谈我的感想 我一直在使用sublime text 3来编辑我的代码,其中有很多很好用的快捷键和插件大大提高了我的开发效率 在这里我极力推荐使用编辑器来进行学习前端. ...
- Bootstrap知识点梳理
- HTML标签_2
- 《C#多线程编程实现方式》
一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行. 二.基本知识 1.进程与线程:进程作为操作系统执行程序 ...
- AJAX跨域POST发送json时,会先发送一个OPTIONS预请求
我们会发现,在很多post,put,delete等请求之前,会有一次options请求. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单请求(get和部分post,post时content ...
- KinSlideshow焦点图轮播插件
KinSlideshow默认设置效果代码: *焦点图显示的标题为 img 中 alt 属性中的文字 *当只有一张图片时不显示按钮,但也会有无缝切换效果 * jquery ..以上版本 jvascrip ...