首頁 > 軟體

RAID磁碟陣列 入門基礎

2020-06-16 17:14:53

一、磁碟陣列簡介

    磁碟陣列RAID(RedundantArrays of Inexpensive Disks),即容錯廉價磁碟陣列。磁碟陣列可以通過技術將多個較小的磁碟整合成一個較大的磁碟裝置。

    整個RAID會根據等級(level)選擇的不同,而使得整合後得磁碟具有不同的功能,基本常見的等級有以下幾種:

RAID 0

    最早出現的RAID模式,即Data Stripping資料分條技術。RAID 0的組建至少需要兩塊硬碟,成本比較低,沒有提供冗餘或錯誤修復的能力。RAID 0可以提高整個磁碟的效能和吞吐量。

    當RAID 0 使用同型號、容量的磁碟來組成時,效果較佳。這種模式的RAID會將磁碟先切出等量的區塊,然後當一個檔案要寫入RAID時,該檔案會依據塊的大小切割好,之後再依序放到各個磁碟裡面去。由於每個磁碟會交錯存放資料,因此當你的資料要寫入RAID,資料會被等量放置在各個磁碟上面。舉例說明,當有一個由兩塊磁碟組成的RAID 0,將1G的資料寫入其中,RAID 0中的兩個磁碟會分別存放512M,如圖1-1。

圖 1-1 RAID 0的磁碟示意圖

RAID 1

    RAID 1稱為磁碟映象,原理是把一個磁碟的資料映象到另一個磁碟上,也就是說資料在寫入一塊磁碟的同時,會在另一塊閒置的磁碟上生成映象檔案。這樣即使一個磁碟上的檔案資料損壞,你的資料還是可以完整保留下來。雖然這樣資料的安全性提高了,但成本會明顯增加,磁碟的利用率也降至50%。RAID 1的寫效能不佳,但是讀效能稍微提升,原因是當從RAID 1中讀取資料時可以同時從兩塊擁有相同資料的硬碟上進行讀取。

    假設RAID 1是由兩塊相同大小的磁碟組成的,當向其中存入1G的資料時,兩塊磁碟都會儲存1G的資料,如圖1-2。

圖 1-2 RAID 1的磁碟示意圖

 

RAID 10,RAID 01

    RAID 10和RAID 01是將RAID 1和RAID 0以不同的方式組合。RAID 10是先分開資料然後對分組的資料進行映象處理(即兩個RAID 1組成一個RAID 0),RAID 01是先對資料進行映象操作,然後分開儲存(兩個RAID 0組成一個RAID 1)。RAID 01和10的讀寫效能都有提升,並且都擁有冗餘能力,但空間利用率都為降為50%。RAID 10如圖1-3,RAID 01如圖1-4。

 

 

 

圖 1-3 RAID 10的磁碟示意圖

 

圖 1-4 RAID 01的磁碟示意圖

 

 

 

 

 

RAID 5

    RAID 5至少需要三塊以上的磁碟才能夠組成這種型別的磁碟陣列。RAID 5寫入資料的方式類似RAID 01,不過每個迴圈的寫入過程中,在每塊磁碟還加入一個同位檢查資料(Parity),這個資料會記錄其他磁碟的備份資料,用於當有磁碟損毀時的救援。如圖1-5。

圖 1-5 RAID 5的磁碟示意圖

    圖中,每個迴圈寫入時,都會有部分的同位檢查碼(Parity)被記錄,並且記錄的同位檢查碼每次都記錄在不同的磁碟,因此,任何一個磁碟損毀時都能夠通過其他磁碟的檢查碼來重建原本磁碟內的資料。不過需要注意的是,由於有同位檢查碼,因此RAID 5的總容量會是(n-1)/n,而且當損毀的磁碟數量大於等於兩塊時,整租RAID 5的資料就損毀了。因此RAID 5預設支援一塊磁碟的損毀情況。

    RAID 5的讀寫效能均有提升,但其寫效能低於RAID 0。

 

RAID 50

    將RAID 5和RAID 0相結合。構建RAID 50至少需要6塊磁碟,每3塊做一個RAID 5,然後將兩個RAID 5做成一個RAID 0。

    RAID 50的讀寫效能提升,具有冗餘能力,其空間利用率為(n-2)/n。

