IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:VFS

共 2 篇相关文章

IT 累计浏览 6,456

Linux下如何知道文件被那个进程写

这篇讲的是一个运维中常见的棘手场景:Linux下文件持续增长,但用lsof等工具却找不到对应的写入进程。作者从一位同学的实际困扰出发,指出问题的普遍性,并给出了一个基于内核视角的解决方案。 核心思路是,既然用户态工具难以追踪(可能是进程很快打开又关闭了文件),那就直接在内核的虚拟文件系统层进行监控。文章推荐使用SystemTap工具包中的inodewatch.stp脚本,它通过探测vfs.write事件,能根据文件所在的设备号(major/minor)和inode号,精准定位到正在执行写操作的进程。 作者随后用一个生动的实验进行了演示:用dd命令在后台持续写入一个测试文件,通过stat命令获取其inode和设备信息,然后运行stap脚本。终端立刻输出了正在执行vfs_write的dd进程信息(进程名、PID),瞬间“破案”。整个排查过程清晰直观,展现了SystemTap在内核级故障排查中的强大能力。

IT 累计浏览 2,514

文件操作函数在VFS层的实现

这是一篇源码分析/实现类的文章,深入内核代码,拆解了open、read、write和close这四个基础文件操作函数在VFS(虚拟文件系统)层的具体实现路径。 文章开篇点明VFS作为统一接口的承上启下作用,随后逐一攻破。例如,对于open,它聚焦于do_sys_open函数,展示了如何从用户空间获取路径、分配文件描述符,到核心的do_filp_open如何查找/创建inode并构建file对象的完整过程。对于read和write,文章对比了它们近乎对称的实现结构:通过fget_light获取file对象,调用vfs_read/vfs_write执行操作,再更新文件偏移量。其中特别剖析了vfs_read如何根据file操作函数集(f_op)中是否存在自定义的read钩子来决定调用驱动层函数还是内核默认的同步读函数,清晰体现了VFS的灵活性与抽象层设计。 最后,close的实现则强调了资源的清理与释放,如调用flush写回缓存、释放锁和file对象。整篇文章通过关键代码段的解析,清晰勾勒出一个系统调用从用户空间下发后,如何在内核VFS层被逐步拆解、调度,最终落地到具体文件系统操作的过程,巧妙之处在于VFS如何通过一套统一的数据结构(如file、inode、f_op函数指针集)和调度逻辑来屏蔽底层差异,为上层提供一致的体验。对于想理解Linux文件I/O内核实现的开发者而言,这篇代码级的走查非常直接且具参考价值。