關於raid

概述:將多塊磁盤組合成一塊邏輯磁盤,從而提高讀寫性能與安全性。
1.實現方式
軟件實現:通過主機的RAID軟件實現,易於實施但是性能有限
硬件實現:RAID控制卡,基於主機的硬件RAID技術,將硬盤連接到控制卡上控制卡和硬盤之間通過PCI總線交互;外部RAID控制卡,基於存儲陣列的高級硬件RAID技術,想主機提供一個硬盤的接口界面,是主機看到一個普通的存儲卷,主機通過它支持的協議對捲進行管理。
2.基本概念
條帶(strip):磁盤上一塊由若干地址連續的磁盤塊構成的,大小固定的區域
分條(stripe):位於RAID集上的所有磁盤相同位置的條帶(strip)組成的存儲區域
條帶尺寸:也叫分條深度,描述了構成條帶的磁盤塊的數目
分條尺寸:條帶尺寸與RAID集中硬盤數量的乘積,即條帶的容量。
數據鏡像:將同一數據寫入兩塊不同的磁盤,從而產生該數據的兩個副本。
奇偶校驗:對寫入的數據進行運算得到一個校驗值用於數據恢復
3.RAID級別
RAID0
無容錯的條帶陣列。讀寫性能很好,但是無安全性可言。一個文件塊壞了真個檔案文件就失效了,一個塊磁盤壞了整個RAID集就失效了。建議使用相同大小的磁盤組建。如果1塊100G的與1塊200G的硬盤組建的話,前200G的數據是等量分別存儲在兩塊硬盤上的,後100G容量只能存在200G容量的那塊硬盤上。
軟件RAID可以手工制定分條尺寸,硬件RAID由廠商設定分條尺寸
RAID1
磁盤鏡像。讀性能還可以,寫性能相對較差,安全性很好。最好使用相同大小相同品牌的兩塊硬盤,如果容量不等的話,以容量較小的那塊爲準。寫入數據被I/O總線複製兩2份寫到各個磁盤,如果使用磁盤陣列RAID卡的話會複製一份而不用I/O總線。
RAID3
帶專用檢驗磁盤的並行訪問陣列。數據讀寫以整個條帶爲單位進行,從而所有磁盤能夠併發的執行操作,而不存在更新同一條帶中某些存儲帶的部分寫操作(這樣存在一些磁盤空間浪費),即任何數據的讀寫操作都要訪問整個條帶。可以這麼去理解,給RAID0加一個獨立的校驗磁盤。RAID3爲傳輸大量數據提供了很高的帶寬,因而常用於視頻流服務等設計大量數據數據訪問的場景中。
RAID4與RAID3唯一的差別就是支持數據磁盤的獨立訪問,也就是說某個數據單元可以從單塊磁盤中讀寫而無需訪問整個條帶。RAID5相對於RAID4來說不同點在於它將校驗值分佈存儲在所有的磁盤上,這樣就避免了校驗磁盤成爲寫性能的瓶頸。RAID6與RAID5也是基本類似,不同的地方是引入了第二個校驗值,這樣當兩塊磁盤同時失效它仍然可以恢復,因此最少需要四塊磁盤來組建。
RAID0+1與RAID1+0
結合RAID0的性能優勢和RAID1的安全優勢。
RAID0+1,將所有磁盤分成兩個小組,小組內部做RAID0,小組之間做RAID1;RAID1+0,將所有磁盤兩個一組分開,小組內部做RAID1,小組之間做RAID0。
至少需要四塊磁盤才能組建。
4.在linux上實現軟RAID
在linux上實現軟RAID只需要使用一個命令:mdadm
1.檢測是否加載了mdadm
cat /proc/mdstat #還可以用cat /proc/devices | grep md或者lsmld | grep md
2.磁盤格式 FD
如果MD編譯進入了內核,那麼當內核調用MD驅動時會自動查找分區格式爲FD格式的磁盤。所以一般用fdisk將MD磁盤設置爲FD格式。


W保存退出後,使用partprobe命令強制內核刷新分區表,使得剛纔創建的分區生效可用。
3.創建RAID
mdadm --create --auto=yes /dev/md0 --level=n --raid-devices=n1 --spare-devices=n3 /dev/sdb1 /dev/sdc1 /dev/sdd……
--auto=yes :決定建立後面接的軟件磁盤陣列裝置,即/dev/md0
--raid-devices :使用n1個磁盤作爲磁盤陣列
--spare-devices :使用n2個磁盤做熱備盤
--level :定義RAID級別,這裏也可以直接寫,如-l0,-l5
最後跟的幾個磁盤是做RAID的磁盤,注意,也可以是分區。但是跟分區的話其實做RAID並沒有什麼意義,一個分區壞了還可以修復,一塊磁盤壞了就不能發揮RAID在安全上的優勢。所以本例中限於實驗條件僅僅作爲一個演示。如/dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5,或寫作/dev/sdb{1,2,3,5,}

224143345.jpg

4.檢驗
cat /proc/mdstat
這條命令可以查看大概的信息,陣列級別,磁盤對應號碼,塊大小等。

224215449.jpg

