PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

Hackintosh 黑苹果 ssd分区4kb手工对齐终极教程(HDD同样适用)

  [复制链接]
跳转到指定楼层
1#
brunolee 发表于 2011-9-9 01:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
点击数:28054|回复数:40
本帖最后由 brunolee 于 2011-9-22 02:14 编辑

一,背景介绍

在硬盘容量以MB计的年代,每扇区512byte显得非常合适。但随着技术的进步,硬盘容量的增大,依旧保持512byte的扇区尺寸已经越来越不合时宜。随着存储密度的提高,磁头信噪比下降,必须在512byte之间加入40byteECC校验区,不仅效率低下,还浪费了巨大的存储空间。

于是4KB扇区走入了我们的视野,各大厂商纷纷推出4KB扇区的硬盘。4KB扇区之间也需要ECC校验,但是每4KB只需要100byte的校验数据,相比512byte字节ECC显然效率提高了很多。对于我们消费者来说,4KB扇区能够显著提高格式化容量,大约能够多出7%~11%的格式化容量。而且还能使硬盘的可靠性得到明显的提升。

不过为了过渡,现在的4KB逻辑扇区被模拟成8512byte逻辑扇区,以保证操作系统的兼容性。但这样带来一个明显的问题:扇区与簇的“校准”。


如果如上图所示,如果操作系统的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来说,一般以上这些数据是这样的:

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


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


(二)思路


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




从图中可见,我的mac osx分区是一个逻辑分区(Logical Partition),它是位于扩展分区(Extended Partition)下的第一个逻辑分区,Start CHShex)是C20A4H1S1)。CHS,即Cylinder-head-sector,从它就能计算出此分区的开始字节数——分区偏移量。

分区偏移量计算方法:

SOSStartingOffsetSectors= C*255*63+H*63+S

此时,我的分区偏移量是(20A4转换成10进制 = 8356

20A4*255*63+1*63+1

= 8356*255*63+63+1

= 134239204 = SOS

SOS*512 = SOBStartingOffsetByte= 68730472448

这里,我做了一张电子表格——数据计算对齐.xlsx,下称“计算对齐”,在第一个表格中,只要输入CHS的值,就能自动得出当前的SOB


请一定使用 office 2010计算!低版本的office没有其中计算所需的16进制——10进制转换函数!

聪明的你或许已经发现,将第四列StartOffsetsectors80053e3转换成10进制=134239203134239203+1就是我们刚才得到的134239204


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


很遗憾,奇迹并没有发生,规则#1 #2 #3都明确告诉我们,4KB对齐失败了!

根据“原理”的阐述,“分区偏移量”必须能够整除“文件系统簇”、“nand擦除块”、“nand读写页”,而我们发现“nand擦除块”正好是4096的倍数,根据简单的数学计算,只要能够整除“nand擦除块”的“分区偏移量”即能够整除其他两个数据。这为我们计算带来了便利,而不用查找他们的公倍数。

于是我编写了一个简单的小程序来计算“分区偏移量”。其工作原理是把SOB不断地增加512byte,然后计算它是否能够整除“nand擦除块”。这样计算出来的新“分区偏移量”就是最接近你的SOB的、并且可以对齐4KB扇区的“分区偏移量”。

我将SOB68730472448)填入程序,程序运行如下:

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


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


看来计算成功了!


(三)方法

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


其中8356129是十进制数据,20A411D是十六进制数据。

至此,我们基本上对手工对齐4KB扇区有了基本的数据计算和理论认识。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 4活跃度 +200 收起 理由
overthink + 50 精品文章
flyerwang + 50 很不错的文章~!
无心飘落 + 50 就是排版太乱了点..
James007ss + 50 文章不错,编辑吧。

查看全部评分

41#
myc92 发表于 2013-2-26 19:53 | 只看该作者
您这黑苹果哪下的?我想装,虚拟机装不成功
40#
zhouhsc_cn 发表于 2013-1-6 16:35 | 只看该作者
看楼主写得这么辛苦,而且很难看懂,实在忍不住就注册上来回复一下我的方法:

在windows下分一个4K对齐的主分区,到mac下格式化为HFS+给黑苹果用就可以了。
39#
jewelz 发表于 2013-1-6 10:10 | 只看该作者
技术帝啊 bash代码直接贴出来多好
38#
ezraer 发表于 2012-11-14 22:30 | 只看该作者
强文啊,很细致,思路清晰,学习了。
37#
173233171 发表于 2012-7-8 12:01 | 只看该作者
擦 有点复杂 慢慢地看
36#
nokia5510 发表于 2012-5-6 00:15 | 只看该作者
基本上就没有看懂!LZ你还敢再强大点么?
35#
ancientstar 发表于 2011-12-18 13:35 | 只看该作者
谢谢lz分享 我拿pq调整固态的分区大小 果断进不了系统 引导损坏 我都是在win7安装时分区的 虽然不是1024对齐 但是绿色的 应该就可以了
34#
onelove1991 发表于 2011-12-17 20:18 | 只看该作者
楼主,请问新ssd或hdd买来就装上win7,是不是win7会给自动对齐呢?谢谢解惑。。{:1_301:}
33#
scoliosis 发表于 2011-9-27 15:34 | 只看该作者
吸取LZ的经验教训,我是用win7先分区(GPT),然后Mac安装时,抹除格式化后系统装在这个分区上,这样,分区就对齐了。

谢了。
32#
klovecf 发表于 2011-9-26 09:23 | 只看该作者
挺复杂的。。。
31#
sun117 发表于 2011-9-25 10:45 | 只看该作者
精品文章,收藏了。以后安装黑苹果会非常有用!
30#
scoliosis 发表于 2011-9-23 14:18 | 只看该作者
同是黑苹果的谢了。
29#
笠猪 发表于 2011-9-16 16:51 | 只看该作者
非常专业, 受教鸟,谢谢
28#
yeeuyz 发表于 2011-9-13 21:45 | 只看该作者
其实这篇教程不难,不过实施起来有些麻烦。需要装一些软件,还有那个sh文件的运行问题。我刚好有个vbox中装了ubuntu,直接在里面运行得了。不过还请作者在原贴强调一下一定要用office2010,否则是计算不出数据的。
27#
yeeuyz 发表于 2011-9-13 18:33 | 只看该作者
的确是那个坑爹2003的问题
26#
yeeuyz 发表于 2011-9-12 15:58 | 只看该作者
回复 25# brunolee


    看来问题就是处在这儿了。我已经白费好大功夫了
25#
brunolee  楼主| 发表于 2011-9-12 15:47 | 只看该作者
回复 24# yeeuyz


    对的,就是这个函数而已,应该不会有错误,你看看是不是office版本的问题,我用的是office2010。你可以换一个你这个版本可以用的公式,应该就可以了。
24#
yeeuyz 发表于 2011-9-12 07:29 | 只看该作者
回复 23# brunolee


   B7==HEX2DEC(B6)   16进转10进?
23#
brunolee  楼主| 发表于 2011-9-11 23:22 | 只看该作者
回复 22# yeeuyz


   看一下B7单元格的公式。感觉是B7不能正确转换B6数值所导致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部