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.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机 ...
随机推荐
- Spring3 MVC 使用JSON进行前后台数据交互
http://wbj0110.iteye.com/blog/2007918 在 Spring3 中,响应.接受 JSON都十分方便.向前台返回 JSON 格式的数据: 1 2 3 4 5 6 7 8 ...
- iOS 画音频波形曲线 根据音频数据版
效果图 DrawView.h #import <UIKit/UIKit.h> @interface DrawView : UIView @property shortshort *draw ...
- scrollTop,scrollLeft
document.body.scrollTop用法 网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可 ...
- 关于为什么RAID5往往掉一个盘后第二个盘也立刻挂掉的原因分析
很多人遇到过服务器RAID5挂掉,往往掉一个盘后,第二个盘也立刻挂掉. 大家都知道RAID5 一次允许一个盘缺失, RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位 ...
- c - 冒泡/选择排序.
#include <stdio.h> #define LEN 10 #define TRUE 1 #define FALSE 0 /* 对 10 个数进行排序 */ //选择排序法(值得注 ...
- 2015版Force Touch Mac Book激活三个手指拖动窗口
新买的2015版的Mac Book Pro,一切都好,就是原来一直很的很习惯的三个手指拖动窗口的手势,突然找不到地方设置了,很是让我失望了一把,在想苹果怎么会把这么有用的手势去掉了呢.还好有万能的Go ...
- HTML 学习网站
http://www.w3school.com.cn/tiy/t.asp?f=html_intro
- Sicily 1156. Binary tree
题目地址:1156. Binary tree 思路: 如何愉快地前序输出呢,要在存储数据的时候根据位置来存放数据! 一开始被自己蠢哭,一直以为第一个输入的就是根结点(例子的祸害呀啊啊啊!!!!),结果 ...
- Spring 学习笔记01
以一个论坛登陆模块来讲解如何使用spring 登陆功能虽然简单,但是模块虽然很小,但是基本包括了一般的web应用的操作.涵盖了持久层数据访问(数据库相关操作).业务层事务管理(数据库操作回滚等).展现 ...
- 公众号的秘密,知道一个biz就够了
公众号的秘密,知道一个biz就够了 微信对于我来说,最有价值的是一个学习渠道,特别是搜狗微信搜索(http://weixin.sogou.com/)能够很方便的搜索公众账号和文章内容,PC端就能够获得 ...