Linux 文件系统概述
文件系统(file system)表示存储在计算机上的文件和目录的数据结构,也可以用于存储文件的分区或磁盘,操作系统通过文件系统可以方便地查寻和访问其中所包含的磁盘块。在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存。
1 文件系统的工作原理
Linux系统中的每个文件都是通过分配文件块的方式把数据存储在存储设备中,而分配信息本身也存储在磁盘上。不同的文件系统用不同的方法分配和读取文件块,例如DOS和Windows的FAT文件系统。
在Linux系统中,有两种常用的文件系统的分配策略:块分配(block allocation)和扩展分配(extent allocation)。块分配当文件变大的时候每一次都为这个文件分配磁盘空间,而扩展分配则是当某个文件的磁盘空间不够的时候,一次性为它分配一连串连续的块。
1.块分配
块分配机制提供了一个灵活而高效的文件块分配策略,在传统的Linux文件系统被广泛应用。磁盘上的文件块根据需要分配给文件,这样可以减少存储空间的浪费。例如,当一个文件慢慢变大的时候,就会造成文件中文件块的不连续。使得读取一个文件的时候有可能要随机而不是连续地读取文件块。这样的效率非常低,而且还增加了过多的磁盘寻道时间
可以通过优化文件块的分配策略(尽可能为文件分配连续的块)来避免文件块的随机分配。通过使用聪明的块分配策略,可以实现块的连续分配。这样就可以减少磁盘的寻道时间。
每一次当文件扩展的时候,块分配的算法就要写入一些关于新分配的块所在位置的信息。如果每一次文件扩展的时候只增加一个块,那么就需要很多额外的磁盘I/O用来写入文件块的结构信息。文件块的结构信息也就是meta-data,meta-data总是一起同时写入存储设备的,它的这种机制显著地降低整个文件系统的性能。使得改变文件大小的操作要等到所有的meta-data的操作都完成之后才能进行。
2.扩展分配
相对块分配而言,扩展分配则是当某个文件的磁盘空间不足时,一次性为文件分配很多连续
的块。当创建一个文件的时候,很多文件块同时被分配;当文件扩展的时候,也一次分配很多块。文件系统的meta-data在文件创建的时候被写入,当文件的大小没有超过所有已分配的文件块的大小,就不用写入meta-data(直到需要再分配文件块的时候)。这样做,不但可以优化磁盘寻道的方式,也可以成组地分配块,有利于一次写一大批数据到存储设备中,这样就可以减少设备写数据的时间。
同时,基于扩展分配的文件系统在读取顺序文件的时候有很好的性能,因为文件块都是成组连续分配的。但是,如果I/O操作是随机的,基于扩展分配的文件系统的好处就非常有限了。例如,当需要连续地读取一个基于扩展分配的文件的时候,只要读起始块号和文件长度就行了。然后,就可以连续地读取所有的文件块了,这样在顺序读取文件的时候,读meta-data的开销就很小。反之,如果随机地读取文件,用户就要先查每一个所需块的块地址,然后再读取块的内容,这样就和块分配方式很象了。
2 文件记录形式
Linux文件系统使用索引节点(inode)来记录文件信息,索引节点作用类似于Windows操作系统中文件分配表。索引节点是一种数据结构,它包含了一个文件的长度、创建及修改时间
、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一的元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。linux怎么读取windows文件
Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。对于一个文件来说,有一个索引节点号与之对应;而对于一个索引节点号,却可以有对应多个文件名。因此,在磁盘上的同一个文件可以通过不同的路径去访问它,这就引入了连接的概念。ln命令可以对一个已经存在的文件再建立一个新的连接,而不用复制文件的内容。连接有软连接和硬连接之分,其中软连接又叫符号连接。
● 硬连接 原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
● 符号连接 用ln -s命令建立文件的符号连接。符号连接是Linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似Windows下的快捷方式。可以删除原有
的文件而保存连接文件,没有防止误删除功能。
3 文件系统类型
文件系统具有不同的格式,它们决定了信息如何被存储为文件和目录,这些格式就被称为文件系统类型(file system types)。随着Linux的不断发展,它所支持的文件系统格式也在迅速扩充。特别是Linux 2.4内核正式推出后,出现了大量新的文件系统,其中包括日志文件系统ext3、ReiserFS、XFSJFS和其它文件系统,到目前最新版本内核的Linux支持更多文件系统,常见的有如下所示:
● ext2 早期Linux中常用的文件系统。
● ext3 ext2的升级版,带日志功能。
● RAMFS 内存文件系统,速度很快。
● NFS 网络文件系统,由SUN发明,主要用于远程文件共享
● MSDOS ms-dos文件系统。
● VFAT Windows95/98操作系统采用的文件系统。
● FAT Windows XP操作系统采用的文件系统。
● NTFS Windows NT/XP操作系统采用的文件系统。
● HPFS OS/2操作系统采用的文件系统。
● PROC 虚拟的进程文件系统
● ISO9660 大部份光盘所用的文件系统
● ufsSun OS所用的文件系统
● HFS Macintosh机采用的文件系统
● NCPFS Novell服务器所采用的文件系统
● SMBFS Samba的共享文件系统
● XFS 由SGI开发的先进的日志文件系统,支持超大容量文件
● JFS IBM的AIX使用的日志文件系统
● ReiserFS 基于平衡树结构的文件系统。
4 虚拟文件系统VFS
上面介绍了Linux支持的多种文件系统,其中ex3是当前Linux版本默认的文件系统。Linux支持的所有文件系统称为逻辑文件系统,而Linux在传统的逻辑文件系统的基础上增加了一个虚拟文件系统(Virtual File System,VFS)的接口层。
虚拟文件系统(VFS)位于文件系统的最上层,管理各种逻辑文件系统,并可以屏蔽它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口,使得不同的逻辑文件系统按照同样的模式呈现在使用者面前。就用户使用角度而言,觉察不到逻辑文件系统的差异,可以使用同样的命令或操作来管理不同逻辑文件系统下的文件,图4-1演示了VFS的层次结构。
图4-1 虚拟文件系统
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论