目录
ext2文件系统
我们想要在硬盘上储⽂件,必须先把硬盘格式化为某种格式的⽂件系统,才能存储⽂件。⽂件系统的⽬的就是组织和管理硬盘中的⽂件。没有它就不能访问硬盘里的文件
ext2将整个分区划分为同样大小的块组(Block Group),只要能管理好一个块组,就能管理整个分区,也就能管理好整个磁盘

上图中启动块(Boot Block/Sector)的⼤⼩是确定的,为1KB,由PC标准规定,⽤来存储磁盘分区信息和启动信息,任何⽂件系统都不能修改启动块。启动块之后才是ext2⽂件系统的开始。
超级块 (Super Block)
存放整个文件系统的结构信息,主要有block和inode的总量,未使用的inode和block的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间等其他相关信息
由于超级块对于文件系统非常重要,为了防止损坏导致文件系统无法使用,有多个超级块在Block Group中进行备份
GDT (Group Descriptor Table)
块组描述符表,描述块组属性信息,分区有多少块组就有多少个块组描述符,每个块组描述符描述一个块组的属性信息,如在这个块组中从哪里开始是inode Table,哪里开始是Data Blocks,空闲inode和数据块还有多少个等等。
struct ext2_group_desc
{
__le32 bg_block_bitmap;
/* Blocks bitmap block */
__le32 bg_inode_bitmap;
/* Inodes bitmap */
__le32 bg_inode_table;
/* Inodes table block*/
__le16 bg_free_blocks_count;
/* Free blocks count */
__le16 bg_free_inodes_count;
/* Free inodes count */
__le16 bg_used_dirs_count; /* Directories count */
__le16 bg_pad;
__le32 bg_reserved[3];
};
块位图 (Block Bitmap)
Block Bitmap中记录着Data Block中哪个数据块已经被占⽤,哪个数据块没有被占⽤
inode位图 (Inode Bitmap)
每个bit表示一个inode是否空闲可用
Inode Table
存放了一系列inode,每个inode中的字段都是关于文件的属性
特别指出,inode记录了文件的数据都存放在哪些块内,也就是这个文件所使用的块号
每个inode的编号以分区为单位,不可跨分区
Data Block
数据区:存放⽂件内容,也就是⼀个⼀个的Block。根据不同的⽂件类型有以下⼏种情况:
对于普通⽂件,⽂件的数据存储在数据块中。
对于⽬录,该⽬录下的所有⽂件名和⽬录名存储在所在⽬录的数据块中,除了⽂件名外,ls -l命令
看到的其它信息保存在该⽂件的inode中。也就是说目录的数据是inode号和文件名的映射关系
Block 号按照分区划分,不可跨分区
现在,来思考一下,如何根据inode号来查找某个文件的内容和属性,inode号可以确定位于哪个分组,也就是确定位于哪个Block Group
首先,查看Inode Bitmap,该inode号是否有效,若有效,则查看inode的字段,属性直接从inode的字段读出,内容存放在哪些块也被记录在inode中,也可以查找到内容
再思考一下,创建新文件,创建新文件需要分配inode号
首先要存储属性,根据Inode Bitmap查找未被使用的的inode号,把文件属性记录进去,然后修改Inode Bitmap对应位置为1,注意修改操作是操作系统在内存中完成的,把一整个数据块读入内存进行操作
再存储数据,根据数据大小来看需要几个数据块,将数据块号记录到inode中
再在这个文件所属的目录的数据中,添加文件名和inode号的映射关系
inode和datablock映射
inode内部存在
__le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
,EXT2_N_BLOCKS =15
就是⽤来进⾏inode和block映射的

inode中有12个指针来直接指向数据块,一个数据块若为 4KB,12个就有48KB
一级间接块索引表指针指向了一个数据块,这个数据块存的全是其他存放文件内容的数据块,假设数据块号占 4字节,一个数据块可以存1024个其他数据块号,这些数据块存的都是文件内容,这样,文件大小被扩展到了MB级别
二级间接块索引表指针指向了一个数据块,这个数据块存的全是一级间接块索引指针,这样文件就被扩展到了GB级别
三级同理
块号是可以跨组的,也就是可以存储其他Block Group里的Data Block
&spm=1001.2101.3001.5002&articleId=149692751&d=1&t=3&u=534ef4f868984e2f9911419f277675bc)
3364

被折叠的 条评论
为什么被折叠?



