Linux文件系统的设计
总论:
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文件系统的设计的更多相关文章
- [apue] linux 文件系统那些事儿
前言 说到 linux 的文件系统,好多人第一印象是 ext2/ext3/ext4 等具体的文件系统,本文不涉及这些,因为研究具体的文件系统难免会陷入细节,甚至拉大段的源码做分析,反而不能从宏观的角度 ...
- 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]
1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...
- linux文件系统-基本磁盘2
直入主题-基本磁盘 硬盘数据按照不同特点和作用大致分为5部分:MBR区.DBR区.FAT区.DIR区和DATA区 1.MBR MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁 ...
- XFS:大数据环境下Linux文件系统的未来?
XFS:大数据环境下Linux文件系统的未来? XFS开发者Dave Chinner近日声称,他认为更多的用户应当考虑XFS.XFS经常被认为是适合拥有海量数据的用户的文件系统,在空间分配方面的可 ...
- Linux文件系统十问,你知道吗?
关于文件系统,相信大家都不陌生.身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢.那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧: 1.机械磁 ...
- linux文件系统详解
最近在做磁盘性能优化,需要结合文件系统原理去思考优化方向,因此借此机会进一步加深了对文件系统的认识.在看这篇文章之前,建议先看下前面一篇关于磁盘工作原理的解读.下面简单总结一些要点分享出来: 一.文件 ...
- 理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...
- (转)Linux文件系统的实现
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式.Linux有一个树状 ...
- linux --> 文件系统十问
文件系统十问 参考:http://djt.qq.com/article/view/620 关于Linux文件系统相关的问题: 1.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机 ...
随机推荐
- HBase学习(十四)LINUX下用Eclipse构建HBase开发环境
Eclipse,HBase版本号眼下没有发现须要特别指定 1:从HBase集群中复制一份Hbase部署文件,放置在开发端某一文件夹下(如在/app/hadoop/hbase096文件夹下). 2:在e ...
- Android浏览图片,点击放大至全屏效果
做到照片浏览的功能,对于QQ空间中点击图片放大至全屏,感觉效果很赞,于是也做了个类似的效果.如下. 我不知道QQ那个是怎么做的,我的思路如下: 首先,从图片缩略界面跳转到图片详情页面,应该是从一个Ac ...
- 一个小的程序--实现中英文切换(纯css)
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- JavaScript“闭包”精解
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. 详细了解 Javascript语言的特殊之处,就在于函数内部可以直接读 ...
- javascript 冒泡和事件源 形成的事件委托
冒泡:即使通过子级元素的事件来触发父级的事件,通过阻止冒泡可以防止冒泡发生. 事件源:首先这个东西是有兼容行问题的,当然解决也很简单. 两者结合使用,形成的事件委托有两个优势: 1.减少性能消耗: 2 ...
- (转)WITH (NOLOCK)
缺点: 1.会产生脏读 2.只适用与select查询语句 优点: 1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%. 2.可以用于inner join 语句 脏读: 一个用 ...
- RAC RMAN备份
这篇主要介绍的是RAC 环境下的RMAN 备份. 关于Oracle 备份与恢复的一些理论知识参考我的Blog: Oracle 备份 与 恢复 概述 http://blog.csdn.net ...
- 报错: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is ins
环境:Xcode7.1.1 + iOS9.1 详细错误: App Transport Security has blocked a cleartext HTTP (http://) resource ...
- 捷易拍与springMVC系统结合
1. 捷易拍高拍仪在jsp页面的调用 使用ActiveX插件的方式处理解决此问题,捷易拍公司提供了支持IE8以上的32位浏览器的插件,安装插件后,我们可以使用Object标签,使用高拍仪 注意: 1. ...
- sql 查找数据库中某字符串所在的表及字段
declare @str varchar(100) set @str='是否严格控制' --要搜索的字符串 declare @s varchar(8 ...