当前位置: 首页 > 科技观察

Linux磁盘分区对齐详解及配置

时间:2023-03-12 20:10:39 科技观察

什么是磁盘分区对齐(DiskAlignment,PartitionAlignment)Windows磁盘有一种叫做MasterBootRecord(MBR)的结构,它的默认大小是63Blocks(每个大小是512byte).它的存在使得磁盘的初始位置与磁盘第一个分区的初始位置有63个Block错位。如果磁盘的单个Track大于63Blocks。这将导致默认初始位置从第64位开始。使文件系统中磁道的总和位于磁盘中两个磁道之上。这种错位会导致存储系统的性能下降,因为单个I/O请求会跨越多个磁盘上的磁道,导致存储系统额外的性能开销。特别是对于一些随机I/O比较大的应用,影响会更大。对于Windows2003及之后支持的GPTDisk,也会出现磁盘分区错位的情况,只是结构不同。如图1(图中单位为Block,512字节),所有分区由1MB(2048个Block)组成,第一个分区从LBA34开始,大小为17KB。这也意味着所有分区都会有17KB的错位。它还会影响I/O读写性能。存储系统的磁道区域与Linux分区之间的对齐为了最大化性能,任何到后端存储阵列的I/O都需要适当的结构化以避免任何越界的I/O操作。如果I/O操作跨越多个边界,会带来额外的资源开销,导致性能下降。因此,为了避免分区错位带来的性能影响。您需要使用fdisk或parted工具来创建和对齐分区。如何选择一个正确的磁盘分区偏移值,基本上EMC等厂商建议的值为“64KB”。为什么选择64KB这个值,这里解释一下。先说一个概念,叫做物理磁道区。因为针对不同类型的保护级别,也可以称为Raid和磁盘类型,这个区域的范围是不同的。举两个例子:Symmetrix缓存中track区域单元的大小为一个Track,即64个Block,大小为32KB。如图2所示,如果磁盘分区不对齐,任何32KB或更大的I/O都需要跨越两个Track,50%的16KBI/O可能跨越两个Track,而25%的8KB也会跨越两个Track,导致额外的存储系统性能开销。看完第一个例子,读者可能会想,只要将起始位向右移动一个Block,(MBR+Reserved=63Block),就不会出现cross-TrackI/O。接下来我们再看一个例子。3+1Raid5的单个stripe大小为4个Track,即256个Block,大小为128KB。如果以第64块作为此类磁盘的起始位置,当LinuxI/O大小达到64KB时,如果I/O直接来自缓存(单磁道32KB),那么恰好有两次读取完全的。但是,如果连续两次64KB的I/O需要涉及到后端Raid5的物理磁盘读写,如下图,第二个64KB会跨越两个stripe,这样read或者Write的开销就会翻倍。在这种情况下,您需要将起始位置调整为推荐配置(64KB),这样Linux最大I/O大小就不会跨越多个条带。(图3)因此,无论是从存储系统的缓存中读取数据,还是在缓存中不存在I/O时,都需要从底层物理磁盘中读取数据。对于不同类型的磁盘,建议配置起始值为64KB。如何在Linux中创建对齐分区在介绍了磁盘分区对齐的原理之后,下面举例说明如何使用fdisk创建对齐分区。在Linux中,需要对空数据进行对齐分区操作,因为对齐分区操作会清空分区表,LUN上的数据也会被删除。本例中,我们为/dev/emcpowerfw设备创建一个大小为51281的Cylinder(Cylinder是Symmetrix的计量单位,每个Cylinder的大小为960KB,所以这个磁盘的大小约为50GB),Offset错位的大小为128块磁盘设备。方法及命令输出(图4)如下方法一、使用fdisk创建分区对齐在Linux命令提示符下输入:#fdisk/dev/emcpowerfw输入n创建分区:输入p创建主分区:输入起始柱面位置,默认为第一个:输入***柱面位置,默认为磁盘设备的最后一个柱面:输入x进入期望模式:输入b,某分区初始位置:设置初始位置为128块(128块大小为64KB):再次输入p,确认分区初始位置信息:输入w,保存退出:方法二:使用parted创建对齐分区parted支持的类型更多(支持GPT),分区比parted更大fdisk大小。以下示例给出了为dev/sdb磁盘创建128bloc分区起始位的示例。方法和命令输出如下(图5)。在Linux命令提示符下输入:#parted/dev/sdb调整显示单位为Sector(大小512字节):(parted)units列出当前逻辑卷:(parted)print去掉原来的Number1,创建主分区起始位为128个扇区,最少为976735934个扇区。(parted)rm1(parted)mkpartprimary128976735934(parted)print参考Parted命令手册及参数:http://www.gnu.org/software/parted/manual/parted.html#unitFdisk命令手册及参数:http://www.gnu.org/software/parted/manual/parted.html#unitFdisk://manpages.courier-mta.org/htmlman8/fdisk.8.html磁盘分区对齐详解及配置-Windows:https://community.emc.com/docs/DOC-18571磁盘分区对齐详解及配置-Linux文章:https://community.emc.com/docs/DOC-18666本文地址:http://linux.cn/article-3167-1.html