文件系统---认识ext2文件系统

来源:互联网 发布:租赁网络平台 编辑:程序博客网 时间:2024/04/24 00:46

磁盘的物理组成:

  • 扇区为最小的物理存储单位,每个扇区为512字节。
  • 将扇区组成一个圆,那就是柱面,柱面是分区的最小单位。
  • 第一个扇区很重要,里面有硬盘主引导记录(Masterbootrecord,MBR)及分区表,其中MBR占有446字节,分区表占有64字节。
  • 各种接口的磁盘在Linux中的文件名,①/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名;②/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名。

磁盘分区:

磁盘分区是告诉操作系统“我这块磁盘在此分区可以访问的区域是A柱面到B柱面之间的块”,这样操作系统就知道它可以在所指定的快内进行文件数据的读、写、查找等操作。磁盘分区即指定分区的起始与结束柱面。
而指定分区的柱面范围记录在第一个扇区的分区表中。因为分区表只有64字节,所以最多只能记录4条分区的记录,这四条记录称为主分区扩展分区。扩展分区还可以再分出逻辑分区
一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(如mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化过程中会在磁盘上写一些管理存储布局的信息。

ext2文件系统

这里写图片描述

文件系统中存储的最小单元是块(block),一个块的大小是在格式化时确定的。启动块(Boot Block)的大小为1KB,由PC标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。
启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。

每个块组的组成:

1)超级块(Super Block)描述整个分区的文件系统信息,如inode/block的大小、总量、使用量、剩余量,以及文件系统的格式与相关信息。超级块在每个块组的开头都有一份拷贝。
2)块组描述符表(GDT,Group Descriptor Table)由很多块组描述符组成,整个分区分成多个块组就对应有多少个块组描述符。
每个块组描述符存储一个块组的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。
3)块位图(Block Bitmap)用来描述整个块组中哪些块已用哪些块空闲。块位图本身占一个块,其中的每个bit代表本块组的一个block,这个bit为1代表该块已用,为0表示空闲可用。假设格式化时block大小为1KB,这样大小的一个块位图就可以表示1024*8个块的占用情况,因此一个块组最多可以有1024*8个块。
4)inode位图(inode Bitmap)和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。
5)inode表(inode Table)由一个块组中的所有inode组成。一个文件除了数据需要存储之外,一些描述信息也需要存储,如文件类型,权限,文件大小,创建、修改、访问时间等,这些信息存在inode中而不是数据块中。inode表占多少个块在格式化时就要写入块组描述符中。
inode记录的文件数据至少有:

  • 该文件的访问模式(rwx)
  • 该文件的所有者与组(owner/group)
  • 该文件的大小
  • 该文件创建或状态改变的时间(ctime)
  • 最近一次的读取时间(atime)
  • 最近修改内容的时间(mtime)
  • 定义文件特性的标志(flag),如SetUID等
  • 该文件真正内容的指向(Pointer)

6)数据块(Data Block)是用来放置文件内容的地方。根据不同的文件类型有以下几种情况:

  • 对于普通文件,文件的数据存储在数据块中。
  • 对于目录,该目录下的所有文件名和目录名存储在所在目录的数据块中,除了文件名外,ls -l命令看到的其它信息保存在该文件的inode中。
  • 对于符合链接,如果目标路径名较短则直接保存在inode中,如果较长则分配一个数据块来保存。
  • 设备文件、FIFO和socket等特殊文件没有数据块。

数据块寻址:

这里写图片描述

一个inode占128字节,其中60个字节用于指向存放文件内容的数据块指针。每个指针4字节,那么有15个指针。最后3个指针用分级间接寻址。
假设block为1KB。
这里写图片描述

12个直接指向,可以有12条记录。
一级间接寻址:1024/4=256,可以有256条记录。
二级间接寻址,可以有256*256条记录。
三级间接寻址,可以有256*256*256条记录。
所以对于1KB的块大小最大可以表示(256^3+256^2+256+12)*1KB≈16GB的文件。

0 0
原创粉丝点击