比思論壇

標題: 用户态文件系统框架FUSE的介绍及示例 [打印本頁]

作者: 妖刀路过    時間: 2020-11-23 16:21
標題: 用户态文件系统框架FUSE的介绍及示例
了解Linux文件系统的同学都清楚,Linux的文件系统都是在内核态开发的。内核态开发最大的问题是涉及的内容比价多,调试不太方便。因此,很多应用都不太原因涉及内核态的开发。而fuse解决了文件系统必须在内核态的的难题。 它将文件系统的实现从内核态搬到了用户态,也就是我们可以在用户态实现一个文件系统。fuse有很多应用,比如与对象存储(例如S3等)结合,可以实现通过普通目录访问云对象存储的方式,简化应用访问对象存储的复杂性。
本号将陆续推出3-5篇文章介绍fuse,今天是第一篇,将介绍fuse的基本原理,及给出一个非常简单的示例程序。多说无益,我们接下来实际操作一下fuse。
软件安装
要使用该库进行用户态文件系统的开发,必需先安装。包括软件包和开发用的头文件等内容。不同的平台安装方法略有不同,下面分别介绍一下。
Ubuntu 16.04
sudo apt-get install libfuse2 libfuse-dev
CentOS 6
yum install fuse fuse-devel
本文安装的是fuse-devel-2.9.4-1.0.4.el6.x86_64版本的,后续示例程序也是该版本的,如果版本不一致在测试时可能略有不同。

fuse基本原理

简单的理解,fuse实现了一个对文件系统访问的回调。fuse分为内核态的模块和用户态的库两部分。其中用户态的库为程序开发提供接口,也是我们实际开发时用的接口,我们通过这些接口将请求处理功能注册到fuse中。内核态模块是具体的数据流程的功能实现,它截获文件的访问请求,然后调用用户态注册的函数进行处理。
图1 fuse处理流程
如图1所示,其中fuse_user是开发的用户态的文件系统程序,该程序启动的时候会将自己开发的接口注册到fuse中,比如读写文件的接口,遍历目录的接口等等。
同时,通过该程序在系统某个路径挂载fuse文件系统,比如/tmp/file_on_fuse_fs。此时如果在该目录中有相关操作时,请求会经过VFS到fuse的内核模块(上图中的步骤1),fuse内核模块根据请求类型,调用用户态应用注册的函数(上图中步骤2),然后将处理结果通过VFS返回给系统调用(步骤3)。






歡迎光臨 比思論壇 (http://108.170.5.98/) Powered by Discuz! X2.5