如果您正在使用或者准备购买固态硬盘(SSD),肯定会其已经有了一定的了解。由于固态硬盘的结构和机械硬盘有本质的不同,固态硬盘要实现真正的性能发挥需要TRIM指令等一些特殊的手段。不过大多数人并不知道,或者并没有注意的是,除了某些较新的固态硬盘以外,分区以及格式化对于固态硬盘也有着极其重要的影响。如果您只是简单地用XP或者其他一些较老的工具对固态硬盘进行分区和格式化的话,得到的性能可能会只有几分之一! 注:Intel的固态硬盘在控制器层面上对这个问题进行了自动补偿,因此如果您使用的是Intel的固态硬盘的话,可以跳过本文了。
##一. 问题的根源
问题的根源要从固态硬盘的组成部分,闪存说起。目前的绝大多数闪存的组织结构是划分成很多个512KB的块(Block),而每个块又由很多以4KB为单位的页(Page)组成。这就好像我国的行政组织是划分成众多个省,每个省又划分成很多个市一样。闪存的工作原理决定了它的擦除操作是以块(Block)为单位,而写入操作则是以页(Page)为最小单位。本站的固态硬盘技术专题可以让您更多地了解固态硬盘以及闪存。 另一方面,我们的操作系统在管理硬盘时也有一个最小分配单元。NTFS的默认的最小分配单元的大小恰好也是4KB,这很不错。不过问题在于,在进行分区时通常并不是从头开始的,而是有一个偏移值。比如使用Windows XP的分区工具的话,这个偏移值会让分区从一页的中部开始。也就是说,操作系统的最小分配单元和固态硬盘的页之间错位了。这样导致的结果就是,操作系统每次写一个4KB的数据,在实际运行时都有会两次写操作。理想的情况应该是,操作系统的每个最小分配单元都恰好和闪存的一个页对应起来,这样操作系统每次写一个4KB的数据,只需要实际的一次写操作就可以完成。两者之间的性能差距最多可能可以达到两倍! 如果分区时没有对齐,而且格式化时又没有使用4KB作为最小分配单元的话,性能损失可能更大。在国外著名网站Anandtech的测试中,对某顶级固态硬盘使用FAT进行格式话,而且分区时也没有对齐,结果4KB文件的写入性能极其糟糕。换成对齐分区以及4KB的最小分配单元以后,4KB文件的写入性能几乎达到了之前的10倍!
##二. 如何正确地分区和格式化
这个问题的解决方法其实简单得很,那就是使用Windows7的分区工具来对您的固态硬盘进行分区,然后在格式化时使用4KB(4096B)作为分配单位大小即可。微软早已认识到固态硬盘需要操作系统的良好支持,所以在Windows7中加入了TRIM指令和分区对齐等针对固态硬盘的优化。使用固态硬盘的话,Windows7是目前最佳的操作系统选择。 但是如果没有Windows7怎么办呢?在XP和Vista下面,当然还是有办法的,而且并不算复杂。当然,这涉及到重新分区,所以如果您的固态硬盘里面已经有数据的话,会全部丢失,所以需要做好备份。另外,您还需要准备好一个装好系统的电脑。当然,这很简单,先把系统装在另一个硬盘即可,大多数使用固态硬盘的朋友应该都有不只一个硬盘吧? 这个操作可以通过一个免费的工具软件Diskpar.exe来完成,您可以通过微软的官方网站下载到这个软件 把固态硬盘连接到这个PC上,然后进入控制面板,在管理工具->计算机管理->磁盘管理中,找到您的固态硬盘当前是几号盘。比如当前您的电脑中有两块硬盘的话,固态硬盘可能是1号盘。记下这个号码。另外,把所有分区都删除,进行之前请备份好数据。 在开始->运行中,键入CMD。在跳出来的命令行窗口中,来到您放置diskpar.exe的文件夹。首先您可以通过diskpar来再次判断一下这个号码是不是正确的。键入diskpar -i 1。(注:这里面的1应根据您在前面看到的数值来输入。),回车后diskpar会输出类似下面的信息: ---- Drive 1 Geometry Infomation ---- Cylinders = 4139 TracksPerCylinder = 240 SectorsPerTrack = 63 BytesPerSector = 512 DiskSize = 32041820160 (Bytes) = 30557 (MB) 最后一行显示的是硬盘的大小,比如例子中的30557(MB)是个30G的硬盘。如果您的结果算出来和您的硬盘大小不同,请再次到控制面板中确认硬盘号。如果无法确认硬盘号的话,最好就此打住,不然您可能会擦除掉电脑中其他硬盘的数据。 键入diskpar -s 1,这时会有如下显示: Set partition can only be done on a raw drive. You can use Disk Manager to delete all existing partitions Are you sure drive 1 is a raw device without any partition? (Y/N) 请确认您之前已经删除这个固态硬盘上的所有分区,按下Y。 ---- Drive 1 Geometry Infomation ---- Cylinders = 4139 TracksPerCylinder = 240 SectorsPerTrack = 63 BytesPerSector = 512 DiskSize = 32041820160 (Bytes) = 30557 (MB) We are going to set the new disk partition. All data on this drive will be lost. continue (Y/N)? Diskpar会显示出硬盘信息以后,警告说硬盘上所有数据将会丢失,再次按下Y。 Please specify starting offset (in sectors): 这里让您可以设置前面提到的偏移值,请输入128,然后回车。 Please specify partition length (in MB) (Max = 30557): 这里让您指定分区大小,假如您就分一个区的话,就直接输入硬盘的容量。 Done setting partition. ---- New Partition information ---- StatringOffset = 65536 PartitionLength = 32041304064 HiddenSectors = 128 PartitionNumber = 1 PartitionType = 7 You now should use Disk Manager to format this partition 到这里,分区就完成了!您只需要到前面提到的控制面板中的磁盘管理中对分区进行格式化就可以了。记得分配单位大小选择4096!
##三. 验证
如果您手里的固态硬盘已经使用了一段时间,只是想知道是不是对齐了,或者您按照上述方法进行了操作,但是对操作过程不够放心,怕出什么错,有一个简便的方法让您验证您的固态硬盘的分区是不是对齐了。 在开始->运行中,键入msinfo32。回车后跳出一个系统信息的窗口,选择组件->存储->磁盘,这里会列出您的电脑中的所有硬盘的信息。找到固态硬盘,然后看它的分区起始偏移的值是不是4096的整数倍。如果不是的话,您的固态硬盘的性能还有很大的提升余地哦!
来源:oschina
链接:https://my.oschina.net/u/221585/blog/717352