关于linux文件系统监控(2)
来源:互联网 发布:mac隐藏下面的图标 编辑:程序博客网 时间:2024/06/12 23:10
目标:监控linux文件系统指定目录内的文件变化,并记录或提交到相应的接口。
该指定目录用于存储客户提交的文件。
提交方式可能是 ftp 或者 mount
方式一:
使用inotify机制。
相关的开发工具可以使用 inotify-tools,或者在其基础上进行再封装。
优点:开放方便,维护简单,运行稳定。
弱点:
1.事后获知,对于unlink event,无法获知被删除文件的信息,如:想知道删除的文件是否是softlink
2.海量文件或者目录的情况下,维护inode_list需要大量的内存空间,同时,在程序启动加载inode信息时耗时巨大。
方式二:
使用FUSE——file system user space。
可以参考http://www.ibm.com/developerworks/cn/linux/l-fuse/ 有一个简要介绍
实现自己的文件系统
注册自定义的文件操作方法:
InoteFS_oper.readlink= InoteFS_readlink; InoteFS_oper.readdir= InoteFS_readdir; InoteFS_oper.mknod = InoteFS_mknod; InoteFS_oper.mkdir = InoteFS_mkdir; InoteFS_oper.symlink= InoteFS_symlink;
实现对应方法,摘自本人的一个实现:
static int InoteFS_rmdir(const char *path){ int res; char *aPath = getAbsolutePath(path); path = getRelativePath(path); res = rmdir(path); InoteFS_log(aPath, "rmdir", res,"rmdir %s", aPath); return res == -1 ? -errno : 0;}
可以看到,
1,只是简单的执行系统动作rm
res = rmdir(path);
2,在rm动作前后均可以进行拦截和处理,上例仅在删除后拦截事件并记录日志
InoteFS_log(aPath, "rmdir", res,"rmdir %s", aPath);
此方式优点:灵活,高效,开发不算复杂,自由度很高,特别是解决了inotify 方式的 内存占用和启动准备时间上的弊病。
应用场景多样,特别是在某些大量依托文件系统的事务中,可以通过自定义的文件系统将底层逻辑做一个透明遮断,如:文件镜像/远程同步等。
方式三:
使用 strace ltrace 等系统工具。
这些工具可以监控进程的 system call 等。
因此,若用户使用ftp上传,可以监控 ftp server 的pid, 获得 ftp 的 system call
例如 unlink("xxxxxxxxxxxxxxxxxxx" ...)
由此,即可获得文件变动信息。
此方式无法处理mount 写文件的情况, 但是在某些快速开发场合可以使用, stick 一个pid的成本也相当低。
方式四:
切入内核,拦截system call。
优点当然是极致性能
不过对于开发技巧以及确保系统的稳定性上要求也很高。
具体开发可以参考github的部分开源项目。
如果选择此方式,可以使用一个折衷的开发方法,避免侵入内核代码,产生不可控的错误——
使用linux的 LD_PRELOAD 参数,通过chroot等方式, 自己替换掉底层模块 如 glibc 的 read unlink 等, 并进行拦截。
- 关于linux文件系统监控(2)
- 关于linux文件系统监控
- linux inotify 监控文件系统事件
- linux inotify 监控文件系统事件
- 如何监控Linux文件系统(inotify功能介绍)
- 关于监控文件系统上的IRP序列
- 【转】关于Linux 文件系统
- 关于Linux-文件系统
- 使用 inotify 监控 Linux 文件系统事件
- 使用Inotify 监控Linux 文件系统事件
- 使用 inotify 监控 Linux 文件系统事件
- 通过inotify监控linux文件系统变化
- inotify监控Linux文件系统的必备利器
- inotify监控Linux文件系统的必备利器
- 用 inotify 监控 Linux 文件系统事件
- 用 inotify 监控 Linux 文件系统事件
- 通过inotify监控linux文件系统变化
- 用 inotify 监控 Linux 文件系统事件
- TCP协议三次握手连接四次握手断开和DOS攻击
- SNS网站Feed功能设计
- CSS让TD中间的内容多出部分变成“...”
- Java操作Microsoft office
- 控制pb鼠标的移动
- 关于linux文件系统监控(2)
- Perl 最佳实践(节选) --- 11
- QMapControl介绍
- linux之tar命令参数分析
- iOS Dev 深入浅出 导航控制器(二)with表视图相关操作
- android 中的抖动效果(仿苹果)
- c指针
- js获取URL地址
- linux之shutdown命令参数分析