軟件RAID

1、簡介
前端

    1.獨立硬盤冗餘陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁盤冗餘陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列。其基本思想就是把多個相對便宜的硬盤組合起來,成爲一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。根據選擇的版本不一樣,RAID比單顆硬盤有如下一個或多個方面的好處:加強數據集成度,加強容錯功能,增長處理量或容量。另外,磁盤陣列對於電腦來講,看起來就像一個單獨的硬盤或邏輯存儲單元。分爲RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。算法

    2.簡單來講,RAID把多個硬盤組合成爲一個邏輯扇區,所以,操做系統只會把它看成一個硬盤。RAID常被用在服務器電腦上,而且常使用徹底相同的硬盤做爲組合。因爲硬盤價格的不斷降低與RAID功能更加有效地與主板集成,它也成爲玩家的一個選擇,特別是須要大容量存儲空間的工做,如:視頻與音頻製做。數據庫

    3.最初的RAID分紅不一樣的檔次,每種檔次都有其理論上的優缺點,不一樣的檔次在兩個目標間獲取平衡,分別是增長數據可靠性以及增長存儲器(羣)讀寫性能。這些年來,出現對於RAID觀念不一樣的應用。數組

2、RAID實現的方式緩存

    1.外接式磁盤陣列:經過擴展卡提供適配能力;
安全

    2.內接式RAID:主板集成RAID控制器;
服務器

    3.軟件RAID:軟件方式實現的RAID功能(Linux)
多線程

3、標準RAID異步

    1.RAID 0
ide

        RAID 0亦稱爲帶區集。它將兩個以上的磁盤並聯起來,成爲一個大容量的磁盤。在存放數據時,分段後分散存儲在這些磁盤中,由於讀寫時均可以並行處理,因此在全部的級別中,RAID 0的速度是最快的。可是RAID 0既沒有冗餘功能,也不具有容錯能力,若是一個磁盤(物理)損壞,全部數據都會丟失,危險程度與JBOD至關。

                wKioL1mzuWLg-v-IAABmpdPJ6u8064.png-wh_50

    2.RAID 1

        (1)兩組以上的N個磁盤相互做鏡像,在一些多線程操做系統中能有很好的讀取速度,理論上讀取速度等於硬盤數量的倍數,與RAID 0相同。另外寫入速度有微小的下降。只要一個磁盤正常便可維持運做,可靠性最高。其原理爲在主硬盤上存放數據的同時也在鏡像硬盤上寫同樣的數據。當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工做。由於有鏡像硬盤作數據備份,因此RAID 1的數據安全性在全部的RAID級別上來講是最好的。但不管用多少磁盤作RAID 1,僅算一個磁盤的容量,是全部RAID中磁盤利用率最低的一個級別。

        (2)若是用兩個不一樣大小的磁盤建RAID 1,可用空間爲較小的那個磁盤,較大的磁盤多出來的空間也能夠分區成一個區來使用,不會形成浪費。

                 wKiom1mzukHhIcZfAABatiVyicw593.png-wh_50

    3.RAID 5

        RAID Level 5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。RAID 5至少須要三塊硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,而且奇偶校驗信息和相對應的數據分別存儲於不一樣的磁盤上。當RAID5的一個磁盤數據發生損壞後,能夠利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。RAID 5能夠理解爲是RAID 0和RAID 1的折衷方案。RAID 5能夠爲系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具備和RAID 0相近似的數據讀取速度,只是由於多了一個奇偶校驗信息,寫入數據的速度相對單獨寫入一塊硬盤的速度略慢,若使用「回寫緩存」可讓性能改善很多。同時因爲多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較便宜。

                wKiom1mzvJ3CGg2-AACLS6zHdyw684.png-wh_50

    4.RAID 6

        (1)與RAID 5相比,RAID 6增長第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不一樣的算法,數據的可靠性很是高,任意兩塊磁盤同時失效時不會影響數據完整性。RAID 6須要分配給奇偶校驗信息更大的磁盤空間和額外的校驗計算,相對於RAID 5有更大的IO操做量和計算量,其「寫性能」強烈取決於具體的實現方案,所以RAID6一般不會經過軟件方式來實現,而更可能經過硬件/固件方式實現。

        (2)同一數組中最多允許兩個磁盤損壞。更換新磁盤後,數據將會從新算出並寫入新的磁盤中。依照設計理論,RAID 6必須具有四個以上的磁盤才能生效。

                wKioL1mzvTSjhI3xAADFyodgOnc193.png-wh_50

