开始新对话

未解决

此帖子已超过 5 年

7803

2012年9月6日 21:00

磁盘分区对齐详解与配置 - Windows篇

​ ​
​ ​

​磁盘分区对齐详解与配置​​ - Windows​​篇​

​ ​
​ ​

​ ​

​转载请在文首保留原文出处:​​EMC​​中文支持论坛​

​ ​
​ ​

​介绍​

​ ​
​ ​

​ ​

​ 许多系统管理员可能不曾听过”磁盘分区对齐“之说,甚至一些有经验的存储管理员对分区对齐也不甚了解。磁盘分区不对齐现象是什么,为什么会造成比较严重的性能下降?相反,配置正确的分区起始位置(Offset)设置会使存储系统发挥更大的性能潜力。文章就磁盘分区对齐进行的介绍,并且给出了在​​Windows​​平台上如何配置的方法。​

​ ​
​ ​

​更多信息​

​ ​
​ ​

​ ​

​什么是磁盘分区对齐(​​Disk Alignment​​、​​Partition Alignment​​)​​:​

​ ​

​ ​

​ Windows​​的磁盘有一种结构叫做​​Master Boot Record(MBR), ​​它的默认大小为​​63​​个​​Block​​(每个大小为​​512​​字节)。它的存在使得磁盘的初始位置和的磁盘上第一个分区的初始位置有​​63​​个​​Block​​的错位。如果磁盘的单个​​Track​​大于​​63​​个​​Block​​的话。这就会导致默认的初始的位置是从第​​64​​个开始。使文件系统的中的​​Track​​和位于磁盘中的两个​​Track​​之上。这种不对齐现象会导致存储系统的性能下降,原因是单个​​I/O​​请求会跨越多个磁盘上的​​Track​​,从而导致存储系统的额外性能开销。特别是对于一些随机​​I/O​​比较较大的应用程序,影响将更大。​

​ ​

​ 而对于​​Windows 2003​​以后支持的​​GPT Disk​​,也会存在磁盘分区不对齐的现象,但是结构有所不同。如图​​1​​所示(图中单位为​​Block​​,​​512​​字节),所有的分区由​​1MB​​大小(​​2048 Block​​)构成,第一个分区从​​LBA 34​​开始,即​​17KB​​大小位置。这也就意味着所有的分区会有​​17KB​​的不对齐的情况发生。同样会导致​​I/O​​读写性能影响。​

​ ​

A-1.jpg

​ ​

​图​​1​

​ ​

​ ​

​ ​

​Windows​​磁盘分区对齐配置:​

​ ​

​ ​

​ 配置磁盘分区对齐后,如下图所示四个分区的例子中,对比图​​1​​中不对称的情况,图​​2​​中这些​​Windows​​的分区结束地址与图​​1​​中的地址位置一致了。​

​ ​

A-2.jpg

​ ​

​图​​2​

​ ​

​ ​

​ 磁盘分区对齐操作,只针对​​Windows​​的​​Basic Disk​​。对于​​Windows 2008​​和​​Windows 2008 R2​​,无需对磁盘进行对齐操作,因为这个过程已经在操作系统划分分区的时候自动进行了,软件的升级还是给管理员们带来了不少便利的。对于​​Windows 2003​​和​​ 2003 R2​​,以及​​Windows 2000​​,建议设置开始偏移量(​​starting offset​​)为​​64KB​​(​​128 block​​)。另外,对于​​Dynamic Disk​​类型,不能进行磁盘分区对齐操作。不过,如果原来的​​Basic Disk​​上已经进行了对齐操作的分区,会在转换后保留原来的对齐。​

​ ​

​ ​

​ ​

​查看​​Windows​​磁盘分区对齐方法​​:​

​ ​

​ ​

​1. ​​查看​​Basic Disk​​的分区对齐信息:​

​ ​

​ ​

​ ​

​方法​​1​​:​

​ ​

​在​​Windows​​的命令行下输入​​Diskpart​​命令。​

​ ​

​C:\>​​diskpart​

​ ​

​选择对应的​​Disk​

​ ​

​DISKPART> ​​list disk​​ ​​(显示本机所有磁盘)​

​ ​

​DISKPART> ​​Select Disk X​​ ​​(​​x​​代表上面显示的从​​0​​开始的磁盘编号)​

​ ​

​DISKPART> ​​list partition​​ ​​(显示从​​1​​开始的所有的分区信息,在最右边有一个​​Offset/​​偏移量的值,如果它是​​8​​的倍数,说明你的硬盘分区是对齐的,如果不是,说明你的磁盘分区没有对齐)​