二、建立軟RAID實踐

硬RAID基於硬體基礎,其設定時在BIOS介面,硬RAID要求必須要有RAID控制器以及驅動。

軟RAID實踐

基礎命令:

mdadm:將任何裝置做成RAID

    模式化的命令 :

        建立模式

            -C 

            專用選項:

                -l 級別

                -n #裝置個數

                -a 是否自動為其建立裝置檔案yes no

                -c 指定chunk(資料塊)大小 2^n 預設為64k

                -x #指定空閒盤個數

        管理模式

            --add,--remove(-r) --fail(-f,--set-faulty)

            mdadm /dev/md# --fail /dev/sda7 模擬sda7為損壞

                                          --remove

                                          --add

        監控模式

            -F

        增長模式

            -G

        裝配模式

            -A

            mdadm -A /dev/md# /dev/sd{#1,#2,...}

        -D /dev/md# 顯示RAID陣列的詳細資訊

            --detail

        停止陣列

        mdadm -S /dev/md#

                        --stop

 

(1)做一個可用大小為2G的RAID 0,設定為自動掛載。

    可以採用2個1G的分割區或者採用4個512M的分割區來做2G的RAID 0。這裡使用2個1G分割區製作一個2G的RAID 0;

建立兩個1G大小的分割區/dev/sdb5 /dev/sdb6

1
fdisk /dev/sdb

將分割區/dev/sdb{5,6}的system id為Linux raid auto(fd)

w儲存並退出fdisk

使用partprobe命令讓系統識別新分割區

1
partprobe /dev/sdb

檢視系統是否識別了新的分割區表

1
cat /proc/partitions

執行mdadm命令,將/dev/sdb{5,6}建立為RAID 0 (沒有mdadm命令可以使用yum install mdadm 安裝)

1
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{5,6}

檢視當前裝置上所有啟用的RAID裝置

1
cat /proc/mdstat

格式化新建的md0裝置

1
mke2fs -j /dev/md0

掛載/dev/md0到/mnt/raid0 (新建/mnt/raid0)

1
mount /dev/md0 /mnt/raid0

設定開機自動掛載/dev/md0

1
echo "/dev/md0    /mnt/raid0    ext3    defaults    0 0">>/etc/fstab

停止陣列

首先取消md0的掛載

1
umount /dev/md0

停止md0

1
mdadm -S /dev/md0

刪除陣列

1
rm /dev/md0

(取消掛載,使用--fail 和--remove刪除raid 0中的裝置,然後使用-S停止md0)

 

(2)做一個可用大小為2G的RAID 1,模擬磁碟損壞並新增新的磁碟。

製作RAID 1和上面的製作RAID 0步驟相似

使用2個2G分割區製作一個2G的RAID 1;

建立兩個2G大小的分割區/dev/sdb5 /dev/sdb6

執行mdadm命令,將/dev/sdb{5,6}建立為RAID 1 (沒有mdadm命令可以使用yum install mdadm 安裝)

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

使用 mdadm —D 檢視md0的資訊

1
mdadm —D /dev/md0

使用fdisk新建一個大小為2G的/dev/sdb7

使用 mdadm --add  為raid 1 新增一個預備磁碟

1
mdadm /dev/md0 --add  /dev/sdb7

模擬 raid 1下的/dev/sdb6 損壞

1
mdadm /dev/md0 --fail /dev/sdb6

/dev/sdb7會自動頂替壞掉的sdb6

(3)做一個可用大小為2G的RAID 5,使用-x指定空閒磁碟個數,模擬磁碟損壞觀察效果。

製作步驟與RAID 0相似,這裡可以使用3個1G分割區製作一個2G的RAID 5

這裡建立4個1G分割區,其中一個當作預備磁碟

mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb{5,6,7,8}

模擬/dev/md0中的/dev/sdb5 損壞 

1
mdadm /dev/md0 --fail /dev/sdb5

空閒磁碟/dev/sdb8 自動頂替損壞的/dev/sdb5

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-05/143821.htm


IT145.com E-mail:sddin#qq.com