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

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

  [复制链接]
跳转到指定楼层
1#
brunolee 发表于 2011-9-9 01:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:27967|回复数: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 文章不错,编辑吧。

查看全部评分

2#
brunolee  楼主| 发表于 2011-9-9 01:49 | 只看该作者
本帖最后由 brunolee 于 2011-9-9 15:58 编辑

三,实践


有了理论的支持,真正操作起来才会变得比较容易。


(一)硬件、软件环境准备

1.硬件环境。

我有两块硬盘,一块是ssd m4 128g,分成两个分区,即如图中所示。其中Mac OS X分区f:即是所要对齐的分区(A1)。

第二块硬盘是SAMSUNG 320g的普通硬盘。这块硬盘用来存储相当关键的交换分区数据,当然,如果空间足够,我们也可以在同一块硬盘上(ssd上)制作交换数据分区。

2.软件准备

操作系统:Windows7 x64Mac OS Xhackintosh10.7.1

分区软件:DiskGenius 3.5.0 免费版;Paragon Partition Manager™ 11 Server

引导软件:Chameleon1452windows版,wowpc.isoM4_win7sys根目录,并且请确保你的wowpc.iso中的org.chameleon.Boot.plist之中没有hidepartition字段)

自编软件:数据验证对齐.xlsx;数据计算对齐.xlsxget_sector.sh(此程序是bash shell程序,在MacOSX终端窗口运行 ./get_sector.sh xxxxxxxxxx 进行计算)


(二)操作步骤

1,关闭MacDrive

MacDrive 是一款能够在Windows7下面读写访问Mac分区磁盘的软件,但是它会影响我们在Win7下对于磁盘的操作,必须关闭!切记!

2,计算分区偏移量

相信经过以上这么多的介绍,您已经完全掌握了“分区偏移量”SOB的计算方法,这儿就不再赘述。

3,制作交换分区b1b2

Paragon Partition Manager™ 11 Server的神奇之处,就是能够在Win7下面建立AppleHFS+的分区,并且格式化(但不能通过这个访问HFS+格式磁盘)。我们使用Paragon分区复制功能,把mac os x分别复制到这两个分区。





再复制一次



最后你的磁盘分区应该是这样的



如果你把OSX复制到其他分区,不用介意,MacOSX基本都能从它们启动,甚至是“逻辑分区”。

TipsParagon所有操作可以一步步完成,每次完成使用Apply确认执行操作,否则它是不会执行的。当然您如果对操作有信心,可以一次完成,那么可以一次做完所有操作,然后再点击绿色的Apply



4,重建“对齐分区”a1àa11并格式化

打开DiskGenius,删除MacOSXa1)分区,新建分区(MacOSX,简称为a11),并且修改分区参数(注意修改“系统标识”为AF),使用计算好的分区参数填写。



您也许注意到了,我这里填写的C(起始柱面)H(起始磁头)S(起始扇区)分别是C8356H1S30),比“计算对齐”的结果大了“1”。其实这很好理解,“分区偏移量”SOB是“上一个分区最后一个字节”(严格来说这里的空间其实已经浪费掉了,并不在上一个分区容量的覆盖范围内,这里这样说只是便于理解),而这里DiskGenius填写的是当前需要对齐的分区a11的第一个字节,所以当然大了1最后同样,DiskGenius也需要Apply来确认执行。



接着,使用Paragon Partition Manager™ 11 Server对已经对齐的分区a11格式化,分区参数使用AppleHFS



别忘了Apply

5,MacOSX下恢复数据

重启电脑,Chameleon自动辨识新的b1b2 OSX系统,我们选择b2吧,其实都一样,目的只是为了把另一个OSX复制到A11。进入OSX,使用“磁盘实用程序”,将b1MacOSX做为“恢复源”,a11做为“目标”进行系统恢复。至此,手工对齐MacOSX分区的工作就已经完成了,两个交换分区b1b2已经完成了使命,可以删除了。





四,验证


现在我们可以回到Windows,使用软件验证一下我们的结果。AS SSD Benchmark





结果令人满意,C:测试已经达到了sataII接口的极限速度,250mb/s;而L:暂时无法测试,MacDrivewindows下虽然可以读写mac磁盘,但测试无法通过。

本帖子中包含更多资源

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