詳細信息可以使用mdadm --detail /dev/md0。從這裏可以看見RAID磁盤數,熱
備盤數,UUID,磁盤狀態等信息。

224251640.jpg

5.創建文件系統並掛載
mkfs.ext3 /dev/md0
mount /dev/md0 /mnt/raid
6.管理磁盤陣列
添加磁盤:mdadm --manage /dev/md0 --add /dev/sdb8 #新添加的磁盤的磁盤會成爲熱備盤
刪除磁盤:mdadm --manage /dev/md0 --remove /dev/sdb1
設置錯誤磁盤:mdadm --manage /dev/md0 --fail /dev/sdb2 #設置一個磁盤錯誤然後可以換下這個磁盤
7.開機自啓動並掛載RAID
編輯/etc/fstab文件
8.關閉軟RAID
直接關閉:mdadm –stop /dev/md0


mdadm 主要命令說明模式(7種):

Assemble:加入一個以前定義的陣列

Build:創建一個沒有超級塊的陣列

Create:創建一個新的陣列,每個設備具有超級塊

Manage: 管理陣列(如添加和刪除)

Misc:允許單獨對陣列中的某個設備進行操作(如停止陣列)

Follow or Monitor:監控RAID的狀態

Grow:改變RAID的容量或陣列中的設備數目

選項:
-A, --assemble:加入一個以前定義的陣列
-B, --build:創建一個沒有超級塊的陣列(Build a legacy array without superblocks.)
-C, --create:創建一個新的陣列
-F, --follow, --monitor:選擇監控(Monitor)模式
-G, --grow:改變激活陣列的大小或形態
-I, --incremental:添加一個單獨的設備到合適的陣列,並可能啓動陣列
--auto-detect:請求內核啓動任何自動檢測到的陣列
-h, --help:幫助信息,用在以上選項後,則顯示該選項信息
--help-options:顯示更詳細的幫助
-V, --version:打印mdadm的版本信息
-v, --verbose:顯示細節
-b, --brief:較少的細節。用於 --detail 和 --examine 選項
-Q, --query:查看一個device,判斷它爲一個 md device 或是 一個 md 陣列的一部分
-D, --detail:打印一個或多個 md device 的詳細信息
-E, --examine:打印 device 上的 md superblock 的內容
-c, --config= :指定配置文件,缺省爲 /etc/mdadm.conf
-s, --scan:掃描配置文件或 /proc/mdstat以搜尋丟失的信息。配置文件/etc/mdadm.conf


-C 創建Raid (/dev/md0是我的raid名稱)
-n 磁盤陣列個數

-l raid的級別,-x hostspare,待機磁盤,

--size 指定每塊磁盤大小

--add -a : hotadd subsequent devices to the array
--remove -r : remove subsequent devices, which must not be active
--fail -f : mark subsequent devices a faulty
--set-faulty : same as --fail
--run -R : start a partially built array
--stop -S : deactivate array, releasing all resources
--readonly -o : mark array as readonly
--readwrite -w : mark array as readwrite


Options that are valid with management mode are:
--add -a : hotadd subsequent devices to the array
--remove -r : remove subsequent devices, which must not be active
--fail -f : mark subsequent devices a faulty
--set-faulty : same as --fail
--run -R : start a partially built array
--stop -S : deactivate array, releasing all resources
--readonly -o : mark array as readonly
--readwrite -w : mark array as readwrite

使用cat /proc/mdstat命令來查看一下RAID的狀態
配置完後,需mdadm -D --scan>/etc/mdadm.conf 進行配置更新

停止陣列前,需umount 執行mdadm -S /dev/mdX

重新啓動 執行 mdadm -As /dev/mdX

陣列組中移除硬盤 mdadm /dev/mdX -r /dev/sdX

陣列組中添加硬盤 mdadm /dev/mdX -a /dev/sdX

查看單個分區 mdadm -E /dev/sdX


熱備盤設置

[root@mail ~]# mdadm -C /dev/md5 -l 5 -n 3  -x 1 /dev/sd{b,c,d,e}1
mdadm: /dev/sdb1 appears to contain an ext2fs file system
    size=3132288K  mtime=Thu Jun 13 17:39:02 2013
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Thu Jun 13 19:41:15 2013
mdadm: /dev/sdc1 appears to contain an ext2fs file system
    size=3132288K  mtime=Thu Jun 13 17:39:02 2013
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Thu Jun 13 19:41:15 2013
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Thu Jun 13 19:41:15 2013
mdadm: /dev/sde1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Thu Jun 13 19:41:15 2013
mdadm: largest drive (/dev/sdb1) exceed size (1044096K) by more than 1%
Continue creating array? yes
mdadm: array /dev/md5 started.


[root@mail ~]# mdadm -C /dev/md1 -l  1  -n 2   /dev/sd{f,g}1
mdadm: /dev/sdf1 appears to contain an ext2fs file system
    size=2096448K  mtime=Thu Jan  1 08:00:00 1970
mdadm: /dev/sdf1 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Thu Jun 13 19:41:46 2013
mdadm: /dev/sdg1 appears to contain an ext2fs file system
    size=2096448K  mtime=Thu Jan  1 08:00:00 1970
