Rsync基础篇05—安装并使用inotify-tools

概述

Rsync 若要实现实时的单向数据同步,需要搭配 inotify-tools 工具集,前文已经完成了 SSH 协议以及 RSYNC 协议的免密身份验证。本章,您将学习到如何从源码编译安装 inotify-tools 。

inotify-tools 相关内容

简述

inotify-tools 是一个主用 Rust 语言编写的文件系统监视程序,并提供与历史 C 库 ABI 兼容 的 libinotifytools.so。

对于 GNU/Linux 操作系统来说,Linux 内核版本必须大于等于 2.6.13 才能使用 inotify-tools 特性。

安装

键入以下命令即可:

# RL 8.10 中 inotify-tools 的版本为 3.14
## 4.x 新版的 inotify-tools 已用 Rust 语言进行了重写
Shell > dnf -y install inotify-tools
提示
EPEL 存储库中才有 inotify-tools 预编译软件包。

相关命令

主要有两个命令:

  • inotifywait - 用于持续监控并实时输出结果,通常与 Rsync 增量备份工具一起使用。
  • inotifywatch - 用于短期监控,任务完成后输出结果。

inotifywait 命令的用法为 inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ],其常见选项如下:

  • -m - 持续监控事件
  • -r - 递归监控目录
  • -q - 简化输出信息
  • -e <events>,<event2>... - 监控事件的类型,多个事件类型用英语状态的逗号分隔

事件类型如下:

事件类型 说明
access 文件或目录的内容进行访问
modify 文件或目录的内容被写入
attrib 文件或目录的属性被修改
close_write 文件或目录在可写模式下打开后关闭
close_nowrite 文件或目录在以只读模式打开后关闭
close 无论读/写模式,文件或目录关闭
open 文件或者目录被打开
moved_to 有文件或目录移动到监控的目录中
moved_from 有文件或目录从监控的目录中移出
move 有文件或者目录,被移动到监控目录或者从监控目录中移出
move_self 已移动受监视的文件或目录
create 被监控的目录内有创建的文件或目录
delete 被监控的目录内有文件或目录被删除
delete_self 文件或目录已经被删除
unmount 包含已卸载文件或目录的文件系统

简单使用示例:

inotifywait -mrq -e create,delete /rsync/`

调整 Linux 内核参数

可根据生产环境的需要对内核参数进行调整。

默认情况下,在 /proc/sys/fs/inotify/ 目录下存在三个文件:

  • max_queued_events - 单个 inotify 实例中,内核缓存的未读事件队列最大长度,默认 16384。队列满后新事件会被静默丢弃并触发 IN_Q_OVERFLOW。
  • max_user_instances - 同一个用户(UID)在系统范围内最多能创建多少个 inotify 实例,默认 128。每调用一次 inotify_init() 就创建一个实例
  • max_user_watches - 同一个用户(UID)在系统范围内最多能创建的 inotify 监视点(watch)总数,默认 8192。所有实例共享此配额,每个被监控的文件或目录消耗 1 个 watch

生产环境中可将以下内容追加到 /etc/sysctl.conf 文件当中:

fs.inotify.max_user_instances  = 1024
fs.inotify.max_user_watches   = 1048576
fs.inotify.max_queued_events  = 1048576

inotifywait 命令的演示

在第一个远程终端 pts/0 中键入相关 inotifywait 命令,回车后窗口处于被锁定的状态,表示正在监控:

Shell > inotifywait -mrq -e create,delete /rsync/

在第二个远程终端 pts/1 中,进入到 /rsync/ 目录创建新文件:

Shell > cd /rsync/

Shell > touch inotify

此时第一个远程终端 pts/0 会输出以下内容:

/rsync/ CREATE inotify

在锁定的窗口中按 ctrl + c 退出。

搭配使用

在 192.168.1000.20/24 中创建一个新 Bash 脚本,内容如下:

#!/bin/bash
a="inotifywait -mrq -e modify,move,create,delete /rsync/"
b="/usr/bin/rsync -avz /rsync/* synu1@192.168.100.21:/home/synu1/"
$a | while read directory event file
    do
        $b &>> /tmp/rsync.log
    done
Shell > chmod a+x rsync_inotify.sh

Shell > bash /root/rsync_inotify.sh &

示例图如下:

⏳

正在加载 Flowchart 图表...

说明:

  • 使用的是 Rsync 的 SSH 协议
  • 此处的来源机器(RL 8.10,192.168.100.20/24)是 SSH 客户端,而目标机器(RL 10.3,192.168.100.21/24)是 SSH 服务器,换言之,您需要在 SSH 客户端中生成密钥对并修改 SSH 服务器的配置文件来完成免密验证登陆,具体操作请参阅 Rsync 免密验证登陆
  • 若目标机器的 SSH 服务使用非默认 22 端口,您也可以在脚本中指定 SSH 端口,如 b="/usr/bin/rsync -avz -e 'ssh -p 2222' /rsync/* synu1@192.168.100.21:/home/synu1/"

若使用 Rsync 程序的 RSYNC 协议,示例图如下:

⏳

正在加载 Flowchart 图表...

  • 目标机器(RL 10.3,192.168.100.21/24)需要配置 Rsync 服务并启动相关的守护进程(Daemon),参阅前面已经书写的 Rsync 演示 和 Rsync 配置文件说明
  • 来源机器(RL 8.10,192.168.100.20/24)需要给 Rsync 的系统变量赋值以完成免密验证登陆,具体操作请参阅 Rsync 免密验证登陆
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