此文章理論部份內容大多數摘自網站 開心技術園 的一篇文章,但並作了一些修改與調整。理論部分原文連接:圖文並茂 RAID 技術全解 – RAID0、RAID一、RAID五、RAID100……
本文實驗部分,徹底由本人親自動手實踐得來
文章中有部分的內容是我我的經過實驗測試出來的,雖以目前本人的能力還沒發現不通之處,但錯誤不免,因此若各位朋友發現什麼錯誤,或有疑惑、更好的建議等,盼請各位能在評論區不吝留下寶貴筆跡。最後,但願各位能讀有所獲。
實驗環境html
[Allen@Centos7 ~]$ uname -r 3.10.0-693.el7.x86_64 [Allen@Centos7 ~]$ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
RAID(RedundantArrayofIndependentDisks)即獨立磁盤冗餘陣列,一般簡稱爲磁盤陣列。簡單地說,RAID是由多個獨立的高性能磁盤驅動器組成的磁盤子系統,從而提供比單個磁盤更高的存儲性能和數據冗餘的技術。RAID是一類多磁盤管理技術,其向主機環境提供了成本適中、數據可靠性高的高性能存儲。linux
RAID主要利用數據條帶、鏡像和數據校驗技術來獲取高性能、可靠性、容錯能力和擴展性,根據運用或組合運用這三種技術的策略和架構,能夠把RAID分爲不一樣的等級,以知足不一樣數據應用的需求。D.A.Patterson等的論文中定義了RAID1~RAID5原始RAID等級,1988年以來又擴展了RAID0和RAID6。近年來,存儲廠商不斷推出諸如RAID七、RAID10/0一、RAID50、RAID5三、RAID100等RAID等級,但這些並沒有統一的標準。目前業界公認的標準是RAID0~RAID5,除RAID2外的四個等級被定爲工業標準,而在實際應用領域中使用最多的RAID等級是RAID0、RAID一、RAID三、RAID五、RAID6和RAID10。算法
從實現角度看,RAID主要分爲軟RAID、硬RAID以及軟硬混合RAID三種。軟RAID全部功能均有操做系統和CPU來完成,沒有獨立的RAID控制/處理芯片和I/O處理芯片,效率天然最低。硬RAID配備了專門的RAID控制/處理芯片和I/O處理芯片以及陣列緩衝,不佔用CPU資源,但成本很高。軟硬混合RAID具有RAID控制/處理芯片,但缺少I/O處理芯片,須要CPU和驅動程序來完成,性能和成本在軟RAID和硬RAID之間。數據庫
RAID 每個等級表明一種實現方法和技術,等級之間並沒有高低之分。在實際應用中,應當根據用戶的數據應用特色,綜合考慮可用性、性能和成原本選擇合適的 RAID 等級,以及具體的實現方式。vim
RAID的兩個關鍵目標是提升數據可靠性和I/O性能。磁盤陣列中,數據分散在多個磁盤中,然而對於計算機系統來講,就像一個單獨的磁盤。經過把相同數據同時寫入到多塊磁盤(典型地如鏡像),或者將計算的校驗數據寫入陣列中來得到冗餘能力,當單塊磁盤出現故障時能夠保證不會致使數據丟失。緩存
磁盤陣列能夠在部分磁盤(單塊或多塊,根據實現而論)損壞的狀況下,仍能保證系統不中斷地連續運行。在重建故障磁盤數據至新磁盤的過程當中,系統能夠繼續正常運行,可是性能方面會有必定程度上的下降。一些磁盤陣列在添加或刪除磁盤時必須停機,而有些則支持熱交換(HotSwapping),容許不停機下替換磁盤驅動器。這種高端磁盤陣列主要用於要求高可能性的應用系統,系統不能停機或儘量少的停機時間。通常來講,RAID不可做爲數據備份的替代方案,它對非磁盤故障等形成的數據丟失無能爲力,好比病毒、人爲破壞、意外刪除等情形。此時的數據丟失是相對操做系統、文件系統、卷管理器或者應用系統來講的,對於RAID系統來身,數據都是無缺的,沒有發生丟失。因此,數據備份、災備等數據保護措施是很是必要的,與RAID相輔相成,保護數據在不一樣層次的安全性,防止發生數據丟失。安全
RAID中主要有三個關鍵概念和技術:鏡像(Mirroring)、數據條帶(DataStripping)和數據校驗(Dataparity)[3][4][5]。鏡像,將數據複製到多個磁盤,一方面能夠提升可靠性,另外一方面可併發從兩個或多個副本讀取數據來提升讀性能。顯而易見,鏡像的寫性能要稍低,確保數據正確地寫到多個磁盤須要更多的時間消耗。數據條帶,將數據分片保存在多個不一樣的磁盤,多個數據分片共同組成一個完整數據副本,這與鏡像的多個副本是不一樣的,它一般用於性能考慮。數據條帶具備更高的併發粒度,當訪問數據時,能夠同時對位於不一樣磁盤上數據進行讀寫操做,從而得到很是可觀的I/O性能提高。數據校驗,利用冗餘數據進行數據錯誤檢測和修復,冗餘數據一般採用海明碼、異或操做等算法來計算得到。利用校驗功能,能夠很大程度上提升磁盤陣列的可靠性、魯棒性和容錯能力。不過,數據校驗須要從多處讀取數據並進行計算和對比,會影響系統性能。不一樣等級的RAID採用一個或多個以上的三種技術,來得到不一樣的數據可靠性、可用性和I/O性能。至於設計何種RAID(甚至新的等級或類型)或採用何種模式的RAID,須要在深刻理解系統需求的前提下進行合理選擇,綜合評估可靠性、性能和成原本進行折中的選擇。服務器
整體說來,RAID主要優點有以下幾點:架構
鏡像是一種冗餘技術,爲磁盤提供保護功能,防止磁盤發生故障而形成數據丟失。對於RAID而言,採用鏡像技術典型地將會同時在陣列中產生兩個徹底相同的數據副本,分佈在兩個不一樣的磁盤驅動器組上。鏡像提供了徹底的數據冗餘能力,當一個數據副本失效不可用時,外部系統仍可正常訪問另外一副本,不會對應用系統運行和性能產生影響。並且,鏡像不須要額外的計算和校驗,故障修復很是快,直接複製便可。鏡像技術能夠從多個副本進行併發讀取數據,提供更高的讀I/O性能,但不能並行寫數據,寫多個副本會會致使必定的I/O性能下降。併發
鏡像技術提供了很是高的數據安全性,其代價也是很是昂貴的,須要至少雙倍的存儲空間。高成本限制了鏡像的普遍應用,主要應用於相當重要的數據保護,這種場合下數據丟失會形成巨大的損失。另外,鏡像經過「拆分」能得到特定時間點的上數據快照,從而能夠實現一種備份窗口幾乎爲零的數據備份技術。
磁盤存儲的性能瓶頸在於磁頭尋道定位,它是一種慢速機械運動,沒法與高速的CPU匹配。再者,單個磁盤驅動器性能存在物理極限,I/O性能很是有限。RAID由多塊磁盤組成,數據條帶技術將數據以塊的方式分佈存儲在多個磁盤中,從而能夠對數據進行併發處理。這樣寫入和讀取數據就能夠在多個磁盤上同時進行,併發產生很是高的聚合I/O,有效提升了總體I/O性能,並且具備良好的線性擴展性。這對大容量數據尤爲顯著,若是不分塊,數據只能按順序存儲在磁盤陣列的磁盤上,須要時再按順序讀取。而經過條帶技術,可得到數倍與順序訪問的性能提高。
數據條帶技術的分塊大小選擇很是關鍵。條帶粒度能夠是一個字節至幾KB大小,分塊越小,並行處理能力就越強,數據存取速度就越高,但同時就會增長塊存取的隨機性和塊尋址時間。實際應用中,要根據數據特徵和需求來選擇合適的分塊大小,在數據存取隨機性和併發處理能力之間進行平衡,以爭取儘量高的總體性能。
數據條帶是基於提升I/O性能而提出的,也就是說它只關注性能,而對數據可靠性、可用性沒有任何改善。實際上,其中任何一個數據條帶損壞都會致使整個數據不可用,採用數據條帶技術反而增長了數據發生丟失的概念率。
鏡像具備高安全性、高讀性能,但冗餘開銷太昂貴。數據條帶經過併發性來大幅提升性能,然而對數據安全性、可靠性未做考慮。數據校驗是一種冗餘技術,它用校驗數據來提供數據的安全,能夠檢測數據錯誤,並在能力容許的前提下進行數據重構。相對鏡像,數據校驗大幅縮減了冗餘開銷,用較小的代價換取了極佳的數據完整性和可靠性。數據條帶技術提供高性能,數據校驗提供數據安全性,RAID不一樣等級每每同時結合使用這兩種技術。
採用數據校驗時,RAID要在寫入數據同時進行校驗計算,並將獲得的校驗數據存儲在RAID成員磁盤中。校驗數據能夠集中保存在某個磁盤或分散存儲在多個不一樣磁盤中,甚至校驗數據也能夠分塊,不一樣RAID等級實現各不相同。當其中一部分數據出錯時,就能夠對剩餘數據和校驗數據進行反校驗計算重建丟失的數據。校驗技術相對於鏡像技術的優點在於節省大量開銷,但因爲每次數據讀寫都要進行大量的校驗運算,對計算機的運算速度要求很高,必須使用硬件RAID控制器。在數據重建恢復方面,檢驗技術比鏡像技術複雜得多且慢得多。
海明校驗碼和異或校驗是兩種最爲經常使用的數據校驗算法。海明校驗碼是由理查德.海明提出的,不只能檢測錯誤,還能給出錯誤位置並自動糾正。海明校驗的基本思想是:將有效信息按照某種規律分紅若干組,對每個組做奇偶測試並安排一個校驗位,從而能提供多位檢錯信息,以定位錯誤點並糾正。可見海明校驗實質上是一種多重奇偶校驗。異或校驗經過異或邏輯運算產生,將一個有效信息與一個給定的初始值進行異或運算,會獲得校驗信息。若是有效信息出現錯誤,經過校驗信息與初始值的異或運算能還原正確的有效信息。
RAID實現了什麼:
有了RAID還用作數據備份麼?
須要作的,由於raid只能防止磁盤故障,在磁盤故障的時候
RAID實現的方式:
JBOD(JustaBunchOfDisks)不是標準的RAID等級,它一般用來表示一個沒有控制軟件提供協調控制的磁盤集合。JBOD將多個物理磁盤串聯起來,提供一個巨大的邏輯磁盤。JBOD(如圖)的數據存放機制是由第一塊磁盤開始按順序日後存儲,當前磁盤存儲空間用完後,再依次日後面的磁盤存儲數據。JBOD存儲性能徹底等同於單塊磁盤,並且也不提供數據安全保護。它只是簡單提供一種擴展存儲空間的機制,JBOD可用存儲容量等於全部成員磁盤的存儲空間之和。目前JBOD常指磁盤櫃,而不論其是否提供RAID功能。
SNIA、Berkeley等組織機構把RAID0、RAID一、RAID二、RAID三、RAID四、RAID五、RAID6七個等級定爲標準的RAID等級,這也被業界和學術界所公認。標準等級是最基本的RAID配置集合,單獨或綜合利用數據條帶、鏡像和數據校驗技術。標準RAID能夠組合,即RAID組合等級,知足對性能、安全性、可靠性要求更高的存儲應用需求。[6][7][8][9][10][11]
RAID0是一種簡單的、無數據校驗的數據條帶化技術。實際上不是一種真正的RAID,由於它並不提供任何形式的冗餘策略。RAID0將所在磁盤條帶化後組成大容量的存儲空間(如圖所示),將數據分散存儲在全部磁盤中,以獨立訪問方式實現多塊磁盤的並讀訪問。因爲能夠併發執行I/O操做,總線帶寬獲得充分利用。再加上不須要進行數據校驗,RAID0的性能在全部RAID等級中是最高的。理論上講,一個由n塊磁盤組成的RAID0,它的讀寫性能是單個磁盤性能的n倍,但因爲總線帶寬等多種因素的限制,實際的性能提高低於理論值。
RAID0具備低成本、高讀寫性能、100%的高存儲空間利用率等優勢,可是它不提供數據冗餘保護,一旦數據損壞,將沒法恢復。所以,RAID0通常適用於對性能要求嚴格但對數據安全性和可靠性不高的應用,如視頻、音頻存儲、臨時數據緩存空間等。
RAID1稱爲鏡像,它將數據徹底一致地分別寫到工做磁盤和鏡像磁盤,它的磁盤空間利用率爲50%。RAID1在數據寫入時,響應時間會有所影響,可是讀數據的時候沒有影響。RAID1提供了最佳的數據保護,一旦工做磁盤發生故障,系統自動從鏡像磁盤讀取數據,不會影響用戶工做。工做原理如圖所示。
RAID1與RAID0恰好相反,是爲了加強數據安全性使兩塊磁盤數據呈現徹底鏡像,從而達到安全性好、技術簡單、管理方便。RAID1擁有徹底容錯的能力,但實現成本高。RAID1應用於對順序讀寫性能要求高以及對數據保護極爲重視的應用,如對郵件系統的數據保護。
RAID4與RAID3的原理大體相同,區別在於條帶化的方式不一樣。RAID4按照塊的方式來組織數據,寫操做只涉及當前數據盤和校驗盤兩個盤,多個I/O請求能夠同時獲得處理,提升了系統性能。RAID4按塊存儲能夠保證單塊的完整性,能夠避免受到其餘磁盤上同條帶產生的不利影響。
RAID4在不一樣磁盤上的同級數據塊一樣使用XOR校驗,結果存儲在校驗盤中。寫入數據時,RAID4按這種方式把各磁盤上的同級數據的校驗值寫入校驗盤,讀取時進行即時校驗。所以,當某塊磁盤的數據塊損壞,RAID4能夠經過校驗值以及其餘磁盤上的同級數據塊進行數據重建。假如所要讀取的數據塊正好位於失效磁盤,則系統須要讀取全部同一條帶的數據塊,並根據校驗值重建丟失的數據,提供給系統使用(這種工做模式叫作降級工做模式,不光讀取,其實寫也是能夠的,只不過風險太大),系統性能將受到影響。當故障磁盤被更換後,系統按相同的方式重建故障盤中的數據至新磁盤。
RAID4提供了很是好的讀性能,但單一的校驗盤每每成爲系統性能的瓶頸。對於寫操做,RAID4只能一個磁盤一個磁盤地寫,而且還要寫入校驗數據,所以寫性能比較差。並且隨着成員磁盤數量的增長,校驗盤的系統瓶頸將更加突出。正是如上這些限制和不足,RAID4在實際應用中不多見,主流存儲產品也不多使用RAID4保護。
RAID5應該是目前最多見的RAID等級,它的原理與RAID4類似,區別在於校驗數據分佈在陣列中的全部磁盤上,而沒有采用專門的校驗磁盤。對於數據和校驗數據,它們的寫操做能夠同時發生在徹底不一樣的磁盤上。所以,RAID5不存在RAID4中的併發寫操做時的校驗盤性能瓶頸問題。另外,RAID5還具有很好的擴展性。當陣列磁盤數量增長時,並行操做量的能力也隨之增加,可比RAID4支持更多的磁盤,從而擁有更高的容量以及更高的性能。
RAID5的磁盤上同時存儲數據和校驗數據,數據塊和對應的校驗信息存保存在不一樣的磁盤上,當一個數據盤損壞時,系統能夠根據同一條帶的其餘數據塊和對應的校驗數據來重建損壞的數據。與其餘RAID等級同樣,重建數據時,RAID5的性能會受到較大的影響。
RAID5兼顧存儲性能、數據安全和存儲成本等各方面因素,它能夠理解爲RAID0和RAID1的折中方案,是目前綜合性能最佳的數據保護解決方案。RAID5基本上能夠知足大部分的存儲應用需求,數據中心大多采用它做爲應用數據的保護方案。
前面所述的各個RAID等級都只能保護因單個磁盤失效而形成的數據丟失。若是兩個磁盤同時發生故障,數據將沒法恢復。RAID6引入雙重校驗的概念,它能夠保護陣列中同時出現兩個磁盤失效時,陣列仍可以繼續工做,不會發生數據丟失。RAID6等級是在RAID5的基礎上爲了進一步加強數據保護而設計的一種RAID方式,它能夠看做是一種擴展的RAID5等級。
RAID6不只要支持數據的恢復,還要支持校驗數據的恢復,所以實現代價很高,控制器的設計也比其餘等級更復雜、更昂貴。RAID6思想最多見的實現方式是採用兩個獨立的校驗算法,假設稱爲P和Q,校驗數據能夠分別存儲在兩個不一樣的校驗盤上,或者分散存儲在全部成員磁盤中。當兩個磁盤同時失效時,便可經過求解兩元方程來重建兩個磁盤上的數據。
RAID6具備快速的讀取性能、更高的容錯能力。可是,它的成本要高於RAID5許多,寫性能也較差,並有設計和實施很是複雜。所以,RAID6不多獲得實際應用,主要用於對數據安全等級要求很是高的場合。它通常是替代RAID10方案的經濟性選擇。
標準RAID等級各有優點和不足。天然地,咱們想到把多個RAID等級組合起來,實現優點互補,彌補相互的不足,從而達到在性能、數據安全性等指標上更高的RAID系統。目前在業界和學術研究中提到的RAID組合等級主要有RAID00、RAID0一、RAID十、RAID100、RAID30、RAID50、RAID5三、RAID60,但實際獲得較爲普遍應用的只有RAID01和RAID10兩個等級。固然,組合等級的實現成本通常都很是昂貴,只是在少數特定場合應用。
簡單地說,RAID00是由多個成員RAID0組成的高級RAID0。它與RAID0的區別在於,RAID0陣列替換了原先的成員磁盤。能夠把RAID00理解爲兩層條帶化結構的磁盤陣列,即對條帶再進行條帶化。這種陣列能夠提供更大的存儲容量、更高的I/O性能和更好的I/O負均衡。
RAID01是先作條帶化再做鏡像,本質是對物理磁盤實現鏡像;
而RAID10是先作鏡像再做條帶化,是對虛擬磁盤實現鏡像。
一般看做RAID1+0+0,有時也稱爲RAID10+0,即條帶化的RAID10。原理如圖所示。RAID100的缺陷與RAID10相同,任意一個RAID1損壞一個磁盤不會發生數據丟失,可是剩下的磁盤存在單點故障的危險。最頂層的RAID0,即條帶化任務,一般由軟件層來完成。
RAID100突破了單個RAID控制器對物理磁盤數量的限制,能夠得到更高的I/O負載均衡,I/O壓力分散到更多的磁盤上,進一步提升隨機讀性能,並有效下降熱點盤故障風險。所以,RAID100一般是大數據庫的最佳選擇。
這三種RAID等級與RAID00原理基本相同,區別在於成員「磁盤」換成了RAID三、RAID5和RAID6,分別如圖十一、十二、13所示。其中,RAID30一般又被稱爲RAID53。其實,可把這些等級RAID統稱爲RAIDX0等級,X可爲標準RAID等級,甚至組合等級(如RAID100)。利用多層RAID配置,充分利用RAIDX與RAID0的優勢,從而得到在存儲容量、數據安全性和I/O負載均衡等方面的大幅性能提高。
RAID30
RAID50
RAID60
RAID7的全稱是最優化的異步高I/O速率和高數據傳輸率,它與其餘RAID等級有着明顯區別。它不只僅是一種技術,它仍是一個獨立存儲計算機,自身帶的操做系統和管理工具,徹底能夠獨立運行。
RAID7的存儲計算機操做系統是一套實時事件驅動操做系統,其主要用來進行系統初始化和安排RAID7磁盤陣列的全部數據傳輸,並把它們轉換到相應的物理存儲驅動器上。RAID7經過自身系統中的專用控制板來控制讀寫速度,存儲計算機操做系統可以使主機I/O傳遞性能達到最佳。若是一個磁盤出現故障,RAID7還可以自動執行恢復操做,並可管理備份磁盤的重建過程。
RAID7突破了以往RAID標準的技術架構,採用了非同步訪問,極大地減輕了數據寫瓶頸,提升了I/O速度。RAID7系統內置實時操做系統還可自動對主機發送過來的讀寫指令進行優化處理,以智能化方式將可能被讀取的數據預先讀入快速緩存中,從而大大減小了磁頭的轉動次數,提升存儲系統的I/O速度。
RAID7可幫助用戶有效地管理日益龐大的數據存儲系統,並使系統的運行效率大大提升,知足不一樣用戶的存儲需求。可是,RAID7的成本比其餘RAID等級要高許多。另外,RAID7已被某公司註冊爲商標,目前僅有一家公司提供RAID7的產品,用戶沒有更多的選擇。技術封閉,缺少主流專業存儲廠商的參與和研發嚴重製約了RAID7的發展。
一般計算機功能既能夠由硬件來實現,也能夠由軟件來實現。對於RAID系統而言,天然也不例外,它能夠採用軟件方式實現,也能夠採用硬件方式實現,或者採用軟硬結合的方式實現。
軟RAID沒有專用的控制芯片和I/O芯片,徹底由操做系統和CPU來實現所的RAID的功能。現代操做系統基本上都提供軟RAID支持,經過在磁盤設備驅動程序上添加一個軟件層,提供一個物理驅動器與邏輯驅動器之間的抽象層。目前,操做系統支持的最多見的RAID等級有RAID0、RAID一、RAID十、RAID01和RAID5等。好比,WindowsServer支持RAID0、RAID1和RAID5三種等級,Linux支持RAID0、RAID一、RAID四、RAID五、RAID6等,MacOSXServer、FreeBSD、NetBSD、OpenBSD、Solaris等操做系統也都支持相應的RAID等級。
軟RAID的配置管理和數據恢復都比較簡單,可是RAID全部任務的處理徹底由CPU來完成,如計算校驗值,因此執行效率比較低下,這種方式須要消耗大量的運算資源,支持RAID模式較少,很難普遍應用。
軟RAID由操做系統來實現,所以系統所在分區不能做爲RAID的邏輯成員磁盤,軟RAID不能保護系統盤D。對於部分操做系統而言,RAID的配置信息保存在系統信息中,而不是單獨以文件形式保存在磁盤上。這樣當系統意外崩潰而須要從新安裝時,RAID信息就會丟失。另外,磁盤的容錯技術並不等於徹底支持在線更換、熱插拔或熱交換,可否支持錯誤磁盤的熱交換與操做系統實現相關,有的操做系統熱交換。
硬RAID擁有本身的RAID控制處理與I/O處理芯片,甚至還有陣列緩衝,對CPU的佔用率和總體性能是三類實現中最優的,但實現成本也最高的。硬RAID一般都支持熱交換技術,在系統運行下更換故障磁盤。
硬RAID包含RAID卡和主板上集成的RAID芯片,服務器平臺多采用RAID卡。RAID卡由RAID核心處理芯片(RAID卡上的CPU)、端口、緩存和電池4部分組成。其中,端口是指RAID卡支持的磁盤接口類型,如IDE/ATA、SCSI、SATA、SAS、FC等接口。
軟RAID性能欠佳,並且不能保護系統分區,所以很難應用於桌面系統。而硬RAID成本很是昂貴,不一樣RAID相互獨立,不具互操做性。所以,人們採起軟件與硬件結合的方式來實現RAID,從而得到在性能和成本上的一個折中,即較高的性價比。
這種RAID雖然採用了處理控制芯片,可是爲了節省成本,芯片每每比較廉價且處理能力較弱,RAID的任務處理大部分仍是經過固件驅動程序由CPU來完成。
Centos6/7上的軟件RAID實現:
結合內核中的md(multi devices)
manage MD devices aka Linux Software RAID
命令的語法格式:
madam [mode] <raiddevice> [options] <component-devices> <raiddevice>:/dev/md# <component-devices>:任意塊設備
支持的RAID級別:LINEAR、RAID0、RAID一、RAID四、RAID五、RAID六、RAID10
模式:
建立一個新的陣列:-C 裝配實現存在的陣列:-A 選擇監控模式:-F 管理:-f,-r,-a 增加,更改活動陣列的大小和狀態:-G
混合模式:
-S, --stop deactivate array, releasing all resources. ##停用陣列,釋放全部資源 -D, --detail Print details of one or more md devices. ##打印一個或多個md設備的詳細信息 --zero-superblock ##若是一個設備包含有效的md超級塊信息,這個塊信息會被零填充。加上--froce選項以後,即便塊信息不是有效的md信息也會被零填充。 If the device contains a valid md superblock, the block is overwritten with zeros. With --force the block where the superblock would be is overwritten even if it doesn't appear to be valid.
建立模式OPTIONS
-n # ##使用#個塊設備來建立此RAID(指定陣列的活動設備數量), 這裏的數量加上熱備設備必須等於 --create時在命令行列出的設備數量。 ##該值設置爲1時爲錯誤,須要加上--force參數。建立linear, multipath, RAID0 and RAID1時可設置值爲1, ##可是建立RAID4, RAID5 or RAID6時不可指定爲1。 ##若是內核支持,可使用--grow選項爲RAID1,RAID4,RAID5,RAID6增長磁盤數量 -l # ##指明要建立的RAID的級別 -e {yes|no} ##自動建立目標RAID設備的設備文件 -c CHUNK_SIZE ##指明塊大小,指定塊大小,默認爲512KB。RAID四、五、六、10須要塊大小爲2的次方,大多數狀況下必須是4KB的倍數,單位爲K、M、G -x # ##指定初始建立的陣列中熱備盤的數量,後續可對熱備盤添加或移除。 -a, --auto{=yes,md,mdp,part,p}{NN} ##如須要,指引mdadm如何建立設備文件,一般會配置一個未使用的設備編號。 ##若是在配置文件中或命令行中未給出--auto選項,默認狀況下爲--auto=yes. -a, --add ##該選項在兩種模式下可用在增加模式下
爲指定模式的命令:
-s, --scan ##從配置文件或者/proc/mdstat中尋找丟失的md信息
管理模式:
-f ##把列出的設備標記故障 -a ##熱添加列出的設備 -r ##移除列出的設備。其必須爲非活動的。即爲故障設備或熱備設備。
觀察md的狀態
cat /proc/mdstat
中止md設備
mdadm -S /dev/md#
使用3塊硬盤建立RAID5,外加1塊熱備盤,其chunk大小爲4M,RAID設備名字是md0
NOTE:(盤的個數越多,浪費的空間就越少)
##建立的磁盤分區,必須轉換成fd Linux raid auto(在fdisk中可經過t命令指定) ,不然的話可能不能用,即使是能用,也裝載不了配置。 [root@m01 ~]# fdisk -l /dev/sdb Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3a1866fc Device Boot Start End Blocks Id System /dev/sdb1 1 1305 10482381 5 Extended /dev/sdb5 1 132 1060227 fd Linux raid autodetect /dev/sdb6 133 264 1060258+ fd Linux raid autodetect /dev/sdb7 265 396 1060258+ fd Linux raid autodetect /dev/sdb8 397 528 1060258+ fd Linux raid autodetect ##使用3塊硬盤建立RAID5,外加1塊熱備盤,其chunk大小爲4M,RAID設備名字是md0 [root@m01 ~]# mdadm -C /dev/md0 -a yes -c 4M -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@m01 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 20G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 17.8G 0 part / sdb 8:16 0 10G 0 disk ├─sdb1 8:17 0 1K 0 part ├─sdb5 8:21 0 1G 0 part │ └─md0 9:0 0 2G 0 raid5 ├─sdb6 8:22 0 1G 0 part │ └─md0 9:0 0 2G 0 raid5 ├─sdb7 8:23 0 1G 0 part │ └─md0 9:0 0 2G 0 raid5 └─sdb8 8:24 0 1G 0 part └─md0 9:0 0 2G 0 raid5 ##查看raid信息信息 [root@m01 ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Aug 23 11:40:27 2018 Raid Level : raid5 Array Size : 2117632 (2.02 GiB 2.17 GB) Used Dev Size : 1058816 (1034.00 MiB 1084.23 MB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Aug 23 11:40:40 2018 State : clean Active Devices : 3 ##活動的設備 Working Devices : 4 ##工做的設備 Failed Devices : 0 ##錯誤的設備 Spare Devices : 1 ##空閒的設備 Layout : left-symmetric Chunk Size : 4096K Name : m01:0 (local to host m01) UUID : d3a7f800:2d343092:11964718:0ead8c4c Events : 18 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 1 8 22 1 active sync /dev/sdb6 4 8 23 2 active sync /dev/sdb7 3 8 24 - spare /dev/sdb8 ##作完raid以後 [root@m01 ~]# blkid | grep raid /dev/sdb5: UUID="d3a7f800-2d34-3092-1196-47180ead8c4c" UUID_SUB="738affe4-0d75-f4e0-0e53-b0840c99db45" LABEL="m01:0" TYPE="linux_raid_member" /dev/sdb6: UUID="d3a7f800-2d34-3092-1196-47180ead8c4c" UUID_SUB="758f7e71-0686-dcbc-9c54-4203ff42e9e8" LABEL="m01:0" TYPE="linux_raid_member" /dev/sdb7: UUID="d3a7f800-2d34-3092-1196-47180ead8c4c" UUID_SUB="a2824c94-a3dc-40cd-59ff-52ebc7010d6f" LABEL="m01:0" TYPE="linux_raid_member" /dev/sdb8: UUID="d3a7f800-2d34-3092-1196-47180ead8c4c" UUID_SUB="99a28761-0f9b-a1ab-def7-10b11312b3f8" LABEL="m01:0" TYPE="linux_raid_member" ##觀察md的狀態 [root@m01 ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md127 : active (auto-read-only) raid5 sdb5[0] sdb6[1] sdb7[4] sdb8[3](S) 2117632 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> ##重啓一次系統以後,發現md0這個名字變成了md127,因此說若是想要寫入到/etc/fstab中,必定要使用UUID進行掛載 [root@m01 ~]# mkfs.ext4 /dev/md127 [root@m01 ~]# mount /dev/md127 /mnt/ [root@m01 ~]# df -h ##空間是1.9G,不是2G了,可是不用管,空間偏差在10%之內都沒啥問題 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.7G 15G 11% / tmpfs 364M 0 364M 0% /dev/shm /dev/sda1 190M 32M 149M 18% /boot /dev/md127 2.0G 3.1M 1.9G 1% /mnt ##將/dev/sdb6標記爲損壞 [root@m01 ~]# mdadm /dev/md127 -f /dev/sdb6 mdadm: set /dev/sdb6 faulty in /dev/md127 [root@m01 ~]# cat /proc/mdstat ##能夠看到磁盤正在revocery ,剛建立RAID的時候也會recovery一次 Personalities : [raid6] [raid5] [raid4] md127 : active raid5 sdb5[0] sdb6[1](F) sdb7[4] sdb8[3] 2117632 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U] [====>................] recovery = 22.8% (242560/1058816) finish=0.1min speed=121280K/sec ##此時能夠看到,sdb8頂上來了,sdb6被標記爲錯誤 [root@m01 ~]# mdadm -D /dev/md127 /dev/md127: Version : 1.2 Creation Time : Thu Aug 23 14:00:33 2018 Raid Level : raid5 Array Size : 2117632 (2.02 GiB 2.17 GB) Used Dev Size : 1058816 (1034.00 MiB 1084.23 MB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Aug 23 14:56:25 2018 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : m01:0 (local to host m01) UUID : f8cd3a92:da0ef586:c11a4f1d:8887e949 Events : 39 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 3 8 24 1 active sync /dev/sdb8 4 8 23 2 active sync /dev/sdb7 1 8 22 - faulty /dev/sdb6 ##將sdb6移除,而後將sdb7標註爲錯誤(不標記爲錯誤直接移除的話顯示Device or resource busy) [root@m01 ~]# mdadm /dev/md127 -r /dev/sdb6 mdadm: hot removed /dev/sdb6 from /dev/md127 [root@m01 ~]# mdadm /dev/md127 -r /dev/sdb7 mdadm: hot remove failed for /dev/sdb7: Device or resource busy [root@m01 ~]# mdadm /dev/md127 -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/md127 [root@m01 ~]# mdadm /dev/md127 -r /dev/sdb7 mdadm: hot removed /dev/sdb7 from /dev/md127 ##此時查看md127的信息,發現狀態爲degraded狀態(降級模式) [root@m01 ~]# mdadm -D /dev/md127 /dev/md127: Version : 1.2 Creation Time : Thu Aug 23 14:00:33 2018 Raid Level : raid5 Array Size : 2117632 (2.02 GiB 2.17 GB) Used Dev Size : 1058816 (1034.00 MiB 1084.23 MB) Raid Devices : 3 Total Devices : 2 Persistence : Superblock is persistent Update Time : Thu Aug 23 15:02:48 2018 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : m01:0 (local to host m01) UUID : f8cd3a92:da0ef586:c11a4f1d:8887e949 Events : 43 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 3 8 24 1 active sync /dev/sdb8 4 0 0 4 removed ##添加sdb7到raid中 [root@m01 ~]# mdadm /dev/md127 -a /dev/sdb7 mdadm: added /dev/sdb7 ##顯示正在重建 [root@m01 ~]# mdadm -D /dev/md127 /dev/md127: Version : 1.2 Creation Time : Thu Aug 23 14:00:33 2018 Raid Level : raid5 Array Size : 2117632 (2.02 GiB 2.17 GB) Used Dev Size : 1058816 (1034.00 MiB 1084.23 MB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Thu Aug 23 15:08:27 2018 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 56% complete Name : m01:0 (local to host m01) UUID : f8cd3a92:da0ef586:c11a4f1d:8887e949 Events : 60 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb5 3 8 24 1 active sync /dev/sdb8 4 8 23 2 spare rebuilding /dev/sdb7
一、umount卸載RAID設備 [root@yufei ~]# umount /dev/md5 二、中止RAID設備 [root@yufei ~]# mdadm -S /dev/md5 mdadm: stopped /dev/md5 三、移除RAID裏面的磁盤 [root@yufei ~]# mdadm --misc --zero-superblock /dev/sde [root@yufei ~]# mdadm --misc --zero-superblock /dev/sdc [root@yufei ~]# mdadm --misc --zero-superblock /dev/sdd [root@yufei ~]# mdadm --misc --zero-superblock /dev/sdf 四、刪除相關配置文件裏面的RAID信息 [root@yufei ~]# vim /etc/mdadm.conf 把咱們增長的這一行刪除 ARRAY /dev/md5 metadata=1.2 spares=1 name=yufei:5 UUID=69443d97:7e32415d:7f3843c5:4d5015cf [root@yufei ~]# vim /etc/fstab 把咱們增長的這一行刪除 /dev/md5 /mnt ext4 defaults 0 0