mdadm: /dev/sdg1 appears to be part of a raid array:
    level=raid1 devices=2 ctime=Thu Jun 13 19:41:46 2013
mdadm: largest drive (/dev/sdg1) exceed size (2096384K) by more than 1%
Continue creating array? yes
mdadm: array /dev/md1 started.

[root@mail ~]# mdadm -Ds >> /etc/mdadm.conf 

[root@mail ~]# cat  /etc/mdadm.conf 
ARRAY /dev/md5 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=1fb23f21:7be94495:e13cb744:a208b440
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=9ae7eff0:81a98310:014c7156:78c847c7


[root@mail ~]# mdadm -Ds  /dev/md5 
/dev/md5:
        Version : 0.90
  Creation Time : Thu Jun 13 21:03:51 2013
     Raid Level : raid5
     Array Size : 2088192 (2039.59 MiB 2138.31 MB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 5
    Persistence : Superblock is persistent

    Update Time : Thu Jun 13 21:04:17 2013
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 1fb23f21:7be94495:e13cb744:a208b440
         Events : 0.4

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

       3       8       65        -      spare   /dev/sde1

[root@mail ~]# mdadm   /dev/md5 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md5


[root@mail ~]# mdadm -Ds  /dev/md5 
/dev/md5:
        Version : 0.90
  Creation Time : Thu Jun 13 21:03:51 2013
     Raid Level : raid5
     Array Size : 2088192 (2039.59 MiB 2138.31 MB)
  Used Dev Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 5
    Persistence : Superblock is persistent

    Update Time : Thu Jun 13 21:08:03 2013
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

 Rebuild Status : 10% complete

           UUID : 1fb23f21:7be94495:e13cb744:a208b440
         Events : 0.6

    Number   Major   Minor   RaidDevice State
       3       8       65        0      spare rebuilding   /dev/sde1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

       4       8       17        -      faulty spare   /dev/sdb1
 

[root@mail init.d]# cat  /etc/mdadm.conf 
MAILADDR root@localhost                 //當一個磁盤壞了的話,就會發送郵件
ARRAY /dev/md5 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=1fb23f21:7be94495:e13cb744:a208b440 auto=yes spare-group=group1
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=9ae7eff0:81a98310:014c7156:78c847c7   auto=yes spare-group=group1
   
[root@mail ~]# service mdmonitor  start            //啓動mdmonitor服務
Starting mdmonitor:                                        [  OK  ]


當md1的一個盤壞了的話,md5的磁盤的空閒盤就會飄逸過來


6個問題

1. Soft Raid 是否一定需要 mdadm.conf 的配置文件才能啓動(也就是重啓後怎麼自動啓動Raid)


答案是,不一定.

如下rc.sysinit,是Centos的系統,如果有mdadm.conf才能啓動raid.

1
2
3
if[ -f /etc/mdadm.conf ]; then
/sbin/mdadm-A -s
fi

但是,你可以沒有配置文件,在啓動後,用下面的方法啓動

1
mdadm -A /dev/md0/dev/sd[bcde]


另外,如果你的Soft Raid是在系統安裝時建的,那麼沒有mdadm.conf也能啓動raid.爲什麼啦,看日誌
kernel: md: Autodetecting RAID arrays.

在內核的編譯中有這麼一句"Autodetect RAID arrays during kernel boot",所以會自動的加載.所以重起系統後raid都需要有配置文件.但這個必須文件類型爲fd.也就是Linux raid auto.


2. Soft Raid 的本身的信息是記錄在什麼地方?


這個是建議在Raid的成員中,每個硬盤有一個叫超級塊(zero-superblock )的東西.記錄在這個上面.所以如果給raid成員恢復成普通硬盤時,記的刪除zero-superblock.
所以刪除RAID中的硬盤的方法如下

1
2
3
mdadm --stop /dev/md0
mdadm --remove /dev/md0
mdadm --zero-superblock /dev/sda


3. 重裝系統後, raid 是否還能使用?


答案一樣是不一定

當你給系統也做進來,當然那個有系統的不行,但你只做數據分區,基本都是沒有問題的.只要你重裝系統後,使用原來的啓動命令(配置文件也行),來啓動就可以了.

1
2
mdadm -A /dev/md0/dev/sd[bcde]
mdadm -As /dev/md0(有配置文件時)


4. 軟 Raid 中,分區表中的分區類型是否一定要修改成 Linux raid auto?


答案一樣是不一定

在安裝系統時選擇raid時,一定要轉成raid的分區類型,但如果安裝完系統後自己使用命令來建,就不用.但最好是.


5. 是否一定要分區,才能建 Soft Raid?


答案一樣是不一定

和上面一樣,分爲安裝系統時建soft raid,和安裝後在建raid.在安裝系統時,一定是在分區上建的,但安裝完系統後手工建的raid,沒有分區也行.但最好分一下修改成linux raid auto,這樣可以不需要配置文件也能啓動

6. 在沒有同步完(rebuilding)成前是否能重起


在同步rebuilding的過程中,重起是沒有問題的,重起完,會從上次同步的地方起開始同步


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章