使用 inotify-tools 与 rsync 构建实时备份系统

2018 年 4 月 7 日 ImportNew

(点击上方公众号,可快速关注)


来源:暗无天日 ,

lujun9972.github.io/blog/2018/04/04/使用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 来自己处理就行了。


看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能


登录查看更多
0

相关内容

这个新版本的工具会议系列恢复了从1989年到2012年的50个会议的传统。工具最初是“面向对象语言和系统的技术”,后来发展到包括软件技术的所有创新方面。今天许多最重要的软件概念都是在这里首次引入的。2019年TOOLS 50+1在俄罗斯喀山附近举行,以同样的创新精神、对所有与软件相关的事物的热情、科学稳健性和行业适用性的结合以及欢迎该领域所有趋势和社区的开放态度,延续了该系列。 官网链接:http://tools2019.innopolis.ru/
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【边缘智能综述论文】A Survey on Edge Intelligence
专知会员服务
120+阅读 · 2020年3月30日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
利用 AutoML 的功能构建和部署 TensorFlow.js 模型
TensorFlow
6+阅读 · 2019年12月16日
已删除
AI掘金志
7+阅读 · 2019年7月8日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
A Survey on Edge Intelligence
Arxiv
50+阅读 · 2020年3月26日
Arxiv
24+阅读 · 2020年3月11日
A Modern Introduction to Online Learning
Arxiv
20+阅读 · 2019年12月31日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关资讯
利用 AutoML 的功能构建和部署 TensorFlow.js 模型
TensorFlow
6+阅读 · 2019年12月16日
已删除
AI掘金志
7+阅读 · 2019年7月8日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
相关论文
A Survey on Edge Intelligence
Arxiv
50+阅读 · 2020年3月26日
Arxiv
24+阅读 · 2020年3月11日
A Modern Introduction to Online Learning
Arxiv
20+阅读 · 2019年12月31日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
7+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员