首頁 > linux教程 > Linux高級文件系統管理 閱讀:0更新時間:2020-03-28 01:02:18

Linux RAID(磁盤列陣)完全攻略

LVM 最大的優勢在于可以在不卸載分區和不損壞數據的情況下進行分區容量的調整,但是萬一硬盤損壞了,那么數據一定會丟失。 本節講的 RAID(磁盤陣列)的優勢在于硬盤讀寫性能更好,而且有一定的數據冗余功能。

RAID 功能已經內置在 linux 2.0及以后的內核中,為了使用這項功能,還需要特定的工具來管理 RAID,在絕對多數 Linux 發行版本中,更多的是使用 mdadm,讀者可以自行下載并安裝這個工具。

RAID 簡介

RAID(Redundant Arrays of Inexpensive Disks,磁盤陣列),翻譯過來就是廉價的、具有冗余功能的磁盤陣列。其原理是通過軟件或硬件將多塊較小的分區組合成一個容量較大的磁盤組。這個較大的磁盤組讀寫性能更好,更重要的是具有數據冗余功能。

那什么是數據冗余呢?從字面上理解,冗余就是多余的、重復的。在磁盤陣列中,冗余是指由多塊硬盤組成一個磁盤組,在這個磁盤組中,數據存儲在多塊硬盤的不同地方,這樣即使某塊硬盤出現問題,數據也不會丟失,也就是磁盤數據具有了保護功能。

讀者也可以這樣理解,RAID 用于在多個硬盤上分散存儲數據,并且能夠“恰當”地重復存儲數據,從而保證其中某塊硬盤發生故障后,不至于影響整個系統的運轉。RAID 將幾塊獨立的硬盤組合在一起,形成一個邏輯上的 RAID 硬盤,這塊“硬盤”在外界(用戶、LVM 等)看來,和真實的硬盤一樣,沒有任何區別。

RAID 的組成可以是幾塊硬盤,所以我們在講解原理時使用硬盤舉例,但是大家要知道不同的分區也可以組成 RAID。

RAID 根據組合方式的不同,有多種設計解決方案,以下介紹幾種常見的 RAID 方案(RAID級別)。

RAID 0

RAID 0 也叫 Stripe 或 Striping(帶區卷),是 RAID 級別中存儲性能最好的一個。RAID 0 最好由相同容量的兩塊或兩塊以上的硬盤組成。如果組成 RAID 0 的兩塊硬盤大小不一致,則會影響 RAID 0 的性能。

這種模式下會先把硬盤分隔出大小相等的區塊,當有數據需要寫入硬盤時,會把數據也切割成相同大小的區塊,然后分別寫入各塊硬盤。這樣就相當于把一個文件分成幾個部分同時向不同的硬盤中寫入,數據的讀/寫速度當然就會非???。

從理論上講,由幾塊硬盤組成 RAID 0,比如由 3 塊硬盤組成 RAID 0,數據的寫入速度就是同樣的數據向一塊硬盤中寫入速度的3倍。我們畫一張 RAID 0 的示意圖,如圖 1 所示。
RAID 0示意圖
圖 1 RAID 0 示意圖
解釋一下這張示意圖。我們準備了 3 塊硬盤組成了 RAID 0,每塊硬盤都劃分了相等的區塊。當有數據要寫入 RAID 0 時,首先把數據按照區塊大小進行分割,然后再把數據依次寫入不同的硬盤。每塊硬盤負責的數據寫入量都是整體數據的 1/3,當然寫入時間也只有原始時間的 1/3。所以,從理論上講,由幾塊硬盤組成 RAID 0,數據的寫入速度就是數據只寫入一塊硬盤速度的幾倍。

RAID 0 的優點如下:

  • 通過把多塊硬盤合并成一塊大的邏輯硬盤,實現了數據跨硬盤存儲。

  • 通過把數據分割成等大小的區塊,分別存入不同的硬盤,加快了數據的讀寫速度。數據的讀/寫性能是幾種 RAID 中最好的。

  • 多塊硬盤合并成 RAID 0,幾塊小硬盤組成了更大容量的硬盤,而且沒有容量損失。RAID 0 的總容量就是幾塊硬盤的容量之和。


