1.引言

本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理。Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色。

本文主要先引入VFS的概念,并从直观上了解Linux中所注册的文件系统,从而对Linux文件系统有一个概括的认识。

2.虚拟文件系统的引入

2.1 VFS(Virtual FileSystem Switch)架构

图 VFS文件系统架构图

VFS为用户空间提供了统一的接口,不同的文件系统需要实现这些接口,对于设备文件,驱动程序中也要实现相应的接口,这体现了一种机制与分离的理念。

2.2 查看内核注册的文件系统

图 内核所注册的文件系统

通过cat /proc/filesystems可以查看当前内核所注册的文件系统,文件系统不仅作为一种文件的管理机制,也可以作为其它的一种机制加入VFS中,如cgroup等

2.3 Linux文件系统目录结构

    

图 文件系统目录结构

Linux的文件是统一的,位于一棵目录树中,它与进程管理是一脉相承的理念。

注:所有进程都来源于唯一的初始进程,所有进程都是该进程的后代进程

3.file_system_type结构体

 struct file_system_type {
const char *name; /*文件系统的名字*/
int fs_flags; /*文件系统类型标志*/
#define FS_REQUIRES_DEV 1
#define FS_BINARY_MOUNTDATA 2
#define FS_HAS_SUBTYPE 4
#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */
#define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */
#define FS_USERNS_VISIBLE 32 /* FS must already be visible */
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
struct dentry *(*mount) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *); /*禁止访问超级块*/
struct module *owner; /*文件系统模块*/
struct file_system_type * next; /*链表中下一个文件系统类型*/
struct hlist_head fs_supers; /*超级块对象列表*/ struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key s_writers_key[SB_FREEZE_LEVELS]; struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
};

注:如上为Linux4.6中的结构,讲座中采用的是Linux2.6

  • Linux内核采用VFS(Virtual Filesystem Switch)框架
  • 每个文件系统都需要在VFS中注册,即填充一个struct file_system_type结构
  • 此结构描述的是文件系统的名称以及一个指向对应VFS超级块读取例程的地址等信息

  

图 file_system_type的组织结构  

  • 内核采用链表组织每个注册的文件系统,链表头为file_systems
  • 所有注册的文件系统通过next指针进行链接
  • 每个文件系统实例都对应一个super_block,同种文件系统类型的super_block挂在fs_supers链表上

 4. 实例:打印file_system_type信息

可以通过cat /proc/kallsyms | wc可以统计内核有多少个符号。

由于内核有些符号是没有导出的,不允许访问,通过cat /proc/kallsyms | grep file_systems可以打印出file_systems的地址,通过这个地址进行遍历,可以将打印出所有注册的文件系统

Linux文件系统1---概述的更多相关文章

  1. linux文件系统初始化过程(1)---概述

    术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...

  2. Linux文件系统的设计

    总论: linux的文件系统设计非常优秀,总的来讲有两大部分,第一部分就是树形的组织结构,第二部分就是vfs,树形的组织结构组织了文件系统的表象,用户非常方便的使用,而vfs是文件系统的实现机理,它处 ...

  3. linux 设备驱动概述

    linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和 ...

  4. Linux文件系统2---VFS的四个主要对象

    1.引言 本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理. Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色. Linux文 ...

  5. Linux文件系统知识记录——ext2描述

    最近完成了一个编程作业,大致功能是给定一个文件名,给出该文件所在目录和其本身所占用的簇号等信息.笔者选用了Linux的ext系列文件系统作为实验对象,通过实验对ext2文件系统的存储和索引有了一个较为 ...

  6. [转]使用fdisk磁盘分区和 Linux 文件系统

    概述 在本文中,学习磁盘分区和 Linux 文件系统相关内容.学习: 创建分区 使用 mkfs 命令来设置 ext2.ext3.ext4.xfs.Reiser v3 和 vfat 文件系统 创建和管理 ...

  7. Linux 文件系统详解

    作者: Paul Brown 译者: LCTT amwps290 这篇教程将帮你快速了解 Linux 文件系统. 早在 1996 年,在真正理解文件系统的结构之前,我就学会了如何在我崭新的 Linux ...

  8. 带你快速了解Linux文件系统

    http://www.embeddedlinux.org.cn/emb-linux/file-system/201807/03-8197.html 这篇教程将帮你快速了解 Linux 文件系统. 早在 ...

  9. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  10. linux文件系统和日志分析

    一.Linux文件系统 1.inode与block 1.概述: (1)文件数据包括元信息与实际信息 (2)文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区存储512字节 (3 ...

随机推荐

  1. 洛谷 P1120 小木棍 [数据加强版]解题报告

    P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...

  2. es某个分片受损或卡在INITIALIZING状态时解决办法

    参考这篇文章 # OK last warning: you will probably lose data. Don't do this if you can't risk that. CLUSTER ...

  3. JDK源码分析(3)HashMap

    JDK版本 HashMap简介 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,Hash ...

  4. 离线安装.NET 3.5

    最近为系统新增一个功能,写完以后进行部署,发现在IIS7上部署没有问题,但是IIS6上部署会出现未知情况,具体表现为取不到数据,估计是IIS6和IIS7直接的差异导致程序异常退出. 为了重现异常,在本 ...

  5. Spring Cloud学习(一)

    Spring Cloud是什么? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载 ...

  6. intest

    /* ============================================================================ Name : http.c Author ...

  7. 网络编程——socket(四十三)

    http://www.cnblogs.com/linhaifeng/articles/6129246.html#_label7 http://www.cnblogs.com/linhaifeng/ar ...

  8. Log4j 2X 日志文件路径问题

    关于路径问题网上说啥的都有,但是也不能说人家错,只能说不适合你这个. 一开始,我用的   ${webapp.root} <RollingFile name="rollingFileSy ...

  9. 20190408 XStream解析List

    XStream解析List 使用的JavaBean 普通JavaBean public class Book { private String name; public Book() { } publ ...

  10. springboot的注解详解

    配置类相关: @PropertySource(value = "classpath:test.properties")   //我们都把配置文件写到application.yml中 ...