一,背景介绍
在硬盘容量以MB计的年代,每扇区512byte显得非常合适。但随着技术的进步,硬盘容量的增大,依旧保持512byte的扇区尺寸已经越来越不合时宜。随着存储密度的提高,磁头信噪比下降,必须在512byte之间加入40byte的ECC校验区,不仅效率低下,还浪费了巨大的存储空间。
于是4KB扇区走入了我们的视野,各大厂商纷纷推出4KB扇区的硬盘。4KB扇区之间也需要ECC校验,但是每4KB只需要100byte的校验数据,相比512byte字节ECC显然效率提高了很多。对于我们消费者来说,4KB扇区能够显著提高格式化容量,大约能够多出7%~11%的格式化容量。而且还能使硬盘的可靠性得到明显的提升。
不过为了过渡,现在的4KB逻辑扇区被模拟成8个512byte逻辑扇区,以保证操作系统的兼容性。但这样带来一个明显的问题:扇区与簇的“校准”。
[attach]49759[/attach]
如果如上图所示,如果操作系统的4KB逻辑扇区正好对应4KB物理扇区,则驱动器读写一切正常,但如果如下图这样,操作系统的逻辑扇区卡在4KB物理扇区之间,那么将会严重影响驱动器的随机读取性能,对于ssd还会影响其寿命,因为ssd每次写入块是512KB,可想而知ssd“读-擦-写”的过程对于ssd介质来说是一种怎样的摧残。
所以,对于我们日常使用来说,对齐4KB分区非常重要,不但能提高读取性能,对于硬盘的使用寿命和稳定性也有一定的提升。
对于windows7来说,操作系统在格式化磁盘的时候,已经为我们考虑到了这一点,所以只要使用windows7系统程序进行格式化的磁盘,应该都是对齐的。我们可以使用AS SSD Benchmark来查看一下分区对齐情况。
[attach]49714[/attach]
然而对于我们安装的mac osx来说,就远没有那么幸运了,分区经常是没有对齐的。这里借用一张网络的图片来说明问题。
[attach]49715[/attach]
上图显示红色 xxxxxxx BAD,就是分区没有对齐;如果显示的是 xxxxx OK,并且是绿色,那么分区就是对齐的。
那么怎么才能对齐4KB分区呢?请往下看。
二,原理、思路与方法
(一)原理
想要对齐4KB扇区,必须做到以下三点:
分区偏移量/文件系统簇大小=整数
分区偏移量/NAND 擦除块大小=整数
分区偏移量/NAND读写页大小=整数
对于ssd来说,一般以上这些数据是这样的:
文件系统簇大小 | 4096 | bytes |
NAND擦除块大小 | 524288 | bytes |
NAND读/写页大小 | 4096 | bytes |
而“分区偏移量”是每一个磁盘分区开始的第一个字节在磁盘上的位置,就是这个位置,决定了这个分区的4KB对齐情况!这也就是我们需要得到的最关键的数据。
(二)思路
先来看一下我的分区分布情况
[attach]49778[/attach]
从图中可见,我的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。
[attach]49782[/attach]
请一定使用 office 2010计算!低版本的office没有其中计算所需的16进制——10进制转换函数!
聪明的你或许已经发现,将第四列StartOffset(sectors)80053e3转换成10进制=134239203,134239203+1就是我们刚才得到的134239204。
试一下,SOB(68730472448)能否对齐呢?我做了另一张电子表格——数据验证对齐.xlsx,下简称“验证对齐”,请将这个数字填入其中:
[attach]49761[/attach]
很遗憾,奇迹并没有发生,规则#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擦除块”呢?填入“验证对齐”:
[attach]49760[/attach]
看来计算成功了!
(三)方法
目标已经明确,我们将数据输入“计算对齐”,即能得出对齐的CHS,这里我的CHS值如下:
[attach]49762[/attach]
其中8356,1,29是十进制数据,20A4,1,1D是十六进制数据。
至此,我们基本上对手工对齐4KB扇区有了基本的数据计算和理论认识。
三,实践
有了理论的支持,真正操作起来才会变得比较容易。
(一)硬件、软件环境准备
1.硬件环境。
我有两块硬盘,一块是ssd m4 128g,分成两个分区,即如图中所示。其中Mac OS X分区f:即是所要对齐的分区(A1)。
[attach]49731[/attach]
第二块硬盘是SAMSUNG 320g的普通硬盘。这块硬盘用来存储相当关键的交换分区数据,当然,如果空间足够,我们也可以在同一块硬盘上(ssd上)制作交换数据分区。
2.软件准备
操作系统:Windows7 x64、Mac OS X(hackintosh)10.7.1;
分区软件:DiskGenius 3.5.0 免费版;Paragon Partition Manager™ 11 Server;
引导软件:Chameleon1452(windows版,wowpc.iso在M4_win7sys根目录,并且请确保你的wowpc.iso中的org.chameleon.Boot.plist之中没有hidepartition字段)
自编软件:数据验证对齐.xlsx;数据计算对齐.xlsx;get_sector.sh(此程序是bash shell程序,在MacOSX终端窗口运行 ./get_sector.sh xxxxxxxxxx 进行计算)
(二)操作步骤
1,关闭MacDrive
MacDrive 是一款能够在Windows7下面读写访问Mac分区磁盘的软件,但是它会影响我们在Win7下对于磁盘的操作,必须关闭!切记!
[attach]49732[/attach]
2,计算分区偏移量
相信经过以上这么多的介绍,您已经完全掌握了“分区偏移量”SOB的计算方法,这儿就不再赘述。
3,制作交换分区b1,b2
Paragon Partition Manager™ 11 Server的神奇之处,就是能够在Win7下面建立AppleHFS+的分区,并且格式化(但不能通过这个访问HFS+格式磁盘)。我们使用Paragon分区复制功能,把mac os x分别复制到这两个分区。
[attach]49733[/attach]
[attach]49734[/attach]
[attach]49735[/attach]
[attach]49736[/attach]
再复制一次
[attach]49737[/attach]
最后你的磁盘分区应该是这样的
[attach]49738[/attach]
如果你把OSX复制到其他分区,不用介意,MacOSX基本都能从它们启动,甚至是“逻辑分区”。
Tips:Paragon所有操作可以一步步完成,每次完成使用Apply确认执行操作,否则它是不会执行的。当然您如果对操作有信心,可以一次完成,那么可以一次做完所有操作,然后再点击绿色的Apply。
[attach]49739[/attach]
4,重建“对齐分区”a1àa11并格式化
打开DiskGenius,删除MacOSX(a1)分区,新建分区(MacOSX,简称为a11),并且修改分区参数(注意修改“系统标识”为AF),使用计算好的分区参数填写。
[attach]49740[/attach]
您也许注意到了,我这里填写的C(起始柱面)H(起始磁头)S(起始扇区)分别是C(8356)H(1)S(30),比“计算对齐”的结果大了“1”。其实这很好理解,“分区偏移量”SOB是“上一个分区最后一个字节”(严格来说这里的空间其实已经浪费掉了,并不在上一个分区容量的覆盖范围内,这里这样说只是便于理解),而这里DiskGenius填写的是当前需要对齐的分区a11的第一个字节,所以当然大了1。最后同样,DiskGenius也需要Apply来确认执行。
[attach]49741[/attach]
接着,使用Paragon Partition Manager™ 11 Server对已经对齐的分区a11格式化,分区参数使用AppleHFS。
[attach]49742[/attach]
别忘了Apply!
5,MacOSX下恢复数据
重启电脑,Chameleon自动辨识新的b1、b2 OSX系统,我们选择b2吧,其实都一样,目的只是为了把另一个OSX复制到A11。进入OSX,使用“磁盘实用程序”,将b1的MacOSX做为“恢复源”,a11做为“目标”进行系统恢复。至此,手工对齐MacOSX分区的工作就已经完成了,两个交换分区b1、b2已经完成了使命,可以删除了。
[attach]49777[/attach]
四,验证
现在我们可以回到Windows,使用软件验证一下我们的结果。AS SSD Benchmark
[attach]49743[/attach]
[attach]49744[/attach]
[attach]49745[/attach]
结果令人满意,C:测试已经达到了sataII接口的极限速度,250mb/s;而L:暂时无法测试,MacDrive在windows下虽然可以读写mac磁盘,但测试无法通过。
欢迎光临 PCEVA,PC绝对领域,探寻真正的电脑知识 (https://bbs.pceva.com.cn/) | Powered by Discuz! X3.2 |