文件系统的作用就是怎么管理磁盘上存储的文件,包括增删改查等,本文主要介绍ext2文件系统
1.ext2文件系统的整体布局
文件系统管理的单元是数据块,每个块的大小是一样的;上图中的启动块 Boot Block中存储的是磁盘分区信息和启动信息,不属于ext2文件系统,启动块之后才是文件系统的开始;ext2文件系统将整个磁盘分区划分成若干个同样大小的块组。
- 超级块(Super Block)
描述整个磁盘分区的信息,例如数据块的大小,文件系统版本号等;超级块在每个块组都有一份拷贝。
- 块组描述符表(GDT, Group Descriptor Table)
由很多块组描述符组成,分区有多少块组就有多少块组描述符;块组描述符中存储的是关于一个块组的描述信息,例如,这个块组的从哪里开始是inode表,哪里开始是数据块。
- 块位图(Block Bitmap)
本身占用一个块,其中每个Bit表示某一个块是否被使用,1表示被使用,0表示处于空闲
- inode位图(inode Bitmap)
和块位图一样,本身占用一个块;其中每一个Bit表示一个inode是否可用。
- inode表(inode Table)
由很多inode构成,inode中的主要信息有文件的大小、权限、位置和连接数等。
2.软链接和硬链接
- 硬链接
硬链接是两个文件名共享同一个inode,类似与智能指针
shared_ptr
共享同一个计数器,每增加一个硬链接,inode硬链接数就增加1.删除一个硬链接使链接数减1;当计数器递减为0时,系统会回收这个inode和其所管理的数据块。
- 软链接
软链接拥有自己的inode,该inode中保存有软链接所指向文件的路径名。(如果路径名比较长,会将路径名保存在数据块中)。软链接类似于
weak_ptr
不会增加inode的链接数。
参考资料
- Linux C编程一站式学习
- 理解inode