注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

绿色圣光

~生活·自愚自乐~

 
 
 

日志

 
 

Ext4 磁盘结构  

2013-03-04 19:09:05|  分类: 电脑知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

听说今天是个好日子。可以丢3落4,可以挑3拣4,可以说3道4,可以颠3倒4,可以勾3搭4,还可以朝3暮4,不3不4。所以,我打算先挖个坑,记点Ext4的资料,免得以后忘了不好找。哇咔咔!

其实呢,下面的内容基本是从 Ext4 Disk Layout 翻译的,原文的内容要丰富得多。

为了降低开销,提高效率,Ext4 将存储设备划分为一批逻辑块。通常块的大小为4KB,计算方法为 2 ^ (10 + sb.s_log_block_size) 字节。块大小的最小值为1024,最大值为65536。当我们使用 mke2fs 对磁盘分区进行格式化时,终端的打印信息中包含类似这样的一行 Block size=4096 (log=2) 内容,说明块大小为 4096,即 2 的 10+2 次方。当然,你现在也可以通过 mke2fs -n 来查看。

除了块以外,Ext4文件系统还被划分为一系列块组。为了降低碎片引起的性能瓶颈,块分配器尽量保持每个文件的块位于同一组中,以减少寻道时间。块组的大小记录在 sb.s_blocks_per_group 中,当然也可以通过 8×block_size_in_bytes 的方法计算出来。当然,它也有最大值为 65536 的限制(事实上,代码中将其限制为 65536 - 8)。以默认的 4KB 块大小为例,每个块组就包含 8×4096=32768 个块,大小为 128MB。块组的数量由设备大小和块组大小决定。

值得注意的是,Ext4 中所有字段都是按照小端规则写入的,而 jbd2(日志)中的字段都是按照大端规则写入的。

下面是一个标准块组的大致结构:

块组0填充
ext4超级块 组描述信息预留的GDT块
数据块位映像索引节点位映像
索引表
数据块
1024 字节1 个块多个块多个块
1个块
1个块
多个块更多更多的块

介于块组0的特殊性,最开始的1024个字节并未使用,而是留给了x86引导区等等。因此,块组0的超级块起始于1024个字节的偏移之后。如果因为某些原因,块大小只有1024字节,那么块0就会被标记为已用,超级块从块1开始。而其他的块组,就没有这1024字节的填充了。

Ext4 驱动主要依据块组0中的超级块和组描述工作。同时,在磁盘的一些其他块组中还保存着它们的冗余副本,以防磁盘开头部位损坏。当然,并非所有的块组都存有一个副本(后面会介绍一些细节)。没有副本的块组由数据块位映像开始。注意,文件系统刚初始化时,会在组描述之后,数据块位映像之前,分配“预留的GDT块”空间,以便将来文件系统的扩展。默认情况下,一个文件系统允许在原有文件系统的基础上按照1024的倍数进行扩增。

  评论这张
 
阅读(1893)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017