一、知识点归纳以及自己最有收获的内容
1、知识点归纳
第11章 EXT2文件系统
1、EXT2文件系统数据结构
- 虚拟磁盘布局
Block#0:引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统
Block#1:超级块,用于容纳关于整个文件系统的信息
Block#2:块组描述符块,EXT2将磁盘块分成几个组,每组用一个块组描述符结构体描述
Block#8:块位图,用来表示某种项的位序列
Block#9:索引节点位图,用来代表一个文件的数据结构
Block#10:索引节点块,每个文件都用一个128字节的独特索引节点结构体表示
2、B10中i_block[15]数组包含指向文件磁盘块的指针,这些磁盘块有:
直接块:i_block[0]至i_block[11],指向直接磁盘块
间接块:i_block[12]指向一个包含256个块编号的磁盘块,每个快编号指向一个磁盘块
双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块
三重间接块:i_block[14]是三重间接块,对于小型EXT2文件系统可以忽略它。
3、数据块——紧跟在索引节点后面的是文件储存数据块
4、目录条目——目录包含dir_entry结构
5、EXT2文件系统数据结构
6、文件系统实现分为三个级别
- 第1级别实现了基本文件系统树,使用第1级别FS函数的用户命令程序有:
Mkdir /creat /mknod/rmdir/link/unlink/symlink/rm/ls/cd/pwd
- 第2级别实现了文件内容读/写函数,二级文件函数有:
1)open算法
2)lseek
3)close算法
- 第3级别实现了文件系统的挂载、卸载和文件保护
7、基本文件系统
type.h文件:包含EXT2文件系统的数据结构类型以及打开文件表、挂载表、PROC结构体和文件系统常数。
global.c文件:包含文件系统的全局变量。
util.c file:包含iget(dev,ino)函数,get_block/put_block函数等文件系统常用的使用程序函数。
mount-root.c文件:包含mount_root()函数,在系统初始化期间调用该函数来挂载根文件系统。
自己最有收获的内容
- 在网上搜索了inode表结构相关内容,加深了对相关概念的理解
二、问题与解决思路
什么情况会造成超级块损坏,会有什么样的后果?
- 解决方法:
网上找到相关文章:
https://blog.csdn.net/CFLCL_FLKF/article/details/125313525
当操作系统启动后,系统内核会把超级块中的内容复制到内存中,并周期性的利用内存里的最新内容去更新硬盘上的超级块中的内容。由于这个更新存在 一个时间差,为此内存中的超级块信息与硬盘中的超级块信息往往只有在开机与关机的某个特定时刻是同步的;而在其他时间都是不同步的。假设当操作系统意外当机或者因为断电而造成的意外事故时,内存中的超级块信息没有及时保存到硬盘中,此时文件系统的完整性就会受到破坏。轻者导致刚建立的丢失,重则的话会导致文件系统瘫痪。
超级块损坏的最大杀手仍然是意外断电或者其他原因的意外当机。因为此时内存中的超级块信息无法及时更新到硬盘中。为此就出现了内存与超级块中内容不一致的地方,从而会导致系统启动时的一系列故障。
三、实践内容与截图
实践1:通过mkfs创建虚拟磁盘,查看挂载与超级块
-
创建虚拟磁盘
-
查看挂载
-
查看超级块