磁盘分区对齐详解与配置 - lin x篇-世贸人才国际教育
介绍 在之前一篇《磁盘分区对齐详解与配置 - windows篇》中,我介绍了磁盘分区对齐的作用和适用于mbr和gpt的两种磁盘类型的配置,以及windows平台设置磁盘分区对齐的方法。本文作为系列的第二篇,文章就分区对齐在存储系统缓存和raid5下io分析,解释了为什么64kb作为offset错位的推荐配置。并且提供了使用lin x命令fdisk和parted创建磁盘分区对齐的方法。 更多信息 存储系统的磁道区域与lin x分区对齐问题: 出于最大化性能需求,任何到后端存储阵列的io需要通过配置适当的结构化,从而避免任何io操作跨界现象的发生。如果io操作跨越多个界限,会带来额外的资源开销从而造成性能下降。所以,为了避免因为分区不对齐所造成的性能影响。需要使用工fdisk或者parted工具创建和对齐分区。 如何选择一个正确的磁盘分区offset值,基本上emc和其他厂商建议的值都是"64kb"。为什么要选择64kb这个值呢,这里解释一下。首先讲一下一个叫做物理磁道区域的概念。因为对于不同类型的保护级别,也可以说叫raid和磁盘类型,这个区域的范围有所不同的。我们举两个个例子: symmetrix缓存中的磁道区域单位大小为一个track,即64个block、32kb大小。如图2所示,如果磁盘分区没有被对齐,则任何32kb或者更大的io就需要跨越两个track来进行,50%的16kb的io会可能会跨越两个track,25%的8kb也会跨越两个track,造成额外的存储系统性能开销。 图1 看了第一个例子,读者可能会想,那把起始位右移一个block就好了啊,(mbr+reserved=63block),就不会有跨track的io发生了。接下来我们再看另外一个例子。一个3+1 raid5的单个条带大小为四个track,即256个block、128kb大小。如果对于这类的磁盘,使用第64个block为起始位置,当lin x io大小达到64kb的时候,如果io直接从缓存(单个track为32kb),则正好完成两次读取。但是如果,两个连续的64kb io,且需要牵涉到后端raid5的物理磁盘读写,如下图所示,第二个64kb就会出现跨越两个条带的情况发生,从而倒是读或者写的开销加倍。 图2 在这种情况下,需要将起始位置调节成建议配置(64kb),这样一来,lin x最大io大小的情况也不会发生跨多个条带的情况发生了。(图3) 图3 所以说,无论是从存储系统的缓存从读取数据,还是io在缓存中不存在的情况,需要从底层物理磁盘上读取数据。对于不同类型的磁盘,64kb的起始为是一个建议配置。 lin x创建分区对齐方法: 描述了磁盘分区对齐的原理后,下面介绍如何使用fdisk创建对齐分区的例子。在lin x中,对齐分区操作需要要空数据的情况下进行,因为对齐分区操作会清空分区表并且该lun上的数据会被删除。在这个例子中,我们对devemcpowerfw设备,创建一个大小为 cylinder(cylinder是symmetrix的计量单位,每个cylinder大小为960kb,所以这个磁盘大小为50gb左右)、offset错位大小为128个block的磁盘设备。方法和命令输出(图4)如下: 方法1,使用fdisk创建分区对齐 lin x命令提示符下输入: # fdisk devemcpowerfw 输入n,创建一个分区； 输入p,创建分区为主分区； 输入起始cylinder位置,默认为第一个； 输入最后cylinder位置,默认为该磁盘设备的最后一个cylinder； 输入x进入expect mode； 输入b,一定分区初始位置； 设定最初位置为128个block(128 block大小为64kb)； 再次输入p确认分区初始位置信息； 输入w保存退出。 图4 方法2:使用parted创建对齐分区。parted和fdisk相比,支持更多的类型(支持gpt)和更大的分区尺寸。下面一个例子给出一个给devsdb磁盘创建128bloc分区起始位的例子,方法和命令输出如下 lin x命令提示符下输入: # parted devsdb 将显示单位调整为sector(大小512个字节): (parted) nit s 列出当前逻辑卷: (parted) print 将原来n mber1移除并且创建一个起始位为128 sector,小为 sector的主分区。 (parted) rm 1 (parted) mkpart primary 128  (parted) print 图5 上资料是由世贸人才计算机培训提供。