NoOps

Ops make no ops | Ops的目标是没有Ops,嗯!

磁盘分区对齐的重要性

作者: |   2,909 浏览  | 

  这几年新出的硬盘由于既要增加每个扇区的存储空间,又要保证和现有操作系统的兼容,所以出现了物理扇区和逻辑扇区的概念。而这样的硬盘可能会产生分区对齐问题。没有做分区对齐的硬盘性能会受到一定的影响
  下面写文章来说明不做分区对齐对分区性能的影响和如何做分区对齐
先普及几个概念:
physical sector:磁盘的一个物理扇区,目前大硬盘一般为4096bytes(4KB),其他的有512bytes(0.5KB)的
logical sector:现在physical sector是4096的硬盘往往会把一个physical sector分成8个logical sector,每个512bytes(0.5KB),系统实际操作logical sector:划分logical sector的原因是有些系统调用还不支持sector为4096bytes(4KB)的磁盘
LBA:逻辑块寻址方法,实际中表现为系统中用来定位磁盘的logical sector的一个逻辑地址
block size:系统内对分区格式化后划分的最小磁盘单元
举例:
以一个2T的硬盘为例
查看磁盘physical sector size、logical sector size和容量


# hdparm -I /dev/sdj|egrep -i "physical|logical|device size with M"
Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes
device size with M = 1024*1024:     1907729 MBytes
device size with M = 1000*1000:     2000398 MBytes (2000 GB)

说明每个physical sector 里有8个logical sector

查看文件系统的block size


# tune2fs -l /dev/sdj1|grep "Block size:"
Block size:               4096

我们在给这个磁盘做分区的时候,如果选择0-100%,则会提示”warning:partition is not properly aligned for best performance“,说明这种分区方法使分区的性能损失,为什么呢?
如下图所示,一圈代表一个物理扇区(后来查到其实一圈有很多歌扇区,比如256个),用黑线分割成了8个逻辑扇区。没有做分区对齐的分区就类似于把分区起始LBA放置在了红线位置。这样会导致什么后果?有100%的block跨越物理扇区,处理任何该分区下的文档都会包含至少一个跨越物理扇区的block,磁盘跨扇区访问每个block,这样势必会影响文件系统的I/O性能。0-100%的分区行为就是因为分区的起始位置没有在单个扇区的起始位置才会产生waring
2
大概明白了吧?我们需要把分区的起始位置放置在扇区的0,才能保证每个block占用一个独立的扇区,访问单独的block就不需要跨越扇区了。可不要小看这访问block跨扇区的动作,在有大量磁盘I/O操作时,对磁盘性能的影响还是很显著的。
对于以上磁盘的情况,我们可以如下分区


#parted /dev/sdj
unit s
mkpart
ext4
40s
100%

注意这里40s的意思是起始LBA位置为40 logical sector,恰好是一个physical的开始(40/8=5)
对于physical sector size = logical sector size的磁盘,一般不用考虑分区对齐问题

One Comment

  1. wilbur
    2013/07/29 at 11:00 上午

    1024 :)

wilbur 进行回复 取消回复