Linux中文件系统简介

一块新磁盘投入使用时,须要进行分区和格式化。磁盘的分区能够当作是一个“物理”的操做。而分区完成后还须要进行格式化,格式化就是将磁盘定义为合适的文件系统,以便操做系统能够理解。(通常状况下,一个分区是一个单独的文件系统,但也不必定。)node

每一个文件都有数据信息,也有文件自己的属性信息(如全部者、所属的组、建立时间、权限等)。在文件系统的设定里,数据和属性是放在不一样的位置的。ide

通常的文件系统里都包括block(主要是存放真正的文件内容,各block有不一样的编号,从0开始编号)、inode(存放文件都放在哪些个block里,同时还有权限等属性信息)、superblock(存放文件系统已用了多少、inode编号用了多少、block用了多少等信息)。操作系统

若是一个分区太大的话,通常还会将之分红不一样的block group,每一个group里有本身的inode/block/superblock信息(每一个分区的第一个扇区都是boot sector,而一块磁盘的第一个分区放的是MBR)。blog

严格来讲,每个block group都包含如下6个部分:ip

Data Block此部分放置的是文件的内容(而不是属性)。Linux支持每个Block能够为1k、2k或4k的大小,能够根据本身的系统的状况在格式化的时候选择不一样的block大小。每个block都有编号。get

Inode Table此部分放置的文件的属性,包括权限、几个不一样的时间、全部者、所属组、大小以及该文件所对应的block的编号。须要注意的是,每一个inode大小固定为128byte,而每一个文件都只会占用一个inode。系统在读取的时候,会先找到inode,分析权限,权限合适时,才会去找block中的数据。it

一个文件只会占用一个inode。而一个文件根据内容的大小,能够放在一个block里或分放在多个block里。但一个block最多能放一个文件,也就是说,若是block的大小为4k,但文件才1k,那么该block会浪费3k的空间。io

承上,一个inode为128byte,而inode每记录一个block号码须要用掉4byte。照这样计算,一个inode最多只能记录32个block号码,也就是说,文件最大只能是4k*32=128k,更况且这128byte里除了记录号码还要记录文件的属性信息。那么对于大文件,系统采用了将inode区域划分为权限区、12个直接记录区、一个间接记录区、一个双间接记录区和一个三间接记录区的方法来解决。table

直接记录区就是直接写入的block号码。而间接记录区是记录了一个block号码,此block并无写文件数据,而写的也是block号码(至关于从block区域‘借’来了block看成了inode)。此时,假设当前文件系统的block大小为1k,那么此1k大小的block就能够写入1k/4byte=256笔记录,便可以再对应256个block。同理,双间接,能够再对应256*256个block,三间接能够对应256*256*256个block。这样的话,使用12个直接、1个间接、1个双间接、1个三间接,对于block大小为1k的文件系统来讲,就能最多表示16GB的文件了。class

SuperBlock存放的是该文件系统总体状况,包括block与inode的总量、未使用与已使用的量等。(SuperBlock可能并非每一个block group都有,可能就第一个block group才有)。

Filesystem Discription是对整个文件系统的描述,包括每一个block group的开始号码、结束号码等。

block bitmap记录的是哪些block已使用,哪些未使用。

inode bitmap记录的是哪些inode已使用,哪些未使用。

block bitmap和inode bitmap记录都是使用或未使用的具体编号,而superblock里记录的只是一个总量和使用率等整体概念。

inode table存放的是权限等属性,而block存放的真实的数据,这两块叫作数据存放区;而inode bitmap存放的是当前这个分区里有哪些inode还未用,block bitmap里存放的是有哪些block还未用,superblock里存放的整个分区的使用状况等,故这三个区域能够叫作数据中介区。

格式化的时候,block都是从0开始编号。而且后续对文件系统的全部描述都是根据此编号进行的。在一个block group中,假设inode tabe占用了34--44这11个block,因为每一个inode是128字节,而每一个block假设是4k,那么此11个block里能够存储4k/128字节=32个inode。

df命令,即disk free,是用来查看磁盘的使用状况的,也能够列出当前系统的挂载状况;dumpe2fs(dump ext2/ext3 file system的简写)能够看出当前系统的inode、block等信息。

当新建一个目录时,系统会给该目录分配一个inode,并给该目录分配一个block。inode会记录该目录的权限等属性信息,并记录inode对应的block编号。而该block里会记录该目录下的文件信息,如文件名和文件占用的inode信息。若是文件太多,而1个block盛不下的话,系统还会自动分配多个block给目录使用。

这样的话,当咱们查找一个文件时,先找到所属目录的inode,而后找到目录的block,而后找到文件的inode,查看权限符合时,才去查找文件inode所记录的block编号,找到文件的block。须要注意的是,文件的inode里面并不记录文件名,文件名是在所属目录的block里记录的。

新建一个文件的时候,会自动分配一个inode,同时会根据文件的大小来给它分配block数量。

每一个filesystem的顶层inode编号都是2,所以,对于Linux系统中不一样的挂载点来讲,当ls -id的时候,会发现这几个目录的inode编号都是2.(具体有几个挂载点,是在安装系统时进行分区时设定的)。

clip_image001

相关文章
相关标签/搜索