黑苹果 ssd分区4kb手工对齐终极教程(HDD同样适用)
一,背景介绍 在硬盘容量以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来说,一般以上这些数据是这样的:
而“分区偏移量”是每一个磁盘分区开始的第一个字节在磁盘上的位置,就是这个位置,决定了这个分区的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)填入程序,程序运行如下:
得出68730486784,能否整除“nand擦除块”呢?填入“验证对齐”: 看来计算成功了! (三)方法 目标已经明确,我们将数据输入“计算对齐”,即能得出对齐的CHS,这里我的CHS值如下: 其中8356,1,29是十进制数据,20A4,1,1D是十六进制数据。 至此,我们基本上对手工对齐4KB扇区有了基本的数据计算和理论认识。 |