RAID 0 有一個明顯的缺點,那就是沒有數據冗余功能,RAID 0 中的任何一塊硬盤損壞,RAID 0 中所有的數據都將丟失。也就是說,由幾塊硬盤組成 RAID 0,數據的損毀概率就是只寫入一塊硬盤的幾倍。

我們剛剛說了,組成 RAID 0 的硬盤的大小最好都是一樣的。那有人說我只有兩塊不一樣大小的硬盤,難道就不能組成 RAID 0 嗎?

答案是可以的。假設有兩塊硬盤,一塊大小是 100GB,另一塊大小是 200GB。由這兩塊硬盤組成 RAID 0,那么當最初的 200G 數據寫入時,是分別存放在兩塊硬盤當中的;但是當數據大于 200GB 之后,第一塊硬盤就寫滿了,以后的數據就只能寫入第二塊硬盤中,讀/寫性能也就隨之下降了。

一般不建議企業用戶使用 RAID 0,因為數據損毀的概率更高。如果對數據的讀/寫性能要求非常高,但對數據安全要求不高時,RAID 0 就非常合適了。

RAID 1

RAID 1也叫 Mirror 或 Mirroring(鏡像卷),由兩塊硬盤組成。兩塊硬盤的大小最好一致,否則總容量以容量小的那塊硬盤為主。RAID 1 就具備了數據冗余功能,因為這種模式是把同一份數據同時寫入兩塊硬盤。

比如有兩塊硬盤,組成了 RAID 1,當有數據寫入時,相同的數據既寫入硬盤 1,也寫入硬盤 2。這樣相當于給數據做了備份,所以任何一塊硬盤損壞,數據都可以在另一塊硬盤中找回。RAID 1 的示意圖如圖 2 所示。
RAID 1示意圖
圖 2 RAID 1 示意圖
RAID 1 具有了數據冗余功能,但是硬盤的容量卻減少了 50%,因為兩塊硬盤當中保存的數據是一樣的,所以兩塊硬盤際上只保存了一塊硬盤那么多的數據,這也是我們把 RAID 1 稱作鏡像卷的原因。

RAID 1 的優點如下:

  • 具備了數據冗余功能,任何一塊硬盤出現故障,數據都不會丟失。

  • 數據的讀取性能雖然不如RAID 0,但是比單一硬盤要好,因為數據有兩份備份在不同的硬盤上,當多個進程讀取同一數據時,RAID會自動分配讀取進程。


RAID 1 的缺點也同樣明顯:

  • RAID 1 的容量只有兩塊硬盤容量的 50%,因為每塊硬盤中保存的數據都一樣。

  • 數據寫入性能較差,因為相同的數據會寫入兩塊硬盤當中,相當于寫入數據的總容量變大了。雖然 CPU 的速度足夠快,但是負責數據寫入的芯片只有一個。

RAID 10 或 RAID 01

我們發現,RAID 0 雖然數據讀/寫性能非常好,但是沒有數據冗余功能;而 RAID 1 雖然具有了數據冗余功能,但是數據寫入速度實在是太慢了(尤其是軟 RAID)。

那么,我們能不能把 RAID 0 和 RAID 1 組合起來使用?當然可以,這樣我們就即擁有了 RAID 0 的性能,又擁有了 RAID 1 的數據冗余功能。

我們先用兩塊硬盤組成 RAID 1,再用兩塊硬盤組成另一個 RAID 1,最后把這兩個 RAID 1組成 RAID 0,這種 RAID 方法稱作 RAID 10。那先組成 RAID 0,再組成 RAID 1 的方法我們作 RAID 01。我們通過示意圖 3 來看看 RAID 10。
RAID 10示意圖
圖 3 RAID 10 示意圖
我們把硬盤 1 和硬盤 2 組成了第一個 RAID 1,把硬盤 3 和硬盤 4 組成了第二個 RAID 1,這兩個 RAID 1組成了 RAID 0。因為先組成 RAID 1,再組成 RAID 0,所以這個 RAID 是 RAID 10。

