Linux系统编程 第11章学习笔记
EXT2文件系统
磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件。文件系统的目的就是组织和管理磁盘中的文件。在 Linux 系统中,最长见的是 ext2 系列的文件系统。其早期版本为 ext2,后来又发展出 ext3 和 ext4。ext3 和 ext4 虽然对 ext2 进行了增强,但是其核心设计并没有发生变化,所以我们仍是以较老的 ext2 作为演示对象。
基本结构:
Block
对于 ext2 文件系统来说,硬盘分区首先被分割为一个一个的逻辑块(Block),每个 Block 就是实际用来存储数据的单元,大小相同,Block 按照0,1,2,3 的顺序进行编号,第一个 Block 的编号为 0。ext2 文件系统支持的 Block 的大小有 1024 字节、2048 字节和 4096 字节,Block 的大小在创建文件系统的时候可以通过参数指定,如果不指定,则会从 /etc/mke2fs.conf 文件中读取对应的值。原则上,Block 的大小与数量在格式化后就不能够发生改变了,每个 Block 内最多只会存放一个文件的数据(即不会出现两个文件的数据被放入同一个 Block 的情况),如果文件大小超过了一个 Block 的 size,则会占用多个 Block 来存放文件,如果文件小于一个 Block 的 size,则这个 Block 剩余的空间就浪费掉了。
文件系统中存储的最小单元是块(block),一个块的大小是在格式化时确定的。启动块(Boot Block)的大小为1KB,由PC标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能修改启动块。
启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。
Block#1超级块,用于容纳整个文件系统的信息
一些重要字段:
Block#2块组描述符块,EXT2将磁盘块分成几个组,每个组有8192个块,磁盘上大小为32K,每组用一个块组描述符结构体来描述
Block#8块位图
Block#9索引节点位图
Block#10索引(开始)节点
索引节点
直接块:i_block[0] Mi_block[ll],指向直接磁盘块」
间接块:i_block[12]指向一个包含256个块编号(对于1KB BLKSIZE)的磁盘块,每 个块编号指向一个磁盘块。
双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块。
三重间接块:i_block[14]是三重间接块。对于“小型” EXT2文件系统,可以忽略它。
数据块