了解Linux文件系统的知识-Linux文件系统

了解Linux文件系统的知识

在最新版本的Centos Linux系统已经采用xfs文件系统作为默认的文件系统,但是想详细了解Linux文件系统的知识还得从最传统的文件系统(filesystem)ext2说起。而文件系统都是建立在磁盘上面,因此磁盘(硬盘)的有关知识也应该了解清楚。在Linux系统中比较重要的有关文件系统的知识就是inode(i节点)、数据区块(block)以及超级区块(superblock)等相关的文件系统知识。

㈠磁盘的物理组成

一个物理磁盘的组成主要有圆形的碟片(数据存放的地方,一般现在的磁盘都由很多碟片所组成),磁头(磁头跟机械臂相连,通过它读取碟片上的数据),旋转马达(跟碟片相连带动碟片一起运动以方便磁头读取在碟片上的数据),物理磁盘如图3-1所示。

了解Linux文件系统的知识

对于碟片上的内容我们是这样定义的:

扇区(Sector)为最小的物理存储单位,并且会根据设计的不同,扇区的容量主要有512B和4KB两种格式;

②柱面(Cylinder),由扇区组成的一个圆,早期的分区以柱面为单位,现在一般都是以扇区为单位,每一个扇区都有一个号码标记。

目前的分区格式主要有两种:MBR分区表和GPT分区表;在MBR分区表中最重要的为第1扇区的内容,在MBR的第1扇区内有如下的内容:

主引导记录(Master boot record,简称MBR),分区表(partition table),其中主引导记录占用446个字节,而分区表占用64个字节,2个校验字节,共512字节。这种分区模式只支持小于2TB容量的磁盘。

GPT分区表支持的容量多达2TB以上,并且分区数较多。

在Linux系统中设备都是由文件名来表示,磁盘的名字一般为/dev/sd[a-p]的格式,第1个磁盘的名字为/dev/sda,而如果对其进行分区操作,那么分区后的文件名则为/dev/sd[1-128],如果仅分为2个分区则有两个文件名/dev/sda1和/dev/sda2等。

如果是虚拟磁盘则文件名为/dev/vd[a-p]等格式,如果是磁盘软阵列其文件名则为/dev/md[0-128],如果做成LVM磁盘阵列则为/dev/VGNAME/LVNAME,其中VGNAME为卷组名,LVNAME为逻辑卷名。

特别说明现在的磁盘容量都很大,大于2TB以上一般应该采用GPT格式的分区表,但是磁盘容量比较少也可以使用MBR分区表,建议采用GPT格式的分区表。

㈡文件系统的特性

磁盘分区完成一般都要对磁盘分区进行格式化(format)操作,格式化的过程就是创建文件系统(filesystem)的过程(把物理磁盘分成一块块的数据区块)。而每一种文件系统它管理的文件属性及权限设置又是不相同的,因此保存数据的方式及保护措施也不相同。并且不同的操作系统它们的文件系统格式有可能是不相通的,不能相互进行访问操作等,如Linux系统的文件系统就不与windiws文件系统相通,但也有可能支持同属性的文件系统存在,也可以进行交流数据。

在Linux系统中传统的文件系统是ext2(Linux second extended file system,ext2fs),传统的文件系统一般都是一个分区格式化为一个文件系统,也就是一个分区就是一个文件系统,但是现在出现了很多新的技术,也可以将一个分区格式化为多个文件系统,或者把几个分区合并成一个文件系统(LVM,RAID)等,因此,现在我们多采用一个能挂载数据的点称为一个文件系统而不是一个分区

文件系统与操作系统有关,一般情况下,操作系统的文件除了保存实际的数据内容之外,通常都会包含有许多的属性(如权限,文件的拥有者、同组用户、文件的一些时间参数等)。文件系统通常会把文件内容与文件的属性分别存放到不同的数据区块中,在Linux系统中权限与属性放置到inode(i节点)中,实际的数据保存在数据区块中,除此之外,会使用一个超级区块(Super block)来保存整个文件系统的相关信息,包括inode数、整个磁盘的数据区块的总量,已经使用的数据区块,剩余的数据区块等信息

区块与inode的相关知识:

在Linux系统中,每个i节点与区块都有编号(Number),超级区块记录的都是文件系统的整体信息,如上所示。i节点(inode)记录文件的属性,一个文件占用一个inode,并记录此文件的数据区块位置(号码),一般的区块就是保存数据的实际内容,如果文件很大占用一个区块的容量以上(一般都是占用多个区块的内容),也就是说一个文件的容量如果超过区块的容量会使用多个区块来保存文件的内容。

当我们对磁盘进行格式化操作时,分配的区块跟磁盘容量有关也跟设置的区块的大小有关,区块分得大所能储存的文件数相对来说就少,这是因为每一个文件都会占用一个区块,而文件太大会占用多个区块。如图3-2所示。

了解Linux文件系统的知识

从上所知每一个i节点(inode)与数据区块都会有编号,而每一个文件都会占用一个i节点(inode)如果是大文件还会占用多个区块,而inode除了保存文件的属性之外,还保存(记录)数据所在的区块号码,因此,只要能找到i节点(inode)就能够找到我们所需要的文件实际数据了,采用i节点来记录文件所在的数据区块号码提高了文件的访问效率,i节点就像是文件的检索数据库。不同的文件系统由于工作的方式不同,读取文件的效率也是不相同的。现在来比较一下Linux系统的ext2文件系统读取数据方式与windows系统里的FAT文件系统读取数据方式的不同。Linux读取数据的方式我们称为索引式文件系统(indexed allocation),而FAT读取数据的方式我们称为连锁式。如图3-3所示。

了解Linux文件系统的知识

如图3-3所示,对于采用索引方式的文件系统,找文件时先找到i节点,因为i节点保存了这个文件所在的所有区块号码,从而同时直接找到文件储存的所有数据,效率很高。而FAT文件系统的每一个区块都会保存前一区块的号码,例如,这个文件是保存在数据区块2、7、10、14这4个区块中,它的动作是依次2→7→10→14写入区块,读取时也是一个一个区块的读取,效率相对来说说慢,这是因为当时间久了之后,数据会比较离散,有可能一个文件中的数据保存有在最前面的磁盘区块,也有最后面的区块,区块之间距离相差好大,磁盘在读取时,磁头移动范围很大,会造成数据读取变慢,而索引文件系统它会直接找到所需的文件数据,基本不会出现这种问题,而FAT文件系统就不一样了,文件的读取是依次读取,这是因为在每个区块中都保存有前一个区块的号码,因此,FAT文件系统通过碎片整理后可以提高文件的访问速度。

推荐阅读