总论:

linux的文件系统设计非常优秀,总的来讲有两大部分,第一部分就是树形的组织结构,第二部分就是vfs,树形的组织结构组织了文件系统的表象,用户非常方便的使用,而vfs是文件系统的实现机理,它处于内核态,不但实现了树形结构的mount机制,并且还提供了一个统一的接口用来訪问设备。
一、Linux文件系统概述

1、Linux文件系统组织

Linux中使用树来组织文件系统。整个文件系统构成了一颗树,这棵树以/为根。整个系统有且仅仅有这一颗文件树。这棵树描写叙述了文件系统的拓扑结构,没有不论什么文件系统的类型信息。
2、mount机制

linux使用mount机制扩展文件系统,使不同类型的文件系统能够挂载在系统的文件树的不论什么位置。mount机制使文件树有了类型属性,支持了不同类型的文件系统的挂载。
如图所看到的。


能够看到假设不考虑挂载点,整个文件系统就是一棵树,假设考虑了挂载点,这棵树原来是嫁接而成的,能够包括各种不同种类的文件系统。正如桥片扩展了总线一样,挂载点扩展了文件树,和扩展总线不同的是,随意文件夹都能够是挂载点,可是不是随意芯片都是能够作为桥的。(网桥/交换机扩展以太网也是一样的道理,和mount机制更加相似一些,由于你仅仅须要插入一个多port网卡就能够作为一个网桥了。)
3、mount机制的优点

mount能够屏蔽文件系统的类型,全部类型的文件系统共享一棵树,可是实现却能够不同样。用户进程能够使用同样的系统调用接口訪问全部的文件系统,而不必在意訪问的文件是什么类型的。mount机制使一棵文件树得以多样化,然而又能够向用户屏蔽这样的多样化。这样的多样化是通过vfs实现的。
4、单棵树组织+mount扩展

Linux的文件系统和磁盘并不绑定,文件系统就是一棵树,是一个虚拟的概念,没有介质,没有容量,没有读写规则,唯独在挂载(mount)发生的时候,也就是详细的文件系统挂载的时候,某个挂载点才和介质建立联系,然而此时对于文件系统来讲仍然没有容量的概念,容量不过挂载于此文件夹的磁盘设备的属性,假设磁盘空间满了,仍然能够通过在此磁盘的一个文件夹上mount一个新的文件系统来解决,而新的文件系统在一块新的磁盘上。
5、和Windows文件系统的对照

Windows显式的分离了各种文件系统,尽管Windows在操作接口上也吸取了Unix中“一切皆文件”的思想。在接口级别,windows也使用同样的API来訪问各类文件,比方ReadFile,WriteFile等,然而在操作级别,windows却没有实现一致性,在操作级别,windows的文件系统主要指以磁盘为介质的文件系统,因此windows没有必要用一棵树包括全部的文件,而是区分成了各个盘符,然而这样的方式有个弊端,那就是不易扩展,由于单个盘符限制了容量,磁盘直接和文件系统绑定。因此,Windows不以单棵树树来组织文件系统,windows非常难用mount来扩展文件系统。
二、VFS概述

1、VFS

虚拟文件系统或者虚拟文件插口,叫做插口更合适,也是官方的叫法,vfs向上和用户进程文件訪问系统调用接口,如open,read,write等,向下和详细不同文件系统的实现接口,如read,write的不同实现。例如以下图所看到的:

2、VFS的重要性

VFS屏蔽了详细文件的实现细节,向上提供统一的操作接口。通过VFS能够实现随意的文件系统,这些文件系统通过文件訪问系统调用都能够訪问。在操作系统内核中,vfs是对离用户态近期的一层,由于它的存在,linux的使用才变得方便。实际上,正是vfs实现了树形的文件系统组织,然而vfs的作用还不止这些,设备的文件抽象也是通过vfs来实现的。
3、VFS举例

3.1、procfs
3.2、sysfs
3.3、cpusetfs
3.4、ntfs
3.5、extX
3.6、随意你想实现的。
须要做什么呢?仅仅须要在一大堆switch函数例程中实现你的逻辑就可以,就是说实现file_operations函数集合就可以。注意,在linux中,文件和存储没有必定关系,实际上没有不论什么关系,也就是说linux中的文件有的不须要被存储,比方proc文件夹中的文件,仅仅有在你read它的时候,数据才从内核出来,这个数据是内核逻辑提供的,而是可能实时变化,linux根本没有必要在还有一个地方再存储它。
4、一个重要结论

