磁盤(pán)分區(qū)對(duì)齊詳解與配置 – Linux篇
介紹
在之前一篇《磁盤(pán)分區(qū)對(duì)齊詳解與配置 – Windows篇》中,我介紹了磁盤(pán)分區(qū)對(duì)齊的作用和適用于MBR和GPT的兩種磁盤(pán)類型的配置,以及Windows平臺(tái)設(shè)置磁盤(pán)分區(qū)對(duì)齊的方法。本文作為系列的第二篇,文章就分區(qū)對(duì)齊在存儲(chǔ)系統(tǒng)緩存和Raid5下I/O分析,解釋了為什么64KB作為offset錯(cuò)位的推薦配置。并且提供了使用Linux命令fdisk和parted創(chuàng)建磁盤(pán)分區(qū)對(duì)齊的方法。
更多信息
存儲(chǔ)系統(tǒng)的磁道區(qū)域與Linux分區(qū)對(duì)齊問(wèn)題:
出于***化性能需求,任何到后端存儲(chǔ)陣列的I/O需要通過(guò)配置適當(dāng)?shù)慕Y(jié)構(gòu)化,從而避免任何I/O操作跨界現(xiàn)象的發(fā)生。如果I/O操作跨越多個(gè)界限,會(huì)帶來(lái)額外的資源開(kāi)銷從而造成性能下降。所以,為了避免因?yàn)榉謪^(qū)不對(duì)齊所造成的性能影響。需要使用工fdisk或者parted工具創(chuàng)建和對(duì)齊分區(qū)。
如何選擇一個(gè)正確的磁盤(pán)分區(qū)offset值,基本上EMC和其他廠商建議的值都是“64KB”。為什么要選擇64KB這個(gè)值呢,這里解釋一下。首先講一下一個(gè)叫做物理磁道區(qū)域的概念。因?yàn)閷?duì)于不同類型的保護(hù)級(jí)別,也可以說(shuō)叫Raid和磁盤(pán)類型,這個(gè)區(qū)域的范圍有所不同的。我們舉兩個(gè)個(gè)例子:
Symmetrix緩存中的磁道區(qū)域單位大小為一個(gè)Track,即64個(gè)Block、32KB大小。如圖2所示,如果磁盤(pán)分區(qū)沒(méi)有被對(duì)齊,則任何32KB或者更大的I/O就需要跨越兩個(gè)Track來(lái)進(jìn)行,50%的16KB的I/O會(huì)可能會(huì)跨越兩個(gè)Track,25%的8KB也會(huì)跨越兩個(gè)Track,造成額外的存儲(chǔ)系統(tǒng)性能開(kāi)銷。
圖1
看了***個(gè)例子,讀者可能會(huì)想,那把起始位右移一個(gè)Block就好了啊,(MBR+Reserved=63Block),就不會(huì)有跨Track的I/O發(fā)生了。接下來(lái)我們?cè)倏戳硗庖粋€(gè)例子。一個(gè)3+1 Raid5的單個(gè)條帶大小為四個(gè)Track,即256個(gè)Block、128KB大小。如果對(duì)于這類的磁盤(pán),使用第64個(gè)block為起始位置,當(dāng)linux I/O大小達(dá)到64KB的時(shí)候,如果I/O直接從緩存(單個(gè)track為32KB),則正好完成兩次讀取。但是如果,兩個(gè)連續(xù)的64KB I/O,且需要牽涉到后端Raid5的物理磁盤(pán)讀寫(xiě),如下圖所示,第二個(gè)64KB就會(huì)出現(xiàn)跨越兩個(gè)條帶的情況發(fā)生,從而倒是讀或者寫(xiě)的開(kāi)銷加倍。
圖2
在這種情況下,需要將起始位置調(diào)節(jié)成建議配置(64KB),這樣一來(lái),Linux***I/O大小的情況也不會(huì)發(fā)生跨多個(gè)條帶的情況發(fā)生了。(圖3)
圖3
所以說(shuō),無(wú)論是從存儲(chǔ)系統(tǒng)的緩存從讀取數(shù)據(jù),還是I/O在緩存中不存在的情況,需要從底層物理磁盤(pán)上讀取數(shù)據(jù)。對(duì)于不同類型的磁盤(pán),64KB的起始為是一個(gè)建議配置。
Linux創(chuàng)建分區(qū)對(duì)齊方法:
描述了磁盤(pán)分區(qū)對(duì)齊的原理后,下面介紹如何使用fdisk創(chuàng)建對(duì)齊分區(qū)的例子。在Linux中,對(duì)齊分區(qū)操作需要要空數(shù)據(jù)的情況下進(jìn)行,因?yàn)閷?duì)齊分區(qū)操作會(huì)清空分區(qū)表并且該LUN上的數(shù)據(jù)會(huì)被刪除。在這個(gè)例子中,我們對(duì)/dev/emcpowerfw設(shè)備,創(chuàng)建一個(gè)大小為51281 Cylinder(Cylinder是Symmetrix的計(jì)量單位,每個(gè)Cylinder大小為960KB,所以這個(gè)磁盤(pán)大小為50GB左右)、Offset錯(cuò)位大小為128個(gè)block的磁盤(pán)設(shè)備。方法和命令輸出(圖4)如下:
方法1,使用fdisk創(chuàng)建分區(qū)對(duì)齊
Linux命令提示符下輸入:
- # fdisk /dev/emcpowerfw
- 輸入n,創(chuàng)建一個(gè)分區(qū);
- 輸入p,創(chuàng)建分區(qū)為主分區(qū);
- 輸入起始Cylinder位置,默認(rèn)為***個(gè);
- 輸入***Cylinder位置,默認(rèn)為該磁盤(pán)設(shè)備的***一個(gè)Cylinder;
- 輸入x進(jìn)入expect mode;
- 輸入b,一定分區(qū)初始位置;
- 設(shè)定最初位置為128個(gè)block(128 block大小為64KB);
- 再次輸入p確認(rèn)分區(qū)初始位置信息;
- 輸入w保存退出。
圖4
方法2:使用parted創(chuàng)建對(duì)齊分區(qū)。Parted和fdisk相比,支持更多的類型(支持GPT)和更大的分區(qū)尺寸。下面一個(gè)例子給出一個(gè)給dev/sdb磁盤(pán)創(chuàng)建128bloc分區(qū)起始位的例子,方法和命令輸出如下
Linux命令提示符下輸入:
- # parted /dev/sdb
將顯示單位調(diào)整為Sector(大小512個(gè)字節(jié)):
- (parted) unit s
列出當(dāng)前邏輯卷:
- (parted) print
將原來(lái)Number1移除并且創(chuàng)建一個(gè)起始位為128 sector,小為976735934 sector的主分區(qū)。
- (parted) rm 1
- (parted) mkpart primary 128 976735934
- (parted) print
圖5
參考
Parted命令手冊(cè)及參數(shù):http://www.gnu.org/software/parted/manual/parted.html#unit
Fdisk命令手冊(cè)及參數(shù):http://manpages.courier-mta.org/htmlman8/fdisk.8.html
EMC-Host-Connectivity-Guide-for-Linux
《磁盤(pán)分區(qū)對(duì)齊詳解與配置 – Windows篇》
應(yīng)用于
Linux Operation System
EMC Symmetrix,VNX,Clarriion存儲(chǔ)系列
原文出處: EMC中文支持論壇