一、EXT2文件系统文件组织形式
EXT2文件系统是Linux系统中广泛使用的文件系统,该文件系统是一种索引式文件系统,它将分区分为inode和block,它会给每个文件分配一个inode,inode中存储文件的一些属性信息,block中存储文件真正的内容,一个block的大小有1k、4k等大小,一个block中只能存储一个文件,比如现在有一个文件占据了一个block的1B大小,那么这个block剩余的大小也无法分配给其他文件使用。大体存储结构如下图所示:
因为一个分区可能很大,可能会分成很多很多个block,为了便于管理,系统将这些block分成多个block组,每个block组中存储当前组的信息和当前block组的block,如下图:
每个分区都有如下几个项目:
引导扇区:每个分区前的引导扇区super block:超级块,它记录的是整个文件系统的信息,文件系统的类型,inode数量,block数量等,每个分区的super block是相同的
文件系统描述:描述每个block group 的开始与结束的block号码。
块对应表(block bitmap):用bit位记录了每一个block目前的状态,如果有数据就置为1,没有数据置为0。如果需要分配block,那么就找目前状态为0的。
inode 对应表(inode bitmap):和块对应表相似,记录的是inode的分配和未分配的号码。
inode table:详细记录了每一个inode的信息。
data block:详细记录文件数据的地方,每一个block都有block号码。
二、inode table内容
inode table中记录了一个inode中的详细内容,因为inode中记录了除文件名以外的所有文件属性。但是一个inode节点所占的磁盘空间ue不能太大,那么它到底是怎样存储的呢?请看下图:
图中DB代表数据、IPB代表中间节点(数字代表级数)
这张图描述了一个inode节点中存储的信息。在最上边的其他信息里存储了文件除了文件名和文件具体存放的block号以外的其他信息。其余的信息由15个指针指向inode或者相应的二级节点。
其中0-11这十二个指针是直接指向存放数据的block块中,12是一个一级索引,直接指向的是一个block,其中存放的是指向文件block块的指针。13是一个二级索引,13指向一个一级索引,其中的一级索引又指向某干个直接索引。14是一个三级索引,与二级索引类似。
采用三级索引机制就可以利用有限的inode节点索引到更大的文件,比如一个block的大小是4k,一个指针的大小是4B,那么采用三级索引机制的一个inode节点最大可以索引到的文件大小是:1024 × 1024 × 1024 × 4096字节(约4TB)
三、硬链接和软链接的区别
硬链接和软链接在其他地方可能不太好说明,在有了inode和block的知识之后理解起来硬链接和软链接就简单的多了。Linux下的文件名和文件信息是分开存储的,在系统内部是通过inode号唯一标识一个文件的。硬链接其实就是给这个inode(这个文件)再起一个文件名。硬链接通过文件名删除其中的一个文件另外的文件不受影响。软链接是另外的一个文件,这个文件中的信息是一个指向路径和文件名称的特殊文件。软链接删除指向的文件则链接文件失效(查看软链接本身的内容用readlink命令)。