容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。http://shitao123.blog.51cto.com/3873637/1206313php
RAIDlinux
1、軟RAID vs 硬RAID:
a> 軟RAID是一個OS中物理磁盤和邏輯磁盤之間的一個抽象層,這個抽象層會耗費一些CPU資源。硬RAID則沒有這個問題;
b> 硬RAID能夠支持熱拔插磁盤,這樣帶來的好處是能夠在線換掉損壞的磁盤。但新一代的SATA軟RAID也能夠支持熱拔插(拔以前先要命令行移除);
c> 硬RAID一般還有一些廠商額外提供的功能;
d> 硬RAID須要專門的獨立設備,這意味着多付出錢;算法
2、半硬半軟RAID,除了軟RAID和硬RAID還有這種一種存在。它是把IO工做交給CPU去完成,它們通常不支持RAID5;緩存
3、組軟RAID時要注意mkfs的block值和步進值(後有詳述);數據結構
4、RAID 0:
a> 非嵌套式RAID中性能最好的;
b> 並不是只是2塊盤能夠組RAID 0,三塊或更多均可以,可是性能是有邊際效應的(也就是說,假設一個軟盤的性能是50MB每秒,兩個軟盤的RAID 0性能約96MB每秒,三個軟盤的RAID 0也許是130MB每秒而不是150MB每秒);
c> 容量=最小那塊的磁盤的容量 x 磁盤數(有一些軟件RAID能夠作到不受此限制,linux的實現就能夠),存儲效率100%;
d> 一塊盤壞,全部數據完蛋;
e> 注意:讀性能並不會獲得寫性能那麼樣大的提高,主要提高的是寫性能;
f> 應用場景:非關鍵數據、不常常寫入的而又須要高速寫入性能的備份數據;多線程
5、RAID 1:
a> 鏡像。能夠由2個以上磁盤組成,數據被複制到組裏的每一塊盤,只要還有一塊沒壞,數據就不丟失,可靠性最強;
b> 只算陣列中最小的那塊盤的容量,存儲效率(100/N)%,N爲陣列中磁盤的數量。是全部RAID中利用率最低的;
c> 最少由2塊,或者更多的磁盤組成(建議2塊);
d> 寫性能微小下降,讀性能大幅加強(若是是軟RAID須要多線程操做系統才能加強,如Linux);
e> 組內的磁盤需性能相近(最好是同樣的盤),這樣負載才均衡;
f> 能夠做爲一種熱備份的方案(往RAID 1中加入磁盤,同步好後拔下來就是一個備份盤了);
g> 應用場景:要求高冗餘,而對成本、性能、容量不那麼敏感的場景;異步
6、RAID 2:
a> RAID 0的改良版;
b> 最少3塊磁盤才能組成,
c> 將數據編碼(Hamming Code)後分散到每塊盤;
d> 加入ECC校驗碼,因此要比RAID 0多耗費一些磁盤空間;ide
7、RAID 3:
a> 也是將數據編碼後分散到不一樣的物理磁盤;
b> 使用Bit-interleaving(數據交錯存儲)的方式將數據分散;
c> 將可用於恢復的校驗值寫入單獨的另外一塊磁盤;
d> 因爲使用bit分區,每讀一點數據均可能須要開動讀全部的磁盤,所以很適合大數據量的讀取;性能
8、RAID 4:
a> 大部分是和RAID 3同樣的;
b> 不一樣的地方是它使用Block-interleaving而非Bit-interleaving作數據分區;
c> 不管讀寫什麼哪塊磁盤上的數據,校驗盤均須要被讀寫,所以這塊校驗盤的負載明顯高於其它盤,所以校驗盤十分容易損壞;大數據
9、RAID 5:
a> 使用Disk Striping進行數據分區。分區的方式有左對稱、左非對稱、右對稱,RHEL默認選擇左對稱,由於少一次尋址,這是讀性能最高的選擇;
b> 不存儲數據副本,而是存儲一個校驗值(好比說使用XOR,實際也是XOR),當數據塊丟失,根據剩下的同組的數據塊和校驗值來恢復數據;
c> 校驗值被分散到每一塊磁盤而非單獨一塊磁盤上,這樣避免了某一塊磁盤的負載明顯高於或低於其餘盤;
d> 至少須要2塊盤來組成,性能和冗餘性都有必定提高,是RAID 0和RAID 1的折中選擇;
e> 存儲利用率很高,爲100 x (1 – 1/N)%,N爲物理磁盤數量,至關於耗費一塊盤的容量,可是這個耗費的容量是分散在每塊盤裏的,而不是某一塊物理盤;
f> 性能能夠經過調整條帶大小來調解(分配讀寫條帶);
g> 壞掉1塊盤,還能夠重建數據,但因爲重建(degraded)數據須要經過校驗值計算得出,所以重建過程當中性能會急劇降低。且重建是個較長的過程;
h> 應用場景:較高的讀性能要求,較少的寫性能要求,低成本的考慮;
10、RAID5的寫入性能不好,由於每次寫入實際都將觸發4次(以上)的I/O,雖然cache機制會減少實際的I/O開銷。過程以下:
a> 即將被寫入的數據從磁盤中被讀出;
b> 寫入數據,但此時校驗值還未更新;
c> 把同組全部塊的數據都讀進來,把校驗塊讀進來;
d> 計算校驗值並將新校驗值寫回校驗塊;
11、RAID 6:
a> 包括分區在內的各類機制和RAID5基本相同;
b> 不一樣在於它會保存2個由不一樣算法(課本上說是不一樣的分組方式,如1-3算值1、2-4算值2)算出的校驗值,這樣就會消耗2塊盤的容量(也是分散在各個盤的);
c> 最少由4塊盤組成,容許同時壞2盤;
d> 冗餘程度比RAID 5更高,同時寫入性能比RAID 5更爛(事實上因爲會引起不少次實際I/O,很是爛);
e> 存儲利用率爲100 x (1 – 2/N)%,N爲物理磁盤數量;
f> 重建速度比RAID 5塊,重建時性能優於RAID 5,重建時失敗的風險比RAID 5低(RAID 5在重建過程當中因爲壓力很大容易再壞掉一塊盤);
e> 應用場景:需求比RAID 5更高的冗餘保護,需求較高讀性能較低寫性能,低成本的考慮;
12、RAID 7:
RAID 7並不是公開的RAID標準,而是Storage Computer Corporation的專利硬體產品名稱,RAID 7是以RAID 3及RAID 4爲基礎所開發,可是通過強化以解決原來的一些限制。另外,在實做中使用大量的高速緩存記憶體以及用以實現異步陣列管理的專用即時處理器,使得RAID 7能夠同時處理大量的IO要求,因此性能甚至超越了許多其餘RAID標準的實做產品。但也由於如此,在價格方面很是的高昂。(直接摘自http://zh.wikipedia.org/wiki/RAID#RAID_7)
13、RAID 10:
a> 嵌套式RAID,可細分爲1+0和0+1;
b> 須要至少4塊磁盤組成,存儲效率爲(100/N)%,N爲鏡像數;
c> 性能和冗餘兼顧,就是利用率稍低;
d> 建立軟RAID 10時通常先建立2個RAID 1,而後在此基礎上建立RAID 10;
14、嵌套式RAID通常還有RAID 50和RAID 53;
15、較少實際應用的RAID是RAID2、3、4,由於RAID5已經涵蓋了所需的功能。所以RAID2、3、4大多隻在研究領域有實現,而實際應用上則以RAID5或RAID6爲主。
16、RAID DP(dual parity)是NetApp公司設計的系統,是使用RAID4(而非傳說的RAID 6,由於它的校驗盤是獨立的)的設計概念,儘可能每次只與2塊盤打交道。此種RAID和RAID 6同樣也容許同時壞2塊盤,它們開發多年的文件系統WAFL爲RAID DP作了專門優化,效率高於RAID 6;
17、優化RAID參數(條帶化參數):
a> 調整條帶化參數對RAID有很大的影響,適用於RAID 0、RAID 5、RAID 6;
b> chunk-size。RAID寫滿一個chunk size纔會移動到下一塊磁盤去,有時候它直接就是條帶化的粒度。chunk size應該是block size的整數倍;
c> 減少chunk-size意味着文件會分紅更多片,分佈在更多的物理磁盤上。這樣會提升傳輸效率,可是可能會下降定位尋道的效率(有些硬件實現會等填滿一個條帶才真正寫入,這樣會抵消一些定位尋道的消耗);
d> 增大chunk-size會獲得以上相反的效果;
e> stride(步進值)是類ext2文件系統的一個值,用於在類ext2數據結構裏seek,它這樣指定:mke2fs -E stride=N。N(也就是步進值)應該被指定爲 chunk-size / filesystem block size(文件系統的block size)。(mke2fs -j-b 4096 -E stride=16 /dev/md0)
f> 以上2個值調校對了,能夠提升RAID的在多個磁盤上的並行效率,從而讓整個RAID的性能隨物理磁盤數量提高而提高;
18、更多RAID原理可見http://blog.chinaunix.net/space.php?uid=20023853&do=blog&id=1738605;
19、軟RAID的信息可在系統中如下幾個地方查看:
a> /proc/mdstat。這裏方便看新建、重建的進度條,以及哪塊盤壞了等;
b> mdadm –detail /dev/md0。顯示詳細信息;
c> /sys/block/mdX/md。這裏方便看到cache_size等信息(別處沒有的);
20、Major/Minor號。linux系統中前者表明設備類型/驅動,後者是同種類型/驅動的多個設備在系統中的ID號;
21、RAID技術最初由IBM公司而非貝爾實驗室發明(http://en.wikipedia.org/wiki/RAID#History);
22、RAID是支持在線擴容的;
23、硬盤出場基本都是有壞道的,可是廠商會預留一部分磁道(並且一般在外圈)出來以頂替壞道消耗的容量。相較而言,企業級硬盤預留的容量較家用級硬盤大,這是它更貴壽命更長的緣由之一;
24、RHEL下軟RAID的配置文件(用於開機自動發現RAID)在/etc/mdadm.conf。此文件能夠這麼生成:mdadm–verbose –examine –scan > /etc/mdadm.conf。此文件中還需配置RAID壞了時如何mail通知管理員;
25、Critical Section中存儲了RAID中數據的MeteData。它是元數據,若是它丟了,RAID中的數據就全丟了。各類RAID中,只有RAID 1的CriticalSection是寫在磁盤尾上的(其它都寫在磁盤頭),所以RAID 1較爲適合作系統盤(易恢復MeteData)。
26、軟RAID重組(reshape)(比方說往裏加盤,或是更改chunk size或RAID級別)時,若是想保留原數據,則備份Critical Section十分重要。重組的內部過程是這樣的:
a> 將RAID設爲只讀;
b> 備份Critical Section;
c> 重定義RAID;
d> 成功的話刪除原Critical Section,恢復可寫;
27、最好手工指定CriticalSection備份位置(最好備份到將要改變的RAID以外的地方),由於若是reshape失敗CriticalSection是須要手工恢復的。若是沒有手工制定位置,Critical Section會被存在RAID的備盤上,若是RAID沒有備盤則會存放在內存中(易丟失,危險);
28、若是RAID改變了(好比拉伸),記得之上的filesystem也要作出相應的改變(好比說拉神);
29、系統啓動腳本rc.sysinit中啓動服務的順序默認是這樣的:udev->selinux->time->hostname->lvm->軟RAID。因此在lvm上作RAID比較合理,除非手動改啓動腳本;
30、擴大RAID 5的容量,能夠經過逐步把RAID 5中的每塊硬盤換成更大容量的盤的方式來完成(別忘記resize filesystem);
31、同臺機器上不一樣的軟RAID組間能夠共享備盤;
32、若是要在機器間遷移軟RAID,記得遷移以前要把要遷移的RAID改爲一個目標機器上不存在(也就不衝突)的RAID設備名(mdX)。更名的時候能夠用Minor號來指認要更名的RAID;
33、Bitmap用於記錄本塊物理磁盤的每一個block是否跟整個RAID同步着呢。它會被週期性地寫入。啓用它能夠極大加快RAID的恢復過程;
34、Bitmap能夠存放在RAID內或RAID外。若是告訴RAID把Bitmap存在RAID外,給的絕對路徑又是在RAID內的,RAID會死鎖。若是存在RAID外的話,只支持extX的文件系統;
35、在活動的RAID上加Bitmap的前提是它的Superblock是好的;
36、能夠啓用Write Behind機制,若是啓用了Bitmap的話。這樣就會在指定磁盤成功寫入後就會給應用程序返回成功,另外的盤會異步寫入數據,這對RAID 1特別有用;
37、RAID機制不會去主動檢測壞塊。只有在被迫讀到壞塊讀不出來時它纔會去嘗試修復(找備塊替代),要是那磁盤修復不了了(備塊用光了),那就會把那塊盤標誌爲錯誤,而後踢出RAID,啓用備盤;
38、由於RAID對壞塊是消極處理的,因此在RAID5重建的過程當中就頗有可能發現隱藏的壞塊,從而致使RAID恢復失敗。磁盤容量越大,此風險越大;
39、用crontab按期檢查一下RAID壞塊是個不錯的建議。在Kernel2.6.16後咱們能夠這樣觸發檢查:echo check >> /sys/block/mdX/md/sync_action。
容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。http://shitao123.blog.51cto.com/3873637/1206313