RAID 學(xué)習(xí)及Linux軟RAID實(shí)現(xiàn)

我寫的不一定是正確的,但我是這么理解的(知識體量有限,錯了望提醒)

RAID 是什么

基本思想就是把多個硬盤組合起來,成為一個硬盤陣列組,使性能達(dá)到甚至超過一個價格昂貴、容量巨大的硬盤

簡單說就是把多個硬盤組成一個邏輯扇區(qū)來使用,在操作系統(tǒng)層面這就是一個硬盤,能夠動態(tài)的完成硬盤的增大跟縮減通常有硬件RAID跟軟件之分

RAID 的優(yōu)勢

  • 增大I/O能力
  • 更高的數(shù)據(jù)安全
  • 更大的容量
  • 高效恢復(fù)磁盤數(shù)據(jù)
  • ……

硬件RAID

  • 主板上會集成一個RAID控制器,這個控制器連接到外部的一個硬盤組盒來實(shí)現(xiàn)硬件RAID
  • 類似上面,就好像多個插在STAT口上多塊硬盤,主板上有一個RAID控制器,管理這幾塊連在STAT口上的硬盤組成RAID

軟件RAID

  • 這就沒什么好說的了,就是通過軟件來模擬RAID,軟件RAID的風(fēng)險(xiǎn)也比較大,生產(chǎn)絕對不建議

為什么要組建RAID

類型接口傳輸速率

  • IDE:3.3MB/s到16.6MB/s不等
  • SCSI:160MB/s 最大
    商用居多(以前),cpu占用低,它內(nèi)部有個小控制器,有些也會帶緩存,保證數(shù)據(jù)的持久化
  • USB 3:640MB/s
  • STAT 3:600MB/s

以上都是理論速度,cpu跟內(nèi)存的數(shù)據(jù)交互兩都是按GB計(jì)算,硬盤的速度有時確實(shí)是服務(wù)器的瓶頸,不考慮現(xiàn)在的 USB3.1和雷電3接口,這個時候就需要組建RAID了

RAID 的級別

RAID 0 (條帶)

基本原理
raid0.png

如上圖,有disk0,1兩塊磁盤,在組建RAID 0 之后,RAID 控制器將一個文件一分為多分,比如1G 大小的文件,分成30MB大小的N個文件,分別放入兩個磁盤中,以STAT口最大傳輸速率為例,單個傳輸在600M/s,兩個一起就是1GB/s 左右每秒的數(shù)據(jù)傳輸。同樣也可以三塊硬盤組建RAID 0,那時這個RAID 0 的速率就是接近單塊硬盤的3倍,但至少是2塊硬盤組建RAID 0

RAID 0特性

  • 性能讀寫提升N倍(N為磁盤數(shù)量)
  • 冗余能力(容錯能力)沒有
  • 空間利用率:Ns(N磁盤數(shù)量,s磁盤大?。?/li>
  • 至少兩塊磁盤

RAID 1 (鏡像)

基本原理
raid1.png

如上圖:在存儲文件的時候在DISK 0 中存儲一份,然后還在DISK 1 中存儲一份,寫速度不變,不過在讀取數(shù)據(jù)的時候可以交叉讀取,提高讀速度。這種RAID組合通常是為了數(shù)據(jù)安全性,兩塊硬盤同時壞的幾率肯定比一塊硬盤壞的幾率小太多了

RAID 1特性

  • 寫性能下降,讀性能提高(相比單塊硬盤)
  • 有冗余能力
  • 空間利用率是1/2
  • 至少兩塊硬盤

RAID 4 (校驗(yàn)碼)

基本原理
raid4.png

如上圖:在存儲數(shù)據(jù)的時候會被依次分片存入DISK 0,1,2 中,DISK 3 不存放數(shù)據(jù),存放DISK 0,1,2的校驗(yàn)碼。如一個90M的文件被被分別存入A1,A2,A3位置,Ap就是存放著A1,A2,A3的校驗(yàn)碼;在讀取數(shù)據(jù)的時候如果A1,A2,A3的數(shù)據(jù)取出后校驗(yàn)碼不能跟Ap相同,那就數(shù)據(jù)出現(xiàn)問題。這種情況,校驗(yàn)碼盤DISK 3是RAID的瓶頸,所以用的比較少,如果RAID 3 出現(xiàn)問題,就要重新?lián)Q盤或重新計(jì)算校驗(yàn)碼,影響線上業(yè)務(wù)