3、混合RAID

    1.JBOD

        JBOD( Just a Bunch Of Disks)在分類上,JBOD並非RAID的檔次。因爲並無規範,市場上有兩類主流的作法:

        (1)使用單獨的連接端口如SATA、USB或1394同時控制多個各別獨立的硬盤,使用這種模式一般是較高級的設備,還具有有RAID的功能,不須要依靠JBOD達到合併邏輯扇區的目的。

        (2)只是將多個硬盤空間合併成一個大的邏輯硬盤,沒有錯誤備援機制。

    數據的存放機制是由第一顆硬盤開始依序日後存放,即操做系統看到的是一個大硬盤(由許多小硬盤組成的)。但若是硬盤損毀,則該顆硬盤上的全部數據將沒法救回。若第一顆硬盤損壞,一般沒法做救援(由於大部分文件系統將磁盤分區表(partition table)存在磁盤前端,即第一顆),失去磁盤分區表即失去一切數據,若遭遇磁盤陣列數據或硬盤出錯的情況,危險程度較RAID 0更劇。它的好處是不會像RAID,每次訪問都要讀寫所有硬盤。但在部分的JBOD數據恢復實踐中,能夠恢復未損毀之硬盤上的數據。同時,由於每次讀寫操做只做用於單一硬盤,JBOD的傳輸速率與I/O表現均與單顆硬盤無異。

                wKiom1mzwC6SE-ZjAACXPt6NP_8815.png-wh_50

    2.RAID 7

        RAID 7並不是公開的RAID標準,而是Storage Computer Corporation的專利硬件產品名稱,RAID 7是以RAID 3及RAID 4爲基礎所發展,可是通過強化以解決原來的一些限制。另外,在實現中使用大量的高速緩存以及用以實現異步數組管理的專用即時處理器,使得RAID 7能夠同時處理大量的IO要求,因此性能甚至超越了許多其餘RAID標準的實作產品。但也由於如此,在價格方面很是的高昂。

    3.RAID 10

        (1)RAID 10是先鏡射再分區數據,再將全部硬盤分爲兩組,視爲是RAID 0的最低組合,而後將這兩組各自視爲RAID 1運做。

        (2)當RAID 10有一個硬盤受損,其他硬盤會繼續運做。

                wKioL1mzwCLheLw0AAFWPlc84_8404.png-wh_50

    4.RAID 01

        (1)RAID 01則是跟RAID 10的程序相反,是先分區再將數據鏡射到兩組硬盤。它將全部的硬盤分爲兩組,變成RAID 1的最低組合,而將兩組硬盤各自視爲RAID 0運做。

        (2)RAID 01只要有一個硬盤受損,同組RAID 0的全部硬盤都會中止運做,只剩下其餘組的硬盤運做,可靠性較低。若是以六個硬盤建RAID 01,鏡射再用三個建RAID 0,那麼壞一個硬盤便會有三個硬盤離線。所以,RAID 10遠較RAID 01經常使用,零售主板絕大部分支持RAID 0/1/5/10,但不支持RAID 01。

                wKiom1mzwFvROq38AAEXCGpPyVg154.png-wh_50

    5.RAID 50

        (1)RAID 5與RAID 0的組合,先做RAID 5,再做RAID 0,也就是對多組RAID 5彼此構成Stripe訪問。因爲RAID 50是以RAID 5爲基礎,而RAID 5至少須要3顆硬盤,所以要以多組RAID 5構成RAID 50,至少須要6顆硬盤。以RAID 50最小的6顆硬盤配置爲例,先把6顆硬盤分爲2組,每組3顆構成RAID 5,如此就獲得兩組RAID 5,而後再把兩組RAID 5構成RAID 0。

        (2)RAID 50在底層的任一組或多組RAID 5中出現1顆硬盤損壞時,仍能維持運做,不過若是任一組RAID 5中出現2顆或2顆以上硬盤損毀,整組RAID 50就會失效。

        (3)RAID 50因爲在上層把多組RAID 5構成Stripe,性能比起單純的RAID 5高,容量利用率比RAID5要低。好比一樣使用9顆硬盤,由各3顆RAID 5再組成RAID 0的RAID 50,每組RAID 5浪費一顆硬盤,利用率爲(1-3/9),RAID 5則爲(1-1/9)。

                wKiom1mzwj2QqBFcAAOz1uSMAR8046.png-wh_50

    6.RAID 60

        (1)RAID 6與RAID 0的組合:先做RAID 6,再做RAID 0。換句話說,就是對兩組以上的RAID 6做Stripe訪問。RAID 6至少需具有4顆硬盤,因此RAID 60的最小需求是8顆硬盤。

        (2)因爲底層是以RAID 6組成,因此RAID 60能夠允許任一組RAID 6中損毀最多2顆硬盤,而系統仍能維持運做;不過只要底層任一組RAID 6中損毀3顆硬盤,整組RAID 60就會失效,固然這種狀況的機率至關低。

        (3)比起單純的RAID 6,RAID 60的上層經過結合多組RAID 6構成Stripe訪問,所以性能較高。不過使用門檻高,並且容量利用率低是較大的問題。

                wKiom1mzwhzR11WUAAGJ6tK_9Qw676.jpg-wh_50