​ ​

​ ​

​ ​

​方法​​2​​:​

​ ​

​使用​​WMIC​​命令,在​​Windows​​命令行下输入下列命令,命令输出的列​​StartingOffset​​为该分区的偏移量,该数值除以​​512​​则为扇区数目:​

​ ​

​wmic partition get BlockSize, StartingOffset, Name, Index ​

​ ​

​ ​

​ ​

​2.​​查看​​Dynamic Disk​​的对齐信息:​

​ ​

​ ​

​使用​​dmdiag​​工具,下载地址;​

​ ​

​执行从命令行执行​​dmdiag.exe –v​

​ ​

​在命令行输出中,​​LDM Volume​​区域的​​RelSec​​列,该列显示的就是​​Dynamic Disk​​的起始扇区。 ​

​ ​

​ ​

​ ​

​ ​

​ ​

​磁盘分区对齐配置方法​​:​

​ ​

​ ​

​ 对于​​Windows 2003 sp1​​以下版本,使用​​dispar​​命令来设置偏移量和分区对齐。步骤如下:​

​ ​

​1. ​​安装在​​Windows Resource Kit​​后,在​​Performance Tools​​目录下,通过命令行运行​​diskpar​​命令:​

​ ​

​2. ​​使用​​diskpar –s N​​命令,下面的例子中定义了配置一个​​20GB​​的磁盘的错位​​64KB​​的配置​

​ ​

A-3.jpg

​ ​

​ ​

​ ​

​对于​​Windows 2003 sp1​​以上版本,​​dispar​​命令被​​dispart​​命令所替换。​

​ ​

​1. ​​在​​CMD​​命令行运行​​Diskpart​​命令​

​ ​

​C:\>​​diskpart​

​ ​

​2. ​​选择对应的​​Disk​

​ ​

​DISKPART> ​​Select Disk X​​ ​

​ ​

​3. ​​创建分区设置偏移量为​​64KB​​(​​128 Block​​),下面的例子为创建一个​​1GB​​的分区。​

​ ​

​DISKPART> ​​create partition primary size=1024 align=64​

​ ​

​ ​

​ ​

​ 最后,进行分区对齐操作的时候需要注意:对齐操作需要在磁盘上写入数据之前完成,最好在磁盘刚刚映射到主机时进行。磁盘对齐操作必然损坏磁盘上的数据,所以如果有数据需先备份,操作的时候注意数据安全。​

​ ​

​ ​

​ ​
​ ​

​参考​

​ ​
​ ​

​ ​

​Aligning GPT Basic and Dynamic Disks P/N 300-004-075​

​ ​
​ ​

​应用于​

​ ​
​ ​

​ ​

​Windows 2000​

​ ​

​Windows 2003​

​ ​

​Windows 2008​

​ ​

​ ​

5 Practitioner

 • 

274.2K 消息

2012年11月10日 11:00

配置正确的错位设置会使存储系统发挥更大的性能潜力”这句表述为:配置正确的开始偏移量会使存储系统发挥更大的性能潜力,会更好些吧?

2 Intern

 • 

2.1K 消息

2012年11月13日 18:00

谢谢你的建议,一直没有找到比较合适的offset的中文表述,修改成了分区起始位置(Offset),比较方便理解

总之,有建议才会进步,谢谢你

44 消息

2012年11月13日 22:00

windows 2008 不需要做这个动作了,但是以前版本的windows格式化的硬盘在windows 2008里使用还是需要做这个动作。

2 Intern

 • 

2.8K 消息

2012年11月13日 22:00

正解,win 2008会自动从1024KB开始存数据。分区对齐需要做在客户端,不管是Linux还是Windows,如果做在存储上会影响快照和复制功能。

402 消息

2012年12月9日 21:00

微博用户提问:

滑盖摇晃的PALM微博达人:对固体硬盘和机械硬盘都适用么?

请哪位帮他解答一下!

谢谢!

5 Practitioner

 • 

274.2K 消息

2012年12月9日 22:00

对2007年之后,采用高级格式化方式的硬盘(新的格式化方式sector size为4096字节,之前为512字节,主要是为了是寻址更高效),都有必要注意分区起始位置4k对齐的问题,因此固体和机械硬盘都适用。

2 Intern

 • 

2.1K 消息

2012年12月9日 22:00

KRhelen 编写:

微博用户提问:

滑盖摇晃的PALM微博达人:对固体硬盘和机械硬盘都适用么?

请哪位帮他解答一下!

谢谢!

是的,解决的问题就是底层跨簇的现象发生

找不到事件!

Top