特性

  • 讀寫性能都有提高
  • 有冗余能力
  • 空間利用率(N-1)N
  • 至少三塊硬盤

RAID 5 (循環(huán)冗余校驗(yàn)碼)

基本原理
raid5.png

如上圖:跟RAID 4 差不多,只是每個盤都參與當(dāng)校驗(yàn)碼盤,這種情況如果兩塊硬盤掛了,那數(shù)據(jù)就沒了

特性

  • 讀寫性能提高
  • 有冗余能力
  • 空間利用率(N-1)N
  • 至少三塊硬盤

RAID 01 (條帶+鏡像)

基本原理
RAID01.png

如圖:先將4塊硬盤分成兩個為組共兩組,每組各做成RAID 0 然后將每組連接起來在組成RAID 1,也就是先條帶(RAID 0),然后鏡像(RAID 1),RAID 在存儲數(shù)據(jù)的時候先左右各存一份也就是DISK 0,1跟DISK 2,3存的東西是一模一樣的,然后數(shù)據(jù)到每組的時候在以條帶的方式分批存入兩個硬盤,如果其中一組RAID 0 掛了,那不會影響業(yè)務(wù),因?yàn)榱硪唤M的跟掛掉的那組數(shù)據(jù)一樣。如果不同組同一個數(shù)據(jù)位的硬盤掛了那就真掛了

特性

  • 讀寫性能提高
  • 有冗余能力
  • 空間利用率1/2
  • 至少四塊硬盤

RAID 10 (鏡像+條帶)

基本原理
RAID10.png

如圖:跟上面RAID 01 差不多,不解析了,大概理解下也就是先分組做RAID 1 然后將每組做成RAID 0

JBOD(磁盤簇)

基本原理
JBOD.svg.png

如上圖:將多個硬盤組成一個邏輯盤,可以自由擴(kuò)大或縮小,擴(kuò)大或縮小不損壞數(shù)據(jù),RAID就不一定,一般硬盤需要分區(qū)、格式化、掛載才能用。JBOD能夠動態(tài)增減硬盤容量

特性

  • 無性能表現(xiàn)
  • 無冗余能力
  • 利用率100%
  • 至少兩塊硬盤

至于RAID 3、RAID 4、RAID 50啥特性的自行搜索下

RAID 的級別差異

RAID級別 讀性能 寫性能 冗余能力 利用率% 硬盤數(shù)量
RAID 0 單盤N倍 單盤N倍 100 2
RAID 1 接近單盤N倍 低于單盤寫能力 50 2
RAID 4 (N-1)/N * s倍 (N-1)/N * s倍 (N-1)/N 3
RAID 5 (N-1)/N * s倍 (N-1)/N * s倍 (N-1)/N 3
RAID 01 Ns/2倍 Ns/2倍 50 4
RAID 10 Ns/2倍 Ns/2倍 50 4
JBOD 100 2

Linux RAID實(shí)現(xiàn)

內(nèi)核(kernel)中有個模塊叫md(multi disk),這個是用來模擬軟件RAID的,這個跟dm是兩碼事

linux是通過設(shè)備文件訪問每個硬件的(/dev/目錄下),軟件RAID在/dev/ 目錄下生成/dev/md# 開頭的設(shè)備(邏輯RAID)讓linux來實(shí)現(xiàn)軟件RAID,實(shí)際底層還是存儲到各個設(shè)備中(/dev/sd#)

  • mdadm是上層用戶用來管理軟件RAID的一個命令工具
  • mdadm可以將任何塊設(shè)備做成RAID

RAID 基本操作

# mdadm
創(chuàng)建模式
  -c 設(shè)備名
    專用選項(xiàng)
      -l:RAID級別
      -n:#:指定設(shè)備個數(shù)
      -a {yes|no}:自動為其創(chuàng)建設(shè)備文件
      -c:CHUNK大小,默認(rèn)是64k,每個條帶大小
      -x #: 指定空閑盤個數(shù) 
    # mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sda{0,1}
管理模式
  --add(-a):新增;--remove(-r):移除; --fail(-f):模擬損壞
  # mdadm /dev/md# --fail /dev/sda1 : 模擬硬盤損壞
監(jiān)控模式
  -F 設(shè)備名
增長模式 
  -G 設(shè)備名  指定塊設(shè)備
裝飾模式
  注意:將現(xiàn)有做成RAID 的設(shè)備放置到別的主機(jī),通過裝配模式進(jìn)行重新識別
  -A

