圖1

看了第一個例子,讀者可能會想,那把起始位右移一個Block就好了啊,(MBR+Reserved=63Block),就不會有跨Track的I/O發(fā)生了。接下來我們再看另外一個例子。一個3+1 Raid5的單個條帶大小為四個Track,即256個Block、128KB大小。如果對于這類的磁盤,使用第64個block為起始位置,當linux I/O大小達到64KB的時候,如果I/O直接從緩存(單個track為32KB),則正好完成兩次讀取。但是如果,兩個連續(xù)的64KB I/O,且需要牽涉到后端Raid5的物理磁盤讀寫,如下圖所示,第二個64KB就會出現(xiàn)跨越兩個條帶的情況發(fā)生,從而倒是讀或者寫的開銷加倍。

圖2

在這種情況下,需要將起始位置調(diào)節(jié)成建議配置(64KB),這樣一來,Linux最大I/O大小的情況也不會發(fā)生跨多個條帶的情況發(fā)生了。(圖3)

圖3

所以說,無論是從存儲系統(tǒng)的緩存從讀取數(shù)據(jù),還是I/O在緩存中不存在的情況,需要從底層物理磁盤上讀取數(shù)據(jù)。對于不同類型的磁盤,64KB的起始為是一個建議配置。

Linux創(chuàng)建分區(qū)對齊方法:

描述了磁盤分區(qū)對齊的原理后,下面介紹如何使用fdisk創(chuàng)建對齊分區(qū)的例子。在Linux中,對齊分區(qū)操作需要要空數(shù)據(jù)的情況下進行,因為對齊分區(qū)操作會清空分區(qū)表并且該LUN上的數(shù)據(jù)會被刪除。在這個例子中,我們對/dev/emcpowerfw設(shè)備,創(chuàng)建一個大小為51281 Cylinder(Cylinder是Symmetrix的計量單位,每個Cylinder大小為960KB,所以這個磁盤大小為50GB左右)、Offset錯位大小為128個block的磁盤設(shè)備。方法和命令輸出(圖4)如下

方法1,使用fdisk創(chuàng)建分區(qū)對齊

Linux命令提示符下輸入:

# fdisk /dev/emcpowerfw

輸入n,創(chuàng)建一個分區(qū):

輸入p,創(chuàng)建分區(qū)為主分區(qū):

輸入起始Cylinder位置,默認為第一個:

輸入最后Cylinder位置,默認為該磁盤設(shè)備的最后一個Cylinder:

輸入x進入expect mode:

輸入b,一定分區(qū)初始位置:

設(shè)定最初位置為128個block(128 block大小為64KB):

再次輸入p確認分區(qū)初始位置信息:

輸入w保存退出:

圖4

方法2:使用parted創(chuàng)建對齊分區(qū)。Parted和fdisk相比,支持更多的類型(支持GPT)和更大的分區(qū)尺寸。下面一個例子給出一個給dev/sdb磁盤創(chuàng)建128bloc分區(qū)起始位的例子,方法和命令輸出如下(圖5)

Linux命令提示符下輸入:

# parted /dev/sdb

將顯示單位調(diào)整為Sector(大小512個字節(jié)):

(parted) unit s

列出當前邏輯卷:

(parted) print

將原來Number1移除并且創(chuàng)建一個起始位為128 sector,小為976735934 sector的主分區(qū)。

(parted) rm 1

(parted) mkpart primary 128 976735934

(parted) print

圖5

分享到

huanghui

相關(guān)推薦