学习笔记5

本章介绍ext2文件系统。此数字使用Linux与Linux完成完整的兼容ext2文件系统。起点是,只要播放器包含完全文件系统,就可以轻松调整其他文件系统。

本章介绍Linux ext2文件系统历史记录的状态和EXT3 / EXT4文件系统的当前状态。
编程示例显示如何放大不同ext2数据结构的树和ext2文件系统。介绍支持所有Linux核心文件的Ext2文件系统的实现。
mont_root通过虚拟磁盘显示基本文件系统的创建。
文件系统执行可以分为三个级别。 1级别扩展了文件系统木材的基本文件系统,2级设备读/写函数文件内容和级别3实现文件系统安装/充电。文件保护
描述每个级别文件系统的算法,并且程序示例描述了实现过程。
集成编程项目中的所有级别集成。最后,所有编程和追求示例都集成到完全有效的文件系统中。

  • Boot Sector:上图启动块(Boot Sector),是用来存储磁盘分区信息和启动信息,任何文件系统给都不能缺少启动块。启动块大小并不是我们前面所说的4KB,而是1KB,是由PC标准定义的。

  • Block Group:启动块之后才是ext2文件系统的开始。ext2文件系统将整个分区划分为大小相等的块组(Block Group),每个块组由以下部分组成:

  • Super Block:超级块主要有两个功能:1)超级块结构给出了文件系统的全局信息。例如块大小,文件系统的版本等等。2)超级块结构包含一些函数指针,例如super_operation的成员函数read_inode提供了读取inode信息的功能。每个具体的文件系统一般都要提供这个函数来实现对inode信息的读取,例如ext2文件系统提供的具体函数是ext2_read_inode。

在格式化一个分区时究竟会划出多少个块组呢?
这主要取决于分区大小和块的大小。我们考虑一个32GB的ext2分区,块大小为4KB,Block Bitmap占一个块,也就是4KB,可以标注4K*8=32K个块,即128MB。因此,一个32GB的ext2分区需要32GB/128MB=256个块组。

这种寻址方式对于访问不超过12个数据块的小文件是非常快的,访问文件中的任意数据只需要两次读盘操作,一次读inode(也就是读索引项)一次读数据块。而访问大文件中的数据则需要最多五次读盘操作:inode、一级间接寻址块、二级间接寻址块、三级间接寻址块、数据块。实际上,磁盘中的inode和数据块往往已经被内核缓存了,读大文件的效率也不会太低。

   
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0xa22b, unused inodes 501
  Primary superblock at 1, Group descriptors at 2-81
  Reserved GDT blocks at 82-337
  Block bitmap at 338 (+337), Inode bitmap at 354 (+353)
  Inode table at 370-497 (+369)
  5761 free blocks, 501 free inodes, 2 directories, 501 unused inodes
  Free blocks: 2432-8192
  Free inodes: 12-512
Group 1: (Blocks 8193-16384) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0xea71, unused inodes 512
  Backup superblock at 8193, Group descriptors at 8194-8273
  Reserved GDT blocks at 8274-8529
  Block bitmap at 339 (bg #0 + 338), Inode bitmap at 355 (bg #0 + 354)
  Inode table at 498-625 (bg #0 + 497)
  7855 free blocks, 512 free inodes, 0 directories, 512 unused inodes
  Free blocks: 8530-16384
  Free inodes: 513-1024
Group0 占用从 1 到 8192 号的 block。其中的 Superblock 则在 1 号 block 内。
文件系统描述说明(Group descriptors)占用从 2 到 81 号 block。
Block bitmap 和 Inode bitmap 分别在 338 和 354 号 block 上。
Inode table 占用 370-497 号 block。
Group0 当前可用的 block 号为:2432-8192,可用的 inode 号码为:12-512。
Group 内 inode 数的计算方式:
一个 inode 占用 256 Bytes
Inode 占用的 block 数:497 - 370 + 1 = 128
每个 block 的大小为 1024 Bytes
Inode 数为:128 * 1024 / 256 = 512

Boot Block
每个磁盘分区的开头 1024 字节大小都预留为分区的启动扇区,存放引导程序和数据,所以又叫引导块。引导块在第一个 Block,即 Block 0 中存放,但是未必占满这个 Block,原因是 Block 的大小可能大于 1024 字节。
上一篇:openstack虚拟机磁盘io error问题


下一篇:【语音合成】基于matlab语音信号变调【含Matlab源码 566期】