當有數據寫入時,首先寫入的是 RAID 0(RAID 0 后組成,所以數據先寫入),所以數據 1 和數據 3 寫入了第一個 RAID 1,而數據 2 和數據 4 寫入了第二個 RAID 1。當數據 1 和數據 3 寫入第一個 RAID 1 時,

因為寫入的是 RAID 1,所以在硬盤 1 和硬盤 2 中各寫入了一份。數據 2 和數據 4 也一樣。

這樣的組成方式,既有了 RAID 0 的性能優點,也有了 RAID 1 的數據冗余優點。但是大家要注意,雖然我們有了 4 塊硬盤,但是由于 RAID 1 的缺點,所以真正的容量只有 4 塊硬盤的 50%,另外的一半是用來備份的。

RAID 5

RAID 5 最少需要由 3 塊硬盤組成,當然硬盤的容量也應當一致。當組成 RAID 5 時,同樣需要把硬盤分隔成大小相同的區塊。當有數據寫入時,數據也被劃分成等大小的區塊,然后循環向 RAID 5 中寫入。

每次循環寫入數據的過程中,在其中一塊硬盤中加入一個奇偶校驗值(Parity),這個奇偶校驗值的內容是這次循環寫入時其他硬盤數據的備份。當有一塊硬盤損壞時,采用這個奇偶校驗值進行數據恢復。通過示意圖來看看 RAID 5 的存儲過程,如圖 4 所示。
RAID 5 示意圖
圖 4 RAID 5 示意圖
在這張示意圖中,我們使用三塊硬盤組成了 RAID 5。當有數據循環寫入時,每次循環都會寫入一個奇偶校驗值(Parity),并且每次奇偶校驗值都會寫入不同的硬盤。這個奇偶校驗值就是其他兩塊硬盤中的數據經過換算之后產生的。因為每次奇偶校驗值都會寫入不同的硬盤,所以任何一塊硬盤損壞之后,都可以依賴其他兩塊硬盤中保存的數據恢復這塊損壞的硬盤中的數據。

需要注意的是,每次數據循環寫入時,都會有一塊硬盤用來保存奇偶校驗值,所以在 RAID 5 中可以使用的總容量是硬盤總數減去一塊的容量之和。

比如,在這張示意圖中,由三塊硬盤組成了 RAID 5,但是真正可用的容量是兩塊硬盤的容量之和,也就是說,越多的硬盤組成 RAID 5,損失的容量占比越小,因為不管由多少塊硬盤組成 RAID 5,奇偶校驗值加起來只占用一塊硬盤。而且還要注意,RAID 5 不管是由幾塊硬盤組成的,只有損壞一塊硬盤的情況才能恢復數據,因為奇偶校驗值加起來只占用了一塊硬盤,如果損壞的硬盤超過一塊,那么數據就不能再恢復了。

RAID 5 的優點如下:

  • 因為奇偶校驗值的存在,RAID 5 具有了數據冗余功能。

  • 硬盤容量損失比 RAID 1 小,而且組成 RAID 5 的硬盤數量越多,容量損失占比越小。

  • RAID 5的數據讀/寫性能要比 RAID 1 更好,但是在數據寫入性能上比 RAID 0 差。


RAID 5 的缺點如下:

  • 不管由多少塊硬盤組成 RAID 5,只支持一塊硬盤損壞之后的數據恢復。

  • RAID 5 的實際容量是組成 RAID 5 的硬盤總數減去一塊的容量之和。也就是有一塊硬盤用來保存奇偶校驗值,但不能保存數據。


從總體上來說,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0;數據冗余比 RAID 0 好,而且不像 RAID 1 那樣浪費了 50% 的硬盤容量。

軟 RAID 和硬 RAID

我們要想在服務器上實現 RAID,可以采用磁盤陣列卡(RAID 卡)來組成 RAID,也就是硬 RAID。RAID 卡上有專門的芯片負責 RAID 任務,因此性能要好得多,而且不占用系統性能,缺點是 RAID 卡比較昂貴。

如果我們既不想花錢又想使用 RAID,那就只能使用軟 RAID 了。軟 RAID 是指通過軟件實現 RAID 功能,沒有多余的費用,但是更加耗費服務器系統性能,而數據的寫入速度比硬 RAID 慢。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