【Linux技术】磁盘的物理组织,深入理解文件系统
磁盘即是硬盘,由许多块盘片(盘面)组成,每个盘片的上下两面都涂有磁粉,磁化后可以存储信息数据。每个盘片的上下两面都安装有磁头,磁头被安装在梳状的可以做直线运动的小车上以便寻道,每个盘面被格式化成有若干条磁道,这些磁道是同心圆。并规定最外面的磁道是0磁道,次外层是1磁道,每个磁道又被分成若干个扇区,并被排号,扇区是CPU对磁盘I/O操作时能够读取和写入的最小单位,通常,一个扇区可以储存512B的二进制信息位,每个盘面上的同号磁道组成一个柱面(磁柱)。也就是说每个盘面的0号磁道组成0号柱面,所有的1号磁道组成1号柱面,等等。通过下面的图,可以了解
在Linux操作系统中,内核采用的方法是把物理磁盘抽像为逻辑磁盘管理文件系统,所谓逻辑磁盘是把物理磁盘按照磁头号,磁道号,扇区号,以及盘面号划分成磁盘块的线性数组,也叫线性序列,如:把1号盘面的0号磁道的0号扇区定义为0号磁盘块,一般扇区数是2的整次幂。显然,当把实际的磁盘看成是磁盘块的线性数组时,就把物理磁盘存储数据的实际地址(即磁道号,扇区号以及盘面号)隐藏起来,因此呈现在系统高层面前的已经不是物理磁盘,而是一个经过加以后的逻辑磁盘。逻辑磁盘比物理硬盘的结构要简单的多,当系统执行磁盘I/O操作时,系统给出试图访问的逻辑磁盘块号,由设备驱动程序根据该块号计算出物理磁盘的磁道号,磁头号以及扇区号,然后启动硬盘把磁头向前或向后移动到相应的柱面,这便是所谓的寻道。寻道是磁盘I/O操作中最耗时的一个操作。一量磁头找到磁道,并且相应的扇区转到磁头下面,数据传输就开始。
而文件是一个具有符号的一组相关联元素的有序序列,文件可以包含范围很广的内容。系统和用户都可以将具有一定独立功能的程序模块,一组数据或一组文字命名为一个文件。在计算机里看见的东西都叫文件,文件是以单个名称在计算朵上存储的信息集合,文件可以是文本文档,图片,程序等,文件通常有三个字母的扩展名,用于指示文件类型(windows下)。
文件系统指文件存在的物理空间。在linux系统中,每个分区是一个文件系统,都有自己的目录层次。linux的最重要的特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其他操作系统共存。由于系统已将linux文件系统的所有细节进行了转换,所以linux核心的其它部分及系统中运行的程序将年到统一的文件系统。
大部分的linux文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块(superblock),i节点(inode),数据块(data block),目录块(directory block)和间接块(indirection block)。超级块包括文件系统的总体信息,比如大小。i节点包括除了名称外的一个文件的所有信息,而名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件数据。i节点中只有少量数据块的空间,如果需要更多,会动态分配指向数据块的指针空间,这些动态分配的块是间接块,为了找到数据,这名子指出它必须先找到间接块号码。
linux文件系统分为3个部分,第一部分是Virtual File System(VFS),它是linux文件系统对外的接口,任何要使用文件系统的程序都必须经由这层接口来使用它,另外两部分是属于文件系统的内部实现,分别是Cache和真正的文件系统(如Ext3/VFAT等)
虚拟文件系统是linux内核中的一个软件抽象层,它一方面用于给用户空间的程序提供文件系统接口,另一方面还提供了内核中的一个抽象功能,它通过一些数据结构及其方法向实际的文件系统提供接口,实现不同文件系统在linux中共存。系统中所有文件系统不但依赖于VFS共存,同时也要依靠VFS协同工作
为了能支持各种文件系统,VFS定义了所有文件系统都必须支持基本的/概念上的接口和数据结构。例如,超级块/节点/文件操作函数入口等。换句话说,一个实际的文件系统要想被linux支持,就必须提供一个符合VFS标准的接口,这样才能与VFS协同工作。VFS不是实际的操作系统,它只是一种转换机制,仅存在于内存中,不存在于任何外存空间。下图所示为VFS在内核中与实际的文件系统的协同关系
本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1171702