磁盤分區對齊的重要性
這幾年新出的硬盤由于既要增加每個扇區的存儲空間,又要保證和現有操作系統的兼容,所以出現了物理扇區和邏輯扇區的概念。而這樣的硬盤可能會產生分區對齊問題。沒有做分區對齊的硬盤性能會受到一定的影響。
下面寫文章來說明不做分區對齊對分區性能的影響和如何做分區對齊。
先普及幾個概念:
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“,說明這種分區方法使分區的性能損失,為什么呢?
如下圖所示,一圈代表一個物理扇區,用黑線分割成了8個邏輯扇區。沒有做分區對齊的分區就類似于把分區起始LBA放置在了紅線位置。這樣會導致什么后果?有100%的block跨越物理扇區,處理任何該分區下的文檔都會包含至少一個跨越物理扇區的block,磁盤跨扇區訪問每個block,這樣勢必會影響文件系統的I/O性能。0-100%的分區行為就是因為分區的起始位置沒有在單個扇區的起始位置才會產生waring。
大概明白了吧?我們需要把分區的起始位置放置在扇區的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的磁盤,一般不用考慮分區對齊問題。