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.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机 ...
随机推荐
- next数组
首先看看next数组值的求解方法例如: 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2 next数组的求解方法是:第一位的next值为0 ...
- Linux的VI/VIM
参考自:http://www.cnblogs.com/itech/archive/2009/04/17/1438439.html 作者:iTech 出处:http://itech.cnblogs.co ...
- Linux命令 tar 打包解压缩
--打包:tartar -cvf 命名文件.tar 要压缩的目录tar -xvf 要解压的包.tartar -tf 要查看的包.tartar -f 包.tar -r file ...
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 var str = '[{"href":"baidu.com",&quo ...
- spring的CXF远程服务
http://www.tuicool.com/articles/Rb2uUn //远程调用 spring的cxf,亲自整合成功
- 扩展编写jquery插件的方法
比如要扩展验证功能(jquery.validate.js)中的 messages: { required: "This field is required.", remote: & ...
- python 微信推送模板消息
#!/usr/bin/env python #-*- coding: utf-8 -*- import httplib import json import MySQLdb #从数据库中获取acces ...
- [python]百度语音rest api
百度语音识别提供的api范例只有java, c, php. 如果使用Python, 需要注意: 语音文件长度是指bytes大小 可以通过len(file.read())获得 使用requests.po ...
- Matlab 图像预处理
%%%%%%%%%%%%%%%%% %%降采样 clear all im={}; %创建字典保存读取的图片 dis=dir('F:\kaggle_data_zip\Sample\*.jpeg');%% ...
- (摘)DataGuard物理standby管理 - 主备切换
DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...