美文网首页
实现一个简单的文件系统(挂载)

实现一个简单的文件系统(挂载)

作者: 海铭威_38cf | 来源:发表于2019-02-21 10:32 被阅读0次

1. 什么是文件系统

文件系统顾名思义就是管理文件的系统。使用windows格式化U盘的时候需要选择文件系统,比如NTFS、FAT32等。经常使用linux的也知道Ext4、XFS等文件系统。

格式化U盘.png

维基百科的描述:文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(或者称为簇),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。

2. FUSE文件系统

如果从内核开始动手实现一个文件系统是比较困难的,好在有高人实现了一个用户空间文件系统(Filesystem in Userspace,简称FUSE)。我们可以站在高人的肩膀上实现自己的一个文件系统。

假如我们实现了一个基于FUSE的文件系统叫做myfs,通过运行可执行程序myfs挂载到/mnt/fuse文件夹下,下图为FUSE的调用流程:

fuse.png

3. 实现一个简单的文件系统

FUSE提供了两组接口:fuse_operations和fuse_lowlevel_ops,实现任何一种都可以实现一个用户空间的文件系统。fuse_lowlevel_ops对于VFS了解比较少的人来说实现起来难度比较大,fuse_operations相对简单。

下面我们就在fuse_operations基础上创建一个自己的文件系统。使用FUSE之前需要安装fuse-devel安装包。

#include <fuse.h>
#include <stdio.h>

void *myfs_init(struct fuse_conn_info *conn)
{
    printf("Init my file system.\n");
    return NULL;
}

int main(int argc, char **argv)
{
    struct fuse_args args = FUSE_ARGS_INIT(argc, argv);

    struct fuse_operations myfs_oper = {
        .init = myfs_init,
    };

    fuse_main(args.argc, args.argv, &myfs_oper, NULL);

    return 1;
}

编译一下:gcc -o myfs myfs.c -lfuse -D_FILE_OFFSET_BITS=64

挂载:./myfs /mnt/fuse

通过mount命令查看挂载情况:/opt/testfuse/myfs/myfs on /mnt/fuse type fuse.myfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)

卸载:umount /mnt/fuse

至此我们实现一个可以挂载的文件系统,但是这个文件系统只能挂载/卸载!

相关文章

  • 2018-08-21

    IPFS的使用和能实现的目标: 1.作为一个挂载的全局文件系统,挂载在/ipfs和/ipns下 2.作为一个挂载的...

  • 实现一个简单的文件系统(挂载)

    1. 什么是文件系统 文件系统顾名思义就是管理文件的系统。使用windows格式化U盘的时候需要选择文件系统,比如...

  • Shell mount、umount 挂载和卸载存储介质

    mount 命令用于挂载一个文件系统,或是显示已挂载的文件系统的信息。 直接运行 mount 命令,不带任何参数,...

  • 基于dokan的内存文件系统实现

    dokan是windows系统上的FUSE实现,基于它提供的接口,可以很容易的实现一个用户态文件系统,挂载到系统成...

  • Docker技术

    Union FS: 是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统 Cgroups:实现对资源的配额和度...

  • Aliyun - OSS工具ossfs使用简介

    0. 简介 挂载bucket到本地文件系统,能够通过本地文件系统操作OSS 上的对象,实现数据的访问和共享。官方工...

  • linux(十八)磁盘的挂载/卸载

    挂载磁盘 注意点: 单一文件系统不应该被重复挂载在不同的挂载点 单一目录不应该重复挂载多个文件系统 作为挂载点的目...

  • CentOS7 文件系统自动挂载配置

    什么是文件系统自动挂载? 通常在使用CentOS系统时会通过挂载相应文件系统进行资源访问,例如挂载CDROM,LV...

  • 如何使用 autofs 挂载 NFS 共享

    给你的网络文件系统(NFS)配置一个基本的自动挂载功能。 大多数 Linux 文件系统在引导时挂载,并在系统运行时...

  • 学Linux?这个50个必备的基础命令一定要掌握!(四)

    31. mount 如果要挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上 也可以把它添加...

网友评论

      本文标题:实现一个简单的文件系统(挂载)

      本文链接:https://www.haomeiwen.com/subject/jhzlyqtx.html