查看RAID陣列的詳細(xì)信息
  # mdadm -D /dev/md#: 顯示設(shè)備詳細(xì)信息
  # /proc/mdstat: 查看RAID信息

停止陣列
  # mdadm -S /dev/md#

將當(dāng)前RAID信息保存至配置文件,以便以后進(jìn)行裝配
  # mdadm -D --scan > /etc/mdadm.conf

由于演示我就一塊磁盤來模擬RAID各個級別,只要是塊設(shè)備都能用來做RAID

Linux RAID實(shí)例

分區(qū)信息

這里使用一塊20G磁盤進(jìn)行模擬

RAID 0 實(shí)例

RAID 0 要保證至少需要兩個設(shè)備這里用sdb{1,2}進(jìn)行模擬
mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb{1,2}

創(chuàng)建RAID 0
  1. 使用mdadm -C 指定創(chuàng)建邏輯RAID名稱,-l指定RAID級別,-a同意自動為其創(chuàng)建設(shè)備文件,-n指定設(shè)備數(shù)量(不能小于塊設(shè)備數(shù)量)

  2. 使用mdadm -D /dev/md0 查看詳細(xì)信息(應(yīng)該看得懂吧)

  3. mke2fs -j /dev/md0:格式化邏輯RAID

  4. 掛載(看到lost+found文件就標(biāo)識成功了)


    掛載目錄

RAID 1 實(shí)例

這里RAID 1 使用sdb{3,5}進(jìn)行模擬

mdadm -C /dev/md1 -l 1 -a yes -n 2 /dev/sdb{3,5}

raid1

第二個紅框在查看RAID設(shè)備的時候看到紅框3的進(jìn)度條,這是RAID 1的特性,盤1數(shù)據(jù)跟盤2保持一致也就是sdb3跟sdb5保持一致,之后會顯示同步完成

同步完成

  • 之后就是格式化掛載,看到lost+found表示可以使用了
模擬磁盤損壞
  1. 先拷貝文件(我拷貝文件/etc/fstab)到掛載目錄,我掛載的是/media目錄,模擬mdadm /dev/md1 -f /dev/sdb5損壞(/dev/sdb5)

    模擬損壞

  2. 查看掛載目錄fstab文件內(nèi)容


    fstab內(nèi)容

這就是RAID 0的特性,允許一塊磁盤損壞,依然不影響數(shù)據(jù)

  1. 現(xiàn)在添加sdb6至md1(RAID 1)中,在模擬sdb3損壞,查看數(shù)據(jù)是否可以訪問
# mdadm /dev/md1 -r /dev/sdb5:移除損壞盤
# mdadm /dev/md1 -a /dev/sdb6:新增盤
# mdadm /dev/md1 -f /dev/sdb3:模擬sdb3損壞
# cat /media/fstab
模擬損壞

cat /media/fstab

查看fstab內(nèi)容

文件依然可用

mdadm命令的其他模式的用法自行搜索理解吧

總結(jié)

首先只要理解RAID是什么?然后用在什么地方?特性是什么?怎么用,就能大概了解跟理解他了

  • 是什么
    也就是一個大容量,冗余可伸縮,增大I/O能力的一個邏輯設(shè)備(理解成硬盤吧)
  • 用在什么地方
    如果這幾個特性是工作或者生產(chǎn)想要實(shí)現(xiàn)或體現(xiàn)的那自己就知道要用在什么地方了
    • 就比如DIY不愿意升級SSD,可以買個RAID盒子里面放兩個機(jī)械組成一個RAID 0,不過這里注意如果最后I/O接口速度都不能大于你單塊機(jī)械硬盤的傳輸那用了也白用,就比如RAID 盒子是通過USB鏈接到你電腦的,那如果是3.0就白搭了,最好是3.1或者雷電的
  • 特性(RAID 級別)
    • RAID 0(條帶):增大帶寬
    • RAID 1(鏡像):提高安全性
    • RAID 5 (循環(huán)校驗(yàn)碼):提高安全性跟帶寬
    • ......
  • 怎么用?分硬件RAID跟軟件RAID
    • 硬件RAID 主板自帶,自己上BIOS設(shè)置或其他地方設(shè)置(現(xiàn)在DIY主板應(yīng)該都有)
    • 軟件RAID 上文說的使用Linux內(nèi)核自帶的md模塊實(shí)現(xiàn)軟RAID就是一種,方法還有其他,感興趣自己搜索就好
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容