Linux常见文件系统ext2(linux second extended file system)
Linux文件系统包含三个组成部分:inode、data block、super block。
super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量、以及文件系统的格式与相关信息等
inode:记录文件的属性,一个文件占用一个inode,保存此文件的数据所在的block编号
data block:实际记录文件的内容,若文件过大,会占用多个block
启动扇区
|
block group1
|
block group2
|
block group3
|
block groupn
|
每个block group组织图
super block |
文件系统描述(配置信息)(file system description)
|
块对应表(blcok bitmap) |
inode对应表(inode bitmap)
|
inode table |
data block
|
每一个data block只能够放置一个文件的数据。
在Ext2文件系统中所支持的data block大小有1KB、2KB、4KB三种。
inode包含的数据:
文件的访问模式、文件的所有者和组、文件的大小、ctime、atime、mtime、定义文件特性的标识,如SetUID等、文件真正内容的指向。
每个inode大小均固定为128bytes。
每个文件都只占用一个inode。
一个data block占用inode的4byte。
data block大小
|
1KB
|
2KB
|
4KB
|
最大单一文件限制
|
16GB
|
256GB
|
2TB |
最大文件系统总容量 |
2TB
|
8TB
|
16TB
|
一个inode所能记录的data block数量是有限的,所以系统需要借助data block记录data block数量。
一个系统将一个inode分为12个直接、一个间接、一个双间接、一个三间接记录区。
直接:inode直接记录data block标号 。以1KB为例,12*1KB
间接:inode记录一个data block编号,data block记录更多的data block。以1KB为例,(1KB/4B)*1KB = 256KB
双间接:借助两层data block记录更多的data block。以1KB为例,(1KB/4B)*(1KB/4B)*1KB
三间接:借助三层data block记录更多的data block。以1KB为例,(1KB/4B)*(1KB/4B)*(1KB/4B)*1KB
一个文件系统应该仅有一个super block,在第一个block group中。其他的block group中也可能含有super block,主要作为第一个block group中的super block的备份。
file system description:描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间。
block bitmap:记录block的使用状态。
inode bitmap:记录使用和未使用的inode号码。
对于目录:ext2会分配一个inode和至少一个data block给一个目录,其中inode记录该目录的相关权限和属性,并记录分配到的那块data block号码;而data block则记录在这个目录下的文件名和该文件名占用的inode 号码。
对于文件:ext2会分配一个inode和适合这个文件大小的data block数量给该文件。
在ext2下创建一个文件,系统的行为:
1、先确定用户对于想要增加文件的目录是否具有w和x的权限,如果有才能添加;
2、根据inode bitmap找到没有使用的inode号码,并将新文件的权限、属性写入;
3、根据block bitmap找到没有使用的block号码,并将实际数据写入block中,同时更新inode,使其记录存储数据的block;
4、同步更新inode bitmap和block bitmap,根据刚才使用的indoe和block,并更新super block的内容。
不管目录还是文件,都会有对应的inode和data block,inode记载权限相关;目录的data block记录目录下的文件名和该文件所占用的inode编号;对于文件而言,data block记录的是文件的内容。
读取文件的流程:
1、通过挂载点获取到根目录的inode,判断权限
2、读取根目录data block找到对应目录的inode和data block号码;
3、先读取目录的inode判断权限,如果有权限再读取data block内容;
4、重复2-3的内容,直到最后的文件和目录
一个文件,如果数据没有更改过,那么该数据就是clean的,否则是dirty的。
df:列出文件系统的整体磁盘使用量
du:评估文件系统的磁盘使用量
df [-ahikHTm] [目录或文件名]
-a:列出所有文件系统,包括系统特有的/proc等文件系统
-h:以GB、MB、KB等格式自行显示,单位系统自动决定
-i:不用硬盘容量,而已inode的数量来显示
-k:以KB为单位显示
-m:以MB为单位显示
-H:以1000位进位单位,而不是1024
-T:显示该分区的文件系统名称
du [-ahsSkm] [文件或目录名称]
-a:列出制定目录下的所有文件的大小,默认仅显示目录大小
-h:以GB、MB、KB等格式自行显示,单位系统自动决定
-s:仅列出总量,而不列出目录下每个目录各自的容量
-S:仅统计一层目录,而不统计子目录
-k:以KB为单位显示
-m:以MB为单位显示
df适合查看文件系统所占的大小和剩余容量,du适合查看目录和文件容量。
硬连接和符号连接
硬连接示意图
ln 源文件名 硬连接文件名
硬连接的限制:1、不能跨文件系统;2、不能连接到目录
符号连接示意图
ln -s 源文件名 符号连接文件名
当源文件删除后,符号连接也就打不开了。
符号连接的data block中存储的是源文件的完整路径。