由于linux的树形文件系统是全然抽象的,因此它不和不论什么介质进行绑定,仅存在于内核其中,内核仅仅要起来,这个虚拟的树就存在了,仅仅是此时仅仅有树根,然而linux此时却能够挂载随意类型的文件系统到这个树根,这样就能够实现非常方便的定制,linux能够在initrd中挂载随意文件系统到树根,这是由于内核和文件系统是分离的概念,内核启动并不依赖不论什么文件系统。

Linux文件系统的设计的更多相关文章

  1. [apue] linux 文件系统那些事儿

    前言 说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,反而不能从宏观的角度 ...

  2. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  3. linux文件系统-基本磁盘2

    直入主题-基本磁盘 硬盘数据按照不同特点和作用大致分为5部分:MBR区.DBR区.FAT区.DIR区和DATA区 1.MBR MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁 ...

  4. XFS:大数据环境下Linux文件系统的未来?

    XFS:大数据环境下Linux文件系统的未来?   XFS开发者Dave Chinner近日声称,他认为更多的用户应当考虑XFS.XFS经常被认为是适合拥有海量数据的用户的文件系统,在空间分配方面的可 ...

  5. Linux文件系统十问,你知道吗?

    关于文件系统,相信大家都不陌生.身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢.那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧: 1.机械磁 ...

  6. linux文件系统详解

    最近在做磁盘性能优化,需要结合文件系统原理去思考优化方向,因此借此机会进一步加深了对文件系统的认识.在看这篇文章之前,建议先看下前面一篇关于磁盘工作原理的解读.下面简单总结一些要点分享出来: 一.文件 ...

  7. 理解Linux文件系统之inode

    很少转发别人的文章,但是这篇写的太好了. 理解inode   作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...

  8. (转)Linux文件系统的实现

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式.Linux有一个树状 ...

  9. linux --> 文件系统十问

    文件系统十问   参考:http://djt.qq.com/article/view/620   关于Linux文件系统相关的问题: 1.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机 ...

随机推荐

  1. DataGrid( 数据表格) 组件[1]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  2. 获取checkboxlist选中的值以及绑定来自之前选中的来自数据库的值

    //////ps:一下几句都是一个意思,为的是以后有人搜索关键字的时候能定位到这里///checkboxlist绑定选中值///checkboxlist绑定来之mssql数据的值///checkbox ...

  3. OD: First Step

    开始学习 0Day 了,前进了小小一步:<0Day 安全:软件漏洞分析艺术>第一篇末尾的 crack_me 实验成功了. 纪念一下. 几个概念: PE:    Portable Execu ...

  4. (转) C# Activator.CreateInstance()方法使用

    C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...

  5. 【Linux常用命令(更新)】

    1.ifconfig:查看当前ip,网卡信息 2.df -h:查看文件系统的使用情况,挂载点信息 3.du -sh  /var:查看/var文件夹大小 4.netstat -a:查看网络联机状态 5. ...

  6. channel c3 disabled, job failed on it will be run on another channel

    今天执行备份时,报错: allocated channel: c3 channel c3: sid=131 instance=orcl2 devtype=DISK   RMAN-03009: fail ...

  7. [leetcode][042] Trapping Rain Water (Java)

    我在Github上新建了一个解答Leetcode问题的Project, 大家可以参考, 目前是Java 为主,里面有leetcode上的题目,解答,还有一些基本的单元测试,方便大家起步. 题目在这里: ...

  8. PHP根据概率产生随机数

    假设 有四个选项:a 占 10%,b占20% ,C占30% , d 占 40% ,原理就是现获取随机数,然后找区间.当然了,选项的数量可以任意.目前默认是 总和是 100% .如果需要别的数,修改 随 ...

  9. php 二维数组按照某value值求出最大值最小值

    //商家的等级信息是一个二维数组,求出最小折扣和最大折扣array(0=>array('levelname'=>'银','dis'=>7.5), 1=>array('level ...

  10. hdu 2016

    Problem Description 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数.   Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这 ...