概述
Rsync 若要实现实时的单向数据同步,需要搭配 inotify-tools 工具集,前文已经完成了 SSH 协议以及 RSYNC 协议的免密身份验证。本章,您将学习到如何从源码编译安装 inotify-tools 。
inotify-tools 相关内容
简述
inotify-tools 是一个主用 Rust 语言编写的文件系统监视程序,并提供与历史 C 库 ABI 兼容 的 libinotifytools.so。
对于 GNU/Linux 操作系统来说,Linux 内核版本必须大于等于 2.6.13 才能使用 inotify-tools 特性。
- Github 项目地址 - https://github.com/inotify-tools/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 免密验证登陆
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论










