1 .什么是文件系统
文件系统顾名思义是管理文件的系统。 在windows上格式化USB内存时,必须选择NTFS、FAT32等文件系统。 经常使用linux的人也知道Ext4、XFS等文件系统。
格式化USB存储器. png
维基百科说明:文件系统是一种为用户提供基础数据访问的机制。 将设备中的空间划分为特定大小的块(群集),通常每块512字节。 数据存储在这些块中,大小被修改为占用整数个块。 文件系统软件将这些块组织成文件和目录,并记录哪些块被分配给哪个文件,哪些块未被使用。
2. FUSE文件系统
虽然很难从内核实现文件系统,但优秀的人实现了用户空间文件系统(Filesystem in Userspace,简称FUSE )。 我们可以站在优秀的人的肩膀上实现自己的文件系统。
假设您安装了名为myfs的基于FUSE的文件系统,并运行了可执行文件myfs以装载到/mnt/FUSE文件夹中。 下图为fuse的调用流程。
fuse.png
3 .实现简单的文件系统
FUSE提供两个接口: fuse_operations和fuse_lowlevel_ops,它们提供了一个文件系统,每个文件系统都可以提供一个用户空间。 fuse_lowlevel_ops对于VFS知识较少的人来说很难实现,而fuse_operations相对简单。
在本例中,您将基于fuse_operations创建自己的文件系统。 在使用FUSE之前,必须安装fuse-devel安装软件包。
#包含
#包含
void * myfs _ init (struct fuse _ conn _ info * conn ) )
{
printf(initmyfilesystem.n );
返回空值;
}
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
sructfuse _ args args=fuse _ args _ init (argc,argv );
struct fuse _ operationsmyfs _ oper={
. init=myfs_init,
(;
fuse_main(args.argc,args.argv,myfs_oper,NULL );
返回1;
}
编译后,gcc-omyfsmyfs.c-lf use-d _ file _ offset _ bits=64
装载:/myfs /mnt/fuse
使用mount命令检查装载情况:/opt/test fuse/myfs/myfson/mnt/fusetypefuse.myfs (rw,nosuid,nodev,relatime,user _
卸载: umount /mnt/fuse
虽然到目前为止已经实现了可以装载的文件系统,但此文件系统只能装载/卸载。