Linux 最传统的磁盘文件系统使用的是 EXT2 ,磁盘空间被分成几个区,分区的概念类似windows下的C盘D盘等。
Block:
文件系统的最小存储单元是Block
在 EXT2 文件系统中,磁盘的整个空间是以块为单位被管理的,
块也是被分配来存储数据的最小单位,一个文件即使只有 1 字节,也会至少占用一个存储块。Block大小是在格式化时决定的。
Block Group:
EXT2文件系统会根据分区的大小划分为数个Block Group(块组)。而每个块组都有着相
同的结构组成。属于同一个文件的数据块存放在同一块组中。
块组的结构如下:

超级块:
存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
块组描述符:
包含每个块组的总体信息,如数据位图的块号、索引节点位图的块号、索引节点表的起始块号、空闲数据块和 inode 的个数等。
块位图(数据位图):
记录着数据块中哪个数据块已经被占用,哪个数据块没有被占用。
inode位图(索引位图):
每个bit表示索引节点表中的某个inode是否空闲可用。
索引节点表 :
存放多个inode
,每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
inode用来存放文件属性。如 文件大小,所有者,最近修改时间,以及文件数据在数据块中的位置等等(没有文件名)
。
数据块 :
存放文件内容。目录也是一个文件,通过目录文件也有inode,目录文件的inode中也存放了目录文件数据在数据块中的位置,目录下的文件inode和文件名的映射关系就存放在一部分数据块中。
Linux下新建一个文件的过程:
1.通过inode位图分配给文件一个空闲的inode并且把
文件属性等信息记录到其中。
2.分配数据块存储文件数据,使用的数据块indoe会记录下来,
块位图的内容也随之改变。
3.添加文件名和inode的映射关系到目录文件中。
删除文件的过程:
删除文件时,通过位图把文件对应的indo和数据块置为无效即可。
硬链接:
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是Linux系统允许多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容。但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接:
ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
注意"."和".."对目录硬链接数的影响 任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),因为子目录有 .. 当前目录有 . 他们都是硬链接。
软链接:
文件A和文件B的inode号码不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错。这是软链接与硬链接最大的不同。
ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录
使用 命令 ls -li 查看当前目录下文件信息

各列的含义:
文件inode 文件权限 硬链接数 文件所有者 所属组 文件大小 最后修改时间 文件名