linux vfs中的fuse文件系统
阅读数:268 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
filesystem types | 文件系统类型 |
superblock | 整个文件系统的元信息 |
inode | 单个文件的元信息 |
dentry | 目录项,一个文件目录对应一个dentry |
file | 进程打开的一个文件 |
基于块设备的文件系统(Block-based FS) | ext2-4, btrfs, ifs, xfs, iso9660, gfs, ocfs, …基于物理存储设备的文件系统,用来管理设备的存储空间 |
网络文件系统(Network FS) | NFS, coda, smbfs, ceph, …用于访问网络中其他设备上的文件。网络文件系统的目标是网络设备,所以它不会调用系统的Block层 |
伪文件系统(Pseudo FS) | proc, sysfs, pipefs, futexfs, usbfs, …因为并不管理真正的存储空间,所以被称为伪文件系统。它组织了一些虚拟的目录和文件,通过这些文件可以访问系统或硬件的数据。它不是用来存储数据的,而是把数据包装成文件用来访问,所以不能把伪文件系统当做存储空间来操作。 |
特殊文件系统(Special Purpose FS) | tmpfs, ramfs, devtmpfs,特殊文件系统也是一种伪文件系统,它使用起来更像是一个磁盘文件系统,但读写通常是内存而不是磁盘设备。 |
堆栈式文件系统(Stackable FS) | ecryptfs(加密文件系统), overlayfs(不直接参与磁盘空间结构的划分,仅将原来文件系统中不同目录和文件进行“合并”), unionfs(联合文件系统), wrapfs,叠加在其他文件系统之上的一种文件系统,本身不存储数据,而是对下层文件的扩展。 |
用户空间文件系统(FUSE) | 它提供一种方式可以让开发者在用户空间实现文件系统,而不需要修改内核。这种方式更加灵活,但效率会更低。FUSE 直接面向的是用户文件系统,也不会调用Block层。 |
二、fuse
文件系统一般是实现在内核里面的,比如,Ext4、Fat32等常见的文件系统,其代码都在内核中,而FUSE特殊之处就是,其文件系统的核心逻辑是在用户空间实现的。
FUSE 是 Filesystem in Userspace 的缩写,也就是常说的用户态文件系统。
客户不断需要存储解决新功能的方案(快照、加密等),随着软件定义存储范式的不断出现,文件系统的复杂度越来越高,所以用户空间是开发、移植和维护代码的更友好的环境。
开发效率高 | 用户态的程序你可以随意 debug,有大量的第三方库可以使用 |
可移植性 | 对于需要在多个平台上运行的文件系统,在用户空间中开发可移植代码要比在内核中容易得多。 |
fuse主要由三部分组成:FUSE内核模块、用户空间库libfuse以及挂载工具fusermount
FUSE内核模块 | 加载时被注册成 Linux 虚拟文件系统的一个 fuse 文件系统驱动。实现和VFS的对接,实现一个能被用户空间打开的设备。该块设备作为fuse daemon与内核通信的桥梁,fuse daemon通过/dev/fuse读取fuse request,处理后将reply写入/dev/fuse。 |
用户空间库libfuse+fuse deamon | 负责和内核空间通信,接收来自/dev/fuse的请求,并将其转化为一系列的函数调用,将结果写回到/dev/fuse |
挂载工具 | 实现对用户态文件系统的挂载 |
相关推荐
一、fuser
通过文件(或文件系统)找出正在使用该文件的程序
1、基本用法
fuser [-umv] [-k [i] [-signal] ] file/dir
-u:在进程号旁边显示其拥有者的用