麦创网

发表于 13/11/26 17:34:16 |显示全部楼层
一,背景介绍
在硬盘容量以MB计的年代,每扇区512byte显得非常合适。但随着技术的进步,硬盘容量的增大,依旧保持512byte的扇区尺寸已经越来越不合时宜。随着存储密度的提高,磁头信噪比下降,必须在512byte之间加入40byte的ECC校验区,不仅效率低下,还浪费了巨大的存储空间。
于是4KB扇区走入了我们的视野,各大厂商纷纷推出4KB扇区的硬盘。4KB扇区之间也需要ECC校验,但是每4KB只需要100byte的校验数据,相比512byte字节ECC显然效率提高了很多。对于我们消费者来说,4KB扇区能够显著提高格式化容量,大约能够多出7%~11%的格式化容量。而且还能使硬盘的可靠性得到明显的提升。
不过为了过渡,现在的4KB逻辑扇区被模拟成8个512byte逻辑扇区,以保证操作系统的兼容性。但这样带来一个明显的问题:扇区与簇的“校准”。




如果如上图所示,如果操作系统的4KB逻辑扇区正好对应4KB物理扇区,则驱动器读写一切正常,但如果如下图这样,操作系统的逻辑扇区卡在4KB物理扇区之间,那么将会严重影响驱动器的随机读取性能,对于ssd还会影响其寿命,因为ssd每次写入块是512KB,可想而知ssd“读-擦-写”的过程对于ssd介质来说是一种怎样的摧残。
所以,对于我们日常使用来说,对齐4KB分区非常重要,不但能提高读取性能,对于硬盘的使用寿命和稳定性也有一定的提升。
对于windows7来说,操作系统在格式化磁盘的时候,已经为我们考虑到了这一点,所以只要使用windows7系统程序进行格式化的磁盘,应该都是对齐的。我们可以使用AS SSD Benchmark来查看一下分区对齐情况。



然而对于我们安装的mac osx来说,就远没有那么幸运了,分区经常是没有对齐的。这里借用一张网络的图片来说明问题。





上图显示红色 xxxxxxx BAD,就是分区没有对齐;如果显示的是 xxxxx OK,并且是绿色,那么分区就是对齐的。
那么怎么才能对齐4KB分区呢?请往下看。

二,原理、思路与方法

(一)原理
想要对齐4KB扇区,必须做到以下三点:
分区偏移量/文件系统簇大小=整数
分区偏移量/NAND 擦除块大小=整数
分区偏移量/NAND读写页大小=整数

对于ssd来说,一般以上这些数据是这样的:

文件系统簇大小
4096
bytes
NAND擦除块大小
524288
bytes
NAND读/写页大小
4096
bytes


而“分区偏移量”是每一个磁盘分区开始的第一个字节在磁盘上的位置,就是这个位置,决定了这个分区的4KB对齐情况!这也就是我们需要得到的最关键的数据。

(二)思路

先来看一下我的分区分布情况





从图中可见,我的mac osx分区是一个逻辑分区(Logical Partition),它是位于扩展分区(Extended Partition)下的第一个逻辑分区,Start CHS(hex)是C(20A4)H(1)S(1)。CHS,即Cylinder-head-sector,从它就能计算出此分区的开始字节数——分区偏移量。
分区偏移量计算方法:
SOS(StartingOffsetSectors)= C*255*63+H*63+S
此时,我的分区偏移量是(20A4转换成10进制 = 8356)
20A4*255*63+1*63+1
= 8356*255*63+63+1
= 134239204 = SOS
SOS*512 = SOB(StartingOffsetByte)= 68730472448
这里,我做了一张电子表格——数据计算对齐.xlsx,下称“计算对齐”,在第一个表格中,只要输入CHS的值,就能自动得出当前的SOB。




聪明的你或许已经发现,将第五列Start (sectors)80053e3转换成10进制=134239203,134239203+1就是我们刚才得到的134239204。

试一下,SOB(68730472448)能否对齐呢?我做了另一张电子表格——数据验证对齐.xlsx,下简称“验证对齐”,请将这个数字填入其中:



很遗憾,奇迹并没有发生,规则#1 #2 #3都明确告诉我们,4KB对齐失败了!
根据“原理”的阐述,“分区偏移量”必须能够整除“文件系统簇”、“nand擦除块”、“nand读写页”,而我们发现“nand擦除块”正好是4096的倍数,根据简单的数学计算,只要能够整除“nand擦除块”的“分区偏移量”即能够整除其他两个数据。这为我们计算带来了便利,而不用查找他们的公倍数。
于是我编写了一个简单的小程序来计算“分区偏移量”。其工作原理是把SOB不断地增加512byte,然后计算它是否能够整除“nand擦除块”。这样计算出来的新“分区偏移量”就是最接近你的SOB的、并且可以对齐4KB扇区的“分区偏移量”。
我将SOB(68730472448)填入程序,程序运行如下:

输入数=68730472448
本程序用作手工计算mac os x在Hackintosh上4kb对齐的CHS所在具体字节数。  
输入数除以524288(擦除块大小)的整数部分=131092
输入数除以524288(擦除块大小)的余数=0  
下一个可以对齐到4kb扇区的字节数位置偏移为(StartingOffset)=68730486784  
请把上面这个数据直接输入  数值计算对齐.xlsx 文件以计算 CHS

得出68730486784,能否整除“nand擦除块”呢?填入“验证对齐”:



看来计算成功了!

(三)方法
目标已经明确,我们将数据输入“计算对齐”,即能得出对齐的CHS,这里我的CHS值如下:



其中8356,1,29是十进制数据,20A4,1,1D是十六进制数据。
至此,我们基本上对手工对齐4KB扇区有了基本的数据计算和理论认识。


打赏楼主

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

麦创网 ( 苏ICP备13053101号-1 )

@麦创网 禁止任何未经允许的修改,传播或使用。

Powered by Discuz!

©2012 @ iMac.vip. 用户言论不代表本站立场。

返回顶部