使用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 ...
随机推荐
- PrintPreviewControl
用于按文档打印时的外观显示PrintDocument对象.此控件没有按钮或其他用户界面元素,因此通常只有在希望编写自己的打印预览用户界面时才会使用PrintpreviewControl 属性 Docu ...
- springboot2.x如何配置全局自定义异常
为什么要捕获异常? 我们开发中,经常运行时,代码会报错,这时候我们有可能抛出异常,而不是用try..catch来解决.而且现在前后端分离,如果不捕获异常的话,前端那边的人估计会被报的错搞得焦头烂额的. ...
- Java基础入门 - Hello world
JDK安装完成后,将一下代码写入文件HelloWorld.java中 // HelloWorld.java public class HelloWorld { public static void m ...
- JavaScript new 操作符 OOP(一)
什么是对象 对象是单个实物的抽象,通常需要一个模板,表示某一类实物的共同特征,然后对象根据这个模板生成. 对象是一个容器,封装了属性(property)和方法(method),属性是对象的状态, ...
- GCC & Maker
All we did must depend on compiler, and then What we did can run on machine. What does compiler do b ...
- C++ Knowledge series 5
Programming language evolves always along with Compiler's evolvement On the Cusp of the Object Model ...
- python3基础14(有关日期的使用2)
#!/usr/bin/env python# -*- coding:utf-8 -*-import timeimport datetime,shutil,osimport calendar print ...
- 16 Javascript
网上找网页模板: 1.HTML模板 2.BootStrap 前面内容总结 HTML 标签:块级,行内 CSS 后台管理布局 position: fixed ---永远固定在窗口的某个位置 relat ...
- 概念:RPG游戏中两个兵种互相攻击的逻辑
直接上题目: 解析题目: 根据题目的解析,进行代码的实现: 输出结果: 心得: (1) 当我们面对‘公式结果不是我们想要的’时,应该在脑海里将一个完整的攻击流程进行想象,就会对流程有个更清晰的思路 ( ...
- word禁止自动编号
在回车.换行时使用 shift + enter