4、應用

    (1)RAID2、三、4較少實際應用,由於RAID5已經涵蓋了所需的功能,所以RAID二、三、4大多隻在研究領域有實現,而實際應用上則以RAID5爲主。

    (2)RAID4有應用在某些商用機器上,像是NetApp公司設計的NAS系統就是使用RAID4的設計概念。

5、RAID具體實現方式

    1.硬件方式實現:經過BIOS參數調整來實現;

    2.軟件實現方式:經過軟件工具mdadm來實現;

    3.RAID設備可命名爲/dev/md0、/dev/md一、/dev/md2等等;

6、mdadm工具使用

    1.mdadm:是一個模式化工具

    2.語法:mdadm [mode] <raiddevice> [option] <component-devices>

    mode(模式):

        -C:建立;

        -A:裝配;從新識別此前實現的RAID;

        -F:監控;

        -f,-r,-a:管理;

    <raiddevice>:/dev/md#;

    <component-devices>:任意塊設備;

    option:

        -C:建立模式,還有如下子選項:

            -n #: 使用#個塊設備來建立此RAID;

            -l #:指明要建立的RAID的級別;

            -a {yes|no}:自動建立目標RAID設備的設備文件;

            -c CHUNK_SIZE: 指明塊大小;

            -x #: 指明空閒盤的個數;

    3.支持的RAID級別有:RAID0,RAID1,RAID4,RAID5,RAID6,RAID10

    4.-D:顯示RAID詳細信息:

            mdadm -D /dev/md#;

    5.管理模式:

        -f:標記指定磁盤爲損壞;

        -a:添加磁盤;

        -r:刪除磁盤;

    6.觀察md狀態:

        cat /proc/mdstat;

    7.中止md設備:

        mdadm -S /dev/md#;

