前言
磁碟是計算機儲存裝置中讀寫能力最慢的一環,能利用有限的成本提高磁碟讀寫能力這一技術尤為重要。特別是在當下大資料環境下,磁碟的讀寫能力以及可靠性越來越受到重視。
raid(redundant arrays of independent disks)是解決這一問題的重要技術之一,它是由美國加利福尼亞大學伯克利分校於2023年在一篇名為 「a case for redundant arrays of inexpensive disks」 的文章中提出。raid技術的本質是將多個硬碟組合成乙個硬碟使用,它包括了對磁碟讀寫能力提公升、磁碟可靠性的一些解決手段,這些手段被劃分為不同的級別。
而實現這些手段的方法通常採用外接式磁碟陣列,即使用外部擴充套件硬體將多個磁碟連線組合,並提供乙個統一的介面連線計算機,或是計算機主機板已經提供了一些raid介面,以供使用者直接接入多個磁碟,由主機板自行對這些磁碟進行組合,並在bios介面進行配置。還有一種方法則是在軟體層面實現raid,下面簡單介紹一些常用的級別。
注意:raid 技術只是針對於磁碟本身提供冗餘能力,並不能針對資料。如果誤刪資料,同樣盤組其他磁碟資料同樣會被刪除,它只有在磁碟被損壞或不能正常工作時起到資料冗餘的功能。
raid級別
raid 0:strip(條帶卷),將待存資料切割為多個chunk,分散存入下層磁碟組中的各個磁碟。
優點:能提高讀寫能力
缺點:降低了可靠性,只要其中一塊硬碟出錯,整個資料就會損壞。
磁碟利用率:以最小磁碟大小為基準,乘以組合中磁碟數量。例如有10g,20g,40g三塊磁碟組合為raid 0,最終實際可用空間為 10g*3 = 30g。
raid 1:mirror(映象卷),將待存資料在磁碟組中的每個磁碟中各存乙份。
優點:磁碟可靠性得到保障,磁碟越多,冗餘能力越強。部分磁碟出錯,不會導致資料損壞。
缺點:磁碟利用率低,讀寫能力沒有提公升,反而需要映象複製資料會影響效率。
磁碟利用率:容量最小的磁碟儲存量作為整個raid 1的可用容量,最少2塊磁碟。
raid 5:raid 5 實際是對 raid 4 的一次優化策略,它們又都是針對於 raid 0 和 raid 1 的優缺點進行折中的方法。
先介紹 raid 4,raid 4 至少使用 3 塊盤,將待存資料切割為 chunk ,然後分散存入組合中的其中兩塊盤,剩餘的一塊盤作為校驗盤,用於存放前兩塊資料盤的 按位異或值 。如果1號資料盤損壞,則利用校驗盤和2號資料盤再次進行異或運算就可以得到1號資料盤原來的資料,它允許任意一塊磁碟損壞並且提高了資料讀寫能力,但是資料恢復較為耗時,且校驗盤的任務重大。
raid 5 則是對 raid 4 的不足進行了優化,它不指定哪個盤作為校驗盤,而是三塊盤輪流作為校驗盤,比如第一塊 chunk 和第二塊 chunk 分別存入1號和2號盤,3號盤存放它們的校驗資料。然後第三塊 chunk 和第四塊 chunk 存入2號和3號盤,第一塊盤存放這兩個chunk的校驗資料,以此輪流進行(實際哪個盤作為校驗盤的順序可能並非如此,但原理是一樣的)。
其實 raid 6 也是對 raid 5 一次小公升級,在 raid 5 基礎上,輪流使用兩塊盤作為校驗盤,至少使用4塊磁碟,但是 raid 6 實際應用較少,4塊磁碟更傾向於做 raid 10。
優點:有一定冗餘能力,且讀寫能力有所提公升。
缺點:恢復過程出錯則會導致資料永遠丟失,恢復過程依然耗時。
磁碟利用率:實際儲存容量為 最小磁碟的容量*(磁碟數-1)。
raid 01 與 raid 10:它們都是對 raid 0 和 raid 1 的組合使用,均至少使用4塊盤。區別在於 raid 10 在組合過程先兩兩組合為兩個映象卷(4塊磁碟舉例),再將這兩個映象卷組合為乙個條帶卷。而資料儲存過程是將待存資料切割為兩份,然後再在每個映象卷中儲存兩份(乙個映象卷包含2個磁碟)。
raid 01 與 raid 10 組合方式、資料儲存過程相反,此處不再贅述,且 raid 01實際使用較少。因為它是先做條帶,再做映象,資料儲存時先映象,再需要條帶卷自行切割,且在多磁碟(大於4塊磁碟)情況下,每個條帶卷中磁碟數較多,出錯風險更大。
優點:較強的冗餘能力與讀寫能力的提公升。
缺點:磁碟利用率低,綜合來看資料讀寫速率提公升不大。
磁碟利用率:最小磁碟容量*(磁碟數/2),最多可損壞一半磁碟而資料不丟失。
在linux上的基本配置
在linux上使用 mdadm 工具來實現軟體方式的 raid 技術,mdadm 還提供了 raid 相關的一些顯示、測試功能,下面進行分別說明。
注:要想使得磁碟分割槽支援 raid,在建立分割槽時調整型別為 linux raid autodetect(代號fd),以下示例均使用sdb1,sdc1,sdd1,sde1作演示(容量相等)。
建立模式
-c /dev/md_name 建立模式,建立raid
-l # 指明 raid 級別,支援0,1,4,5,6
-n # 指明使用幾塊磁碟
-a yes|no 是否自動建立目標 raid 的裝置檔案
-x # 指明幾塊空閒磁碟,即備用盤,僅支援有冗餘能力的 raid 級別
-c # 指明chunk大小
例1:raid 0
# mdadm -c /dev/md0 -l 0 -n 2 -a yes /dev/sdb1 /dev/sdc1
# mkfs -t ext4 /dev/md0 格式化
# mount /dev/md0 /tes*** 掛載
# cat /proc/mdstat 檢視raid的建立狀態
# mdadm -d /dev/md0 顯示某個卷的詳細資訊
例2:raid 1
# mdadm -c /dev/md1 -l 1 -n 2 -x 1 -a yes /dev/sdb1 /dev/sdc1 /dev/sdd1
# 隨後格式化,掛載不再宣告
# 此處指明有一塊空閒盤,當某個資料盤損壞,空閒盤則會進行資料同步作為資料盤使用
例3:raid 10
# mdadm -c /dev/md1 -l 1 -n 2 -a yes /dev/sdb1 /dev/sdc1 映象卷1
# mdadm -c /dev/md2 -l 1 -n 2 -a yes /dev/sdd1 /dev/sde1 映象卷2
# mdadm -c /dev/md10 -l 0 -n 2 -a yes /dev/md1 /dev/md2 組成條帶卷
# mkfs -t ext4 /dev/md10 格式化
# mount /dev/md10 /tes*** 掛載
# 拆除順序:解除安裝 ->
/dev/md10 ->
/dev/md1,
/dev/md2
管理模式
# mdadm /dev/md0 -f /dev/sdb1 模擬損壞某個卷上的某個盤(測試命令)
# mdadm /dev/md0 -r /dev/sdb1 將某個盤從raid卷上移除
# mdadm /dev/md0 -a /dev/sdb1 向某個卷新增盤
# mdadm -s /dev/md0 停止某個raid卷,即拆散磁碟陣列。如已掛載請先解除安裝裝置
java介面基本概念及實現
介面可以認為是特殊的類 由全域性常量 static final 和公共的抽象方法所組成 一 定義介面 介面定義的兩種方式 inte ce a inte ce b 對於介面定義,在定義時就已經定義了其組成就是全域性變數和抽象方法,所以在開發中簡化定義,以上兩種沒有區別 二 介面的實現 介面是使用必須使...
QCA 1 基本概念及軟體
qca是乙個集合三種主要分析型別 布林集 多值集 模糊集 在內的涵蓋性術語。清晰集三值模糊集 連續 模糊集 1 完全隸屬 1 完全隸屬 1 完全隸屬 偏隸屬 0.5 0.5 既非完全隸屬 也非完全不隸屬 0.5 交叉點 偏不隸屬 00 完全不隸屬 0 完全不隸屬 0 完全不隸屬 舉乙個錯誤的例子 基...
SPC基本概念及理解
一 概念 統計過程控制 statistical process control 簡稱spc 是指借助數理統計方法進行過程控制。它對生產過程進行分析評價,根據反饋資訊及時發現系統性因素出現的徵兆,並採取措施消除其影響,使過程維持在僅受隨機性因素影響的受控狀態,以達到控制質量的目的。理解 在生產過程中,...