x
3#
brunolee  楼主| 发表于 2011-9-9 01:50 | 只看该作者
本帖最后由 brunolee 于 2011-9-9 15:10 编辑

三个附件:






感谢浴室的对齐计算表格!

本帖子中包含更多资源

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

x
4#
brunolee  楼主| 发表于 2011-9-9 01:57 | 只看该作者
太棒了。。超过5分钟就不能编辑了,排版一塌糊涂。。。
5#
yanleiberg 发表于 2011-9-9 04:10 | 只看该作者
本帖最后由 yanleiberg 于 2011-9-8 15:14 编辑

沙了你个发。
不简单,不易懂。
排版想办法在搞搞吧,看得偶头大。
实在不行重新发吧。

hackintosh估计好多人猜不出来什么意思? 标题应该简单明了。
还有最好4k未对其的图片也用同一个m4,这样才有比较意义啊。
6#
brunolee  楼主| 发表于 2011-9-9 04:48 | 只看该作者
实在版主不给改的话,回头补发一贴吧。
都是网络水军害的,浮躁的人太多。

评分

参与人数 1活跃度 +100 收起 理由
无心飘落 + 100 现在可以编辑了

查看全部评分

7#
mikeee146 发表于 2011-9-9 06:25 | 只看该作者
这可是好文章,不过确实太乱……
8#
James007ss 发表于 2011-9-9 08:01 | 只看该作者
不错的MAC教程,楼主已经可以编辑了。
9#
pancq 发表于 2011-9-9 08:14 | 只看该作者
看不董。。。。
10#
xxy 发表于 2011-9-9 08:51 | 只看该作者
这个实际用处是啥?

评分

参与人数 1活跃度 -1 收起 理由
James007ss -1 对你没有实际用处

查看全部评分

11#
flyerwang 发表于 2011-9-9 08:56 | 只看该作者
很不错,如果软件全用成中文的就更适合新手看了,哈哈
12#
glaygle 发表于 2011-9-9 11:03 | 只看该作者
先占楼,然后慢慢研究,这不是看一二遍就能够搞明白的
13#
yeeuyz 发表于 2011-9-10 21:22 | 只看该作者
楼主,我的chs中的c有五位字符,输进去全部出来。还有,hdd在那个验证计算文件中nand要怎么填?
14#
James007ss 发表于 2011-9-10 21:27 | 只看该作者
回复 13# yeeuyz


    NAND就是指你SSD的颗粒。
15#
brunolee  楼主| 发表于 2011-9-11 01:12 | 只看该作者
楼主,我的chs中的c有五位字符,输进去全部出来。还有,hdd在那个验证计算文件中nand要怎么填? ...
yeeuyz 发表于 2011-9-10 21:22



   把你的CHS贴上来看看,五位的CHS一般这个分区开始的地方应该超过500GB之后了,注意电子表格计算出来的 SOB 可能会显示科学计数,比如 5.39052E+11 这样的,你可以将表格显示格式改成“邮政编码”,这样才能显示完整。
   NAND 只要填写一个"分区偏移量" 的字节数就行了,这个就是通过程序 get_sector 计算出来的值,但为了性能考虑,我只把程序计算到1TB之内,超过1TB的开始值没有纳入计算。而“验证对齐”中其他都是常量,不需要更改的。

   如果你的分区开始字节已经大于1TB,可以试试这个程序,可以计算到10TB。

本帖子中包含更多资源

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

x
16#
yeeuyz 发表于 2011-9-11 07:12 | 只看该作者
楼主,你这里的sh文件要用什么打开?难道是终端?
17#
overthink 发表于 2011-9-11 07:44 | 只看该作者
不错,我得来学习学习
18#
ach9999 发表于 2011-9-11 09:13 | 只看该作者
以前有段时间玩黑苹果,驱动难整得要死 = =  

不过还是好玩的  够你折腾几天   {:1_320:}
19#
yeeuyz 发表于 2011-9-11 16:15 | 只看该作者
这次我把分区建在硬盘的最前端,还是不行,我怀疑楼主的计算文件有问题。
我的硬盘式WD-10EARS
20#
brunolee  楼主| 发表于 2011-9-11 20:45 | 只看该作者
楼主,你这里的sh文件要用什么打开?难道是终端?
yeeuyz 发表于 2011-9-11 07:12



   就是终端里面运行一下。   ./get_sector.sh xxxxxxxxxx
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部