7、建立一個10G可用空間的RAID5設備

    示例:我用四塊硬盤作實驗,分別是/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde

    1.具體步驟以下:

        (1)分區:

                ① fdisk /dev/sdb;(劃分/dev/sdb1設備,大小爲10G,並修改ID,這裏ID修改成fd;同理,其餘三塊硬盤也按照一樣方法分區,這裏我用命令來分區;)

                ②dd if=/dev/sdb of=/dev/sdc bs=1 count=512;

                ②dd if=/dev/sdb of=/dev/sdd bs=1 count=512;

                ②dd if=/dev/sdb of=/dev/sde bs=1 count=512;

        (2)同步分區:

                ①partx -a /dev/sdb;

                ②partx -a /dev/sdc;

                ③partx -a /dev/sdd;

                ④partx -a /dev/sde;

        (3)使用mdadm建立並定義RAID設備:

                ① mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1;

        (4)顯示RAID詳細信息:

                ①mdadm -D /dev/md0;

        (5)觀察md狀態:

                ①cat /proc/mdstat;

                ②blkid;

        (6)生成配置文件:

                ①mdadm -Ds /dev/md0 > /etc/mdadm.conf;

                ②cat /etc/mdadm.onf

        (7)格式化:

                ①mkfs.ext4 /dev/md0;

        (8)掛載,寫進/etc/fstab文件裏實現自動掛載:

                ①mkdir /mnt/raid;

                ②/dev/md0    /mnt/raid    ext4    defaults    0    0;

                ③mount -a;

                ④df -h;

                ⑤cp -r /etc/* /mnt/raid

        (9)測試,模擬磁盤故障:

                場景再現:設備/dev/sdb1,/dev/sdc1,/dev/sdd1爲活動硬盤;/dev/sde1爲空閒硬盤;如今模擬/dev/sdb1硬盤損壞,看空閒硬盤/dev/sde1會不會自動頂替損壞硬盤工做,用戶可否正常訪問數據,步驟以下:

                ① mdadm /dev/md0 -f /dev/sdb1;

                ②mdadm -D /dev/md0;

                ③mdadm /dev/md0 -r /dev/sdb1;移除磁盤

                ④mdadm /dev/md0 -a /dev/sdb1;添加磁盤

    經過實驗證實,空閒硬盤會頂替損壞硬盤工做,用戶能夠正常訪問數據;

        (10)測試,模擬真實硬盤故障:

            場景再現:假設硬盤/dev/sdd1,/dev/sde1故障了,修復方法:咱們能夠找個容量大的硬盤劃分分區,並把分區加入RAID成員或者從新加磁盤,方法以下

                ①fdisk /dev/sda;(劃分/dev/sda6,/dev/sda7分區,大小爲10G,修改ID,改成fd)

                ②mdadm /dev/md0 -a /dev/sda6

                ③mdadm /dev/md0 -a /dev/sda7

        ##這條命令與上面無關④mdadm –G /dev/md0 –n4  -a /dev/sd##;添加新成員

    注:RAID實驗能夠用硬盤或者分區,用硬盤作RAID實驗就不用劃分分區;用分區作RAID實驗要注意分區大小要一致;

8、刪除RAID

    步驟:

        (1)取消掛載:

                ①umount /mnt/raid;

        (2)中止md設備:

                ①mdadm -S /dev/md0;

                ②mdadm -D /dev/md0;

        (3)啓動md設備:

                ①mdadm -A /dev/md0;

                ②mdadm -R /dev/md0;強制啓動

                ③②mdadm -D /dev/md0;

    注:中止或啓動md設備都須要依賴於/etc/mdadm.conf文件,因此這個文件要事先生成;

        (4)刪除RAID成員信息:

                ①blkid;

                ②mdadm --zero-superblock /dev/sda#;

        (5)刪除成員分區:

                ①fdisk /dev/sda;(/dev/sda7,/dev/sda8)

        (6)清除/etc/fstab文件信息;

        (7)刪除md文件:

                ①rm -f /etc/mdadm.conf

9、磁盤陣列比較表

RAID檔次
最少硬盤
最大容錯 可用容量 讀取性能
寫入性能 安全性 目的 應用產業
單一硬盤 參考 0 1 1 1

JBOD 1 0 n 1 1 無(同RAID0) 增長容量 我的(暫時)存儲備份
0 2 0 n n n 一個硬盤異常,所有硬盤都會異常
追求最大容量、速度
視頻剪接緩存用途
1 2 n-1 1 n 1 最高,一個正常便可 最球最大安全性 我的、企業備份
5 3 1 n-1 n-1 n-1
最求最大容量、最小預算
我的、企業備份
6 4 2 n-1 n-2 n-2 安全性較RAID5高 同RAID5,但較安全 我的、企業備份
10 4 n/2 n/2 n n/2 安全性高 綜合RAID0/1優勢,理論速度較快 大型數據庫、服務器

注:一、n表明硬盤總數;

    二、JBOD可接到現有硬盤,直接增長容量;

相關文章
相關標籤/搜索