Linux文件系统存储方式

文件系统作为一个系统的重要组成部分,对于每位程序员来说,都是非常重要的基础知识。与此同时,Linux和Windows上的文件系统的原理又恰恰是不一样的。Windows中采用的是FAT 表的形式,但是今天我主要的讲的是更为经典的Linux本地文件系统上的存储原理,稍稍分析一下他的结构,作为抛砖引玉。

文件系统的数据块管理

我们都知道,文件要被存储在磁盘中,我们都是把以数据块的概念做处理和存储的,如果最后的剩余部分没有达到单位块的大小,也是作为一整块的方式处理。所以问题来了,我们如何去处理这些文件数据块的关系呢,如何保证查找更加高效。下面提供3种常见的做法:

1.连续分配。这是一种最简单的处理方式,在磁盘中寻找一段空的物理地址,在上面连续划分出足够的物理块,映射到逻辑上的数据块号上去。这样的好处是,如果你知道数据块的首地址,你可以通过计算,随机访问数据块。但是不足之处也很明显,你不知道想存入的数据块的大小,要划分多大的空间。第二,这么做的效率太低了,每次都要刚刚找到这么多的连续的物理空间存储数据块,每次都是成块成块的占去一大片空间,最终会导致很多碎片,因为空间太小,用不了,剩余的那部分小的空间就永远是无法得到利用。

2.链接表法。这个方法相比上个方法就提升了一个档次,首先就是不需要是连续的存储空间的要求。他是通过类似链表的手法在逻辑上保证是数据连续的。通过在文件数据块中多设置了下一个的数据块的物理地址,进行逐个查找访问。下面这张是模拟图;

缺点主要有2个,随机访问效率低,必须要逐个找过去,如果你要找的数据在你最后一个数据块,那就要悲剧了。2.还有一个这会带来额外的存储开销,因为你在文件的基本信息中还保存了物理地址。所以这导致了下一个方式的诞生。

3.索引链表法。这个方法好像就是专门为了克服上个方法的缺点的。不是闲效率低吗,我把索引的地址与真实物理数据分开存放不就可以解决问题了嘛。这其实也就是数据库中的索引的方式。避免了多次的IO操作,直接将索引表放在内存中,一个索引表项中记录了下一个物理块的位置。在内存中逐个查找,总比在磁盘中提供反复的打开文件等这么频繁的IO操作来的效率高。

Linux的文件存储方式

前面说的3个方法就是为了引出下面的正题,在Linux的存储管理中,最接近的方法就是上面3种中的最后一种,在Linux中,人家把所有的文件,目录等都抽象为1个概念,i-node节点,里面存放了文件的元数据和数据结点的索引。下面是张模拟图:

那为什么要有1级索引,2级,3级索引的东西呢,就是为了超大数据块文件设计的,如果你的文件足够小,1,,2个数据块就够了,直接通过i-node上的直接数据块指针就能搞定了。大的话就通过再次索引,这样一展开就可以存储了很多的数据块了。

时间: 2024-10-09 03:40:06

Linux文件系统存储方式的相关文章

Linux文件系统十问---深入理解文件存储方式

Linux文件系统十问 --关于文件系统,你知道吗? 文章来源:文件系统十问 关于文件系统,相信大家都不陌生.身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢.那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧: 1.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的? 2.touch一个新的空文件占用磁盘空间吗? 占用的话占用多少? 3.新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大? 4

Linux文件系统详解(文件系统层次、分类、存储结构、存储介质、文件节点inode)

从操作系统的角度详解Linux文件系统层次.文件系统分类.文件系统的存储结构.不同存储介质的区别(RAM.ROM.Flash).存储节点inode. 本文参考:http://blog.chinaunix.net/uid-8698570-id-1763151.html http://www.iteye.com/topic/816268 http://soft.chinabyte.com/os/142/12315142.shtml http://www.ibm.com/developerworks/

linux --> 文件系统十问

文件系统十问 参考:http://djt.qq.com/article/view/620 关于Linux文件系统相关的问题: 1.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的? 2.touch一个新的空文件占用磁盘空间吗? 占用的话占用多少? 3.新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大? 4.你知道文件名是记录在磁盘的什么地方吗? 5.文件名最长多长?受什么制约? 6.文件名太长了会影响系统性能吗?为什么会产生影响? 7.一个目录

linux文件系统学习总结

linux最优秀的特点在于它是多用户多任务的环境,而且对于linux来讲一切皆文件,提到文件这个概念就免不了提文件相关的权限与属性的概念,那相关文件的属性记录在硬盘的哪个地方呢?这就需要了解linux的文件系统是如何记录文件,如何读取文件. 大家都知道硬盘作为存储介质,如果要使用硬盘存储数据需要对硬盘进行分区,格式化之后才可以存储数据.那为什么要对硬盘进行分区呢?因为我们必须要告诉操作系统:"这块硬盘可以访问的区域是有A柱面到B柱面",只有这样,操作系统才能控制硬盘磁头去A~B范围内的

Vim,find,bash,Linux文件系统的特殊权限2015.8.30作业

一   Vim 1.vim的使用方法 1.1 三种模式化 编辑模式.输入模式.末行模式 1.2 模式转换 编辑模式 --> 输入模式: i:在当前光标所在字符的前面,转为输入模式 a:在当前光标所在字符的后面,转为输入模式 o:在当前光标所在行的下方,新建一行,并转为输入模式 I:在当前光标所在行的行首,转为输入模式 A:在当前光标所在行的行尾,转为输入模式 O:在当前光标所在行的上方,新建一行,并转为输入模式 输入模式 --> 编辑模式:ESC 编辑模式 --> 末行模式:: 末行模式

理解Linux文件系统之inode

很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口. 下面就是我的inode学习笔记,尽量保持简单. =================================== 理解inode 作者:阮一峰 一.inode是什么? 理解inode,要从文件储

Linux文件系统及操作

对于初次接触Linux的人来说,与window相比而言,最大的不同之处就是文件啦.一般的文件大家都是很容易理解的,例如:Word文档,txt文档这都属于常规文件吧,但是在Linux环境下,设备也成了文件,使得初次接触Linux的人来说或多有些困惑吧,不过慢慢就习惯了.所以说,在Linux中,一切都是文件.也就是说,在Linux中,所有的东西都可以被看成文件,所有的操作都可以归结到对文件的操作,这样就使得Linux操作系统可以像处理普通文件一样来使用所有东西(磁盘文件,串口,键盘,显示器,打印机以

linux 文件系统的管理 (硬盘) 工作原理

一.系统在初始化时如何识别硬盘 1.系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件就来载入系统,这些执行文件就是MBR里前面446bytes里的boot loader 程式,而后面的16X4的空间就是存储分区表信息的位置:如下图 2.在分区表中,主要储存了以下信息:(1)分区号,常见的分区号有以下几种:其它编号可以使用fdisk指令,再执行 l (小写L) 查看 0x5 (or 0xf) 扩展分区 0x82 Linux swap 0x83 Linux 0x8e Linux LVM

Linux 文件系统同步

同步就是将物理内存中dirty的页写入到磁盘中,保证磁盘和物理页之间的内容一致. 触发同步操作的时机: 1.周期性内核线程,扫描脏页,根据一定的规则选择脏页,将页写回到磁盘. 2.如果内核中的脏页过多,会触发同步 3.内核中其它组件触发同步操作(如sync.fsync和fdatasync等函数调用) 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行.当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列