1. 程式人生 > >RAID管理及命令mdadm詳解

RAID管理及命令mdadm詳解

mdadm 磁盤陣列 raid管理

磁盤陣列

磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。
磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。

分類

磁盤陣列其樣式有三種,一是外接式磁盤陣列櫃、二是內接式磁盤陣列卡,三是利用軟件來仿真。
外接式磁盤陣列櫃最常被使用大型服務器上,具可熱交換(Hot Swap)的特性,不過這類產品的價格都很貴。
內接式磁盤陣列卡,因為價格便宜,但需要較高的安裝技術,適合技術人員使用操作。硬件陣列能夠提供在線擴容、動態修改陣列級別、自動數據恢復、驅動器漫遊、超高速緩沖等功能。它能提供性能、數據保護、可靠性、可用性和可管理性的解決方案。陣列卡專用的處理單元來進行操作。

利用軟件仿真的方式,是指通過網絡操作系統自身提供的磁盤管理功能將連接的普通SCSI卡上的多塊硬盤配置成邏輯盤,組成陣列。軟件陣列可以提供數據冗余功能,但是磁盤子系統的性能會有所降低,有的降低幅度還比較大,達30%左右。因此會拖累機器的速度,不適合大數據流量的服務器。

RAID優缺點

優點
提高傳輸速率。RAID通過在多個磁盤上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput)。在RAID中,可以讓很多磁盤驅動器同時傳輸數據,而這些磁盤驅動器在邏輯上又是一個磁盤驅動器,所以使用RAID可以達到單個磁盤驅動器幾倍、幾十倍甚至上百倍的速率。這也是RAID最初想要解決的問題。因為當時CPU的速度增長很快,而磁盤驅動器的數據傳輸速率無法大幅提高,所以需要有一種方案解決二者之間的矛盾。RAID最後成功了。

通過數據校驗提供容錯功能。普通磁盤驅動器無法提供容錯功能,如果不包括寫在磁盤上的CRC(循環冗余校驗)碼的話。RAID容錯是建立在每個磁盤驅動器的硬件容錯功能之上的,所以它提供更高的安全性。在很多RAID模式中都有較為完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗余性。
缺點
RAID0沒有冗余功能,如果一個磁盤(物理)損壞,則所有的數據都無法使用。
RAID1磁盤的利用率最高只能達到50%(使用兩塊盤的情況下),是所有RAID級別中最低的。
RAID0+1以理解為是RAID 0和RAID 1的折中方案。RAID 0+1可以為系統提供數據安全保障,但保障程度要比 Mirror低而磁盤空間利用率要比Mirror高。

RAID級別

RAID 0: RAID 0連續以位或字節為單位分割數據,並行讀/寫於多個磁盤上,因此具有很高的數據傳輸率,但它沒有數據冗余,因此並不能算是真正的RAID結構。RAID 0只是單純地提高性能,並沒有為數據的可靠性提供保證,而且其中的一個磁盤失效將影響到所有數據。因此,RAID 0不能應用於數據安全性要求高的場合。

技術分享圖片

RAID 1: 它是通過磁盤數據鏡像實現數據冗余,在成對的獨立磁盤上產生互為備份的數據。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID 1可以提高讀取性能。RAID 1是磁盤陣列中單位成本最高的,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據。

技術分享圖片

RAID 5: RAID 5不單獨指定的奇偶盤,而是在所有磁盤上交叉地存取數據及奇偶校驗信息。在RAID 5上,讀/寫指針可同時對陣列設備進行操作,提供了更高的數據流量。RAID 5更適合於小數據塊和隨機讀寫的數據。RAID 3與RAID 5相比,最主要的區別在於RAID 3每進行一次數據傳輸就需涉及到所有的陣列盤;而對於RAID 5來說,大部分數據傳輸只對一塊磁盤操作,並可進行並行操作。在RAID 5中有“寫損失”,即每一次寫操作將產生四個實際的讀/寫操作,其中兩次讀舊的數據及奇偶信息,兩次寫新的數據及奇偶信息。

技術分享圖片

RAID 01/10: 根據組合分為RAID 10和RAID 01,實際是將RAID 0和RAID 1標準結合的產物,在連續地以位或字節為單位分割數據並且並行讀/寫多個磁盤的同時,為每一塊磁盤作磁盤鏡像進行冗余。它的優點是同時擁有RAID 0的超凡速度和RAID 1的數據高可靠性,但是CPU占用率同樣也更高,而且磁盤的利用率比較低。RAID 1+0是先鏡射再分區數據,再將所有硬盤分為兩組,視為是RAID 0的最低組合,然後將這兩組各自視為RAID 1運作。RAID 0+1則是跟RAID 1+0的程序相反,是先分區再將數據鏡射到兩組硬盤。它將所有的硬盤分為兩組,變成RAID 1的最低組合,而將兩組硬盤各自視為RAD 0運作。性能上,RAID 0+1比RAID 1+0有著更快的讀寫速度。可靠性上,當RAID 1+0有一個硬盤受損,其余三個硬盤會繼續運作。RAID 0+1 只要有一個硬盤受損,同組RAID 0的另一只硬盤亦會停止運作,只剩下兩個硬盤運作,可靠性較低。因此,RAID 10遠較RAID 01常用,零售主板絕大部份支持RAID 0/1/5/10,但不支持RAID 01

技術分享圖片

技術分享圖片

RAID 50: RAID50是RAID5與RAID0的結合。此配置在RAID5的子磁盤組的每個磁盤上進行包括奇偶信息在內的數據的剝離。每個RAID5子磁盤組要求三個硬盤。RAID50具備更高的容錯能力,因為它允許某個組內有一個磁盤出現故障,而不會造成數據丟失。而且因為奇偶位分部於RAID5子磁盤組上,故重建速度有很大提高。優勢:更高的容錯能力,具備更快數據讀取速率的潛力。需要註意的是:磁盤故障會影響吞吐量。故障後重建信息的時間比鏡像配置情況下要長。(不常用的)

技術分享圖片

兩道Linux運維面試題

簡述raid0 raid1 raid5 三種工作模式的工作原理及特點
RAID,可以把硬盤整合成一個大磁盤,還可以在大磁盤上再分區,放數據
還有一個大功能,多塊盤放在一起可以有冗余(備份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一塊盤和N個盤組合
其優點讀寫快,是RAID中最好的
缺點:沒有冗余,一塊壞了數據就全沒有了
RAID 1,只能2塊盤,盤的大小可以不一樣,以小的為準
10G+10G只有10G,另一個做備份。它有100%的冗余,缺點:浪費資源,成本高
RAID 5 ,3塊盤,容量計算10*(n-1),損失一塊盤
特點,讀寫性能一般,讀還好一點,寫不好
冗余從好到壞:RAID1 RAID10 RAID 5 RAID0
性能從好到壞:RAID0 RAID10 RAID5 RAID1
成本從低到高:RAID0 RAID5 RAID1 RAID10
單臺服務器:很重要盤不多,系統盤,RAID1
數據庫服務器:主庫:RAID10 從庫 RAID5\RAID0(為了維護成本,RAID10)
WEB服務器,如果沒有太多的數據的話,RAID5,RAID0(單盤)
有多臺,監控、應用服務器,RAID0 RAID5
我們會根據數據的存儲和訪問的需求,去匹配對應的RAID級別
簡述raid0 raid1 raid5 三種工作模式的工作原理及特點
RAID 0:帶區卷,連續以位或字節為單位分割數據,並行讀/寫於多個磁盤上,因此具有很高的數據傳輸率
但它沒有數據冗余,RAID 0 只是單純地提高性能,並沒有為數據的可靠性提供保證
而且其中的一個磁盤失效將影響到所有數據。因此,RAID 0 不能應用於數據安全性要求高的場合
RAID 1:鏡像卷,它是通過磁盤數據鏡像實現數據冗余,在成對的獨立磁盤上產生互為備份的數據
不能提升寫數據效率。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID1 可以提高讀取性能
RAID 1 是磁盤陣列中單位成本最高的,鏡像卷可用容量為總容量的1/2,但提供了很高的數據安全性和可用性
當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據
RAID5:至少由3塊硬盤組成,分布式奇偶校驗的獨立磁盤結構,它的奇偶校驗碼存在於所有磁盤上
任何一個硬盤損壞,都可以根據其它硬盤上的校驗位來重建損壞的數據(最多允許1塊硬盤損壞)
所以raid5可以實現數據冗余,確保數據的安全性,同時raid5也可以提升數據的讀寫性能

一、創建模式

選項:-C
專用選項:
-l #: 級別
-n #: 設備個數
-a {yes|no} 自動為其創建設備文件
-c CHUNK_SIZE: 指定數據塊大小(chunk)
-x #: 指定空閑盤(熱備磁盤)個數,空閑盤(熱備磁盤)能在工作盤損壞後自動頂替
註意:創建陣列時,陣列所需磁盤數為-n參數和-x參數的個數相加之和

示例:創建raid0,raid1,raid5

1、創建raid0:
#創建raid0 :
~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
#格式化即創建文件系統,默認生成UUID:
~]# mkfs.ext4 /dev/md0
2、創建raid1:

#創建raid
~]# mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sdb{5,6}
#格式化即創建文件系統,默認生成UUID:
~]# mkfs.ext4 /dev/md1

3、創建raid5:

#創建raid5
~]# mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sdb{5,6,7}
#格式化即創建文件系統,默認生成UUID:
~]# mkfs.ext4 /dev/md2
#增加熱備磁盤:
~]# mdadm /dev/md2 -a /dev/sdb8

4、查看md狀態:
    1 查看指定RAID設備的詳細信息:

        選項: -D = --detail

~]# mdadm -D /dev/md0 # 只查看raid0信息

    2 查看全部的raid信息

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md0 : active raid0 sdb2[1] sdb1[0]
4206592 blocks super 1.2 512k chunks
md1 : active raid1 sdb6[1] sdb5[0]
2103447 blocks super 1.2 [2/2] [UU]
unused devices: <none>

註意:在創建raid前,應該先查看磁盤是否被識別,如果內核還識未別,創建Raid時會報錯:
cat /proc/partitions 或者 lsblk
如果沒有被識別,可以執行命令:
kpartx /dev/sdb或者partprobe/dev/sdb
centos6:echo ‘- - -‘ > /sys/class/scsi_host/host0/scan(只現虛擬機)
centos7:echo ‘- - -‘ > /sys/class/scsi_host/host2/scan(只現虛擬機)

二、管理模式

選項:-a(--add),-d(--del),-r(--remove),-f(--fail)

1、模擬損壞:
    mdadm /dev/md1 -f /dev/sdb5
2、移除損壞的磁盤:
    mdadm /dev/md1 -r /dev/sdb5
3、添加新的硬盤到已有陣列:
    mdadm /dev/md1 -a /dev/sdb7

註意:
3.1、新增加的硬盤需要與原硬盤大小一致
3.2、如果原有陣列缺少工作磁盤(如raid1只有一塊在工作,raid5只有2塊在工作),這時新增加的磁盤直接變為工作磁盤,如果原有陣列工作正常,則新增加的磁盤為熱備磁盤。
------------------以下四條命令,僅限raid1,raid5
mdadm /dev/md1 -f /dev/sdf 將md1中的sdf設置為壞的設備
mdadm /dev/md1 -r /dev/sdf 將md1中的sdf從raid成員中刪除
mdadm /dev/md1 -a /dev/sdf 向md1中增加新成員sdf 
mdadm -G /dev/md1 -n 3 -a /dev/sdh 將raid1 md1的成員數量改為3,並加入新的成員(不是加為熱備盤)

三、軟RAID管理

生成配置文件:
    mdadm -D -s > /etc/mdadm.conf  #將raid信息保存至文件
    mdadm -A -s  #激活/etc/mdadm.conf 中的所有未激活的raid設備 ,已激活不讀取.
停止設備:-S = --stop 
    mdadm –S /dev/md0
激活設備:將上述已經停止的陣列重新裝配:
    mdadm -A /dev/md0 /dev/sdc /dev/sdd #激活md0 手動添加md0磁盤
    mdadm –A –s /dev/md0 激活md0 讀取/etc/mdadm.conf中md0磁盤信息
強制啟動:
    mdadm –R /dev/md0 
刪除某塊硬盤的raid信息:
    mdadm --zero-superblock /dev/sdb1
監控模式
    選項:-F
    mdadm -F /dev/md1 實時監控raid狀態
實現自動裝配:(軟RAID是基於系統的,當原系統損壞了,需要重新裝配RAID)
    mdadm運行時會自動檢查/etc/mdadm.conf 文件並嘗試自動裝配,因此第一次配置raid後可以將信息導入到/etc/mdadm.conf中,命令如下:
    mdadm -D -s > /etc/mdadm.conf  #將raid信息保存至文件
    mdadm -A -s  #激活/etc/mdadm.conf 中的所有未激活的raid設備 ,已激活不讀取.
共享熱備盤實現方式
    mdadm -D -s > /etc/mdadm.conf  //將raid值保存到文件中
    在需要共享的多組raid信息最後分別都寫上spare-group=magedu
    然後再加一新行,頂頭寫MAILADDR root@localhost 或 MAILADDR .
    /etc/init.d/mdmonitor restart  //啟動服務
    service mdmonitor restart   //啟動服務

四、增長模式,用於增加磁盤,為陣列擴容:

選項:-G
示例,將上述raid5的熱備磁盤增加到陣列工作磁盤中

    [root@localhost ~]# mdadm -G /dev/md2  -n 4

註意:-n 4 表示使用四塊工作磁盤
再次使用-D選項查看陣列詳細信息如下:

[root@localhost ~]# mdadm -D /dev/md2
……此處略掉部分信息……
   Number   Major   Minor   RaidDevice State
           0       8       21        0      active sync   /dev/sdb5
           1       8       22        1      active sync   /dev/sdb6
             3       8       23        2      active sync   /dev/sdb7
           4       8       24        3      active sync   /dev/sdb8

五、.mdadm中文man(引用)

基本語法 : mdadm [mode] [options]
[mode] 有7種:
Assemble:將以前定義的某個陣列加入當前在用陣列。
Build:Build a legacy array ,每個device 沒有 superblocks
Create:創建一個新的陣列,每個device 具有 superblocks
Manage: 管理陣列,比如 add 或 remove
Misc:允許單獨對陣列中的某個 device 做操作,比如抹去superblocks 或 終止在用的陣列。
Follow or Monitor:監控 raid 1,4,5,6 和 multipath 的狀態
Grow:改變raid 容量或 陣列中的 device 數目
可用的 [options]:
-A, --assemble:加入一個以前定義的陣列
-B, --build:Build a legacy array without superblocks.
-C, --create:創建一個新的陣列
-Q, --query:查看一個device,判斷它為一個 md device 或是 一個 md 陣列的一部分
-D, --detail:打印一個或多個 md device 的詳細信息
-E, --examine:打印 device 上的 md superblock 的內容
-F, --follow, --monitor:選擇 Monitor 模式
-G, --grow:改變在用陣列的大小或形態
-h, --help:幫助信息,用在以上選項後,則顯示該選項信息
--help-options
-V, --version
-v, --verbose:顯示細節
-b, --brief:較少的細節。用於 --detail 和 --examine 選項
-f, --force
-c, --config= :指定配置文件,缺省為 /etc/mdadm/mdadm.conf
-s, --scan:掃描配置文件或 /proc/mdstat以搜尋丟失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的選項:
-c, --chunk=:Specify chunk size of kibibytes. 缺省為 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:設定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:設定 raid5 的奇偶校驗規則:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省為left-symmetric
--layout=:類似於--parity
-n, --raid-devices=:指定陣列中可用 device 數目,這個數目只能由 --grow 修改
-x, --spare-devices=:指定初始陣列的富余device 數目
-z, --size=:組建RAID1/4/5/6後從每個device獲取的空間總數
--assume-clean:目前僅用於 --build 選項
-R, --run:陣列中的某一部分出現在其他陣列或文件系統中時,mdadm會確認該陣列。此選項將不作確認。
-f, --force:通常mdadm不允許只用一個device 創建陣列,而且創建raid5時會使用一個device作為missing drive。此選項正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}:

示例:

1:創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄

~]# lsblk #查看磁盤是否被系統識別
sdd 8:48 0 1G 0 disk
sde 8:64 0 1G 0 disk
sdf 8:80 0 1G 0 disk
如果沒有被識別,可以執行命令:
entos6:echo ‘- - -‘ > /sys/class/scsi_host/host0/scan(只現虛擬機)
centos7:echo ‘- - -‘ > /sys/class/scsi_host/host2/scan(只現虛擬機)
~]# mdadm -C /dev/md1 -a yes -n 2 -l 1 -x 1 /dev/sd{e,d,f}
~]# lsblk #查看raid1是否創建成功
sdd 8:48 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
sde 8:64 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
sdf 8:80 0 1G 0 disk
└─md1 9:127 0 1023M 0 raid1
~]# mdadm -D /dev/md1 查看raid信息

    /dev/md127:
        Version : 1.2
  Creation Time : Thu Feb 22 11:43:34 2018
     Raid Level : raid1
     Array Size : 1047552 (1023.00 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Fri Feb 23 14:26:59 2018
          State : clean 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

           Name : centos6.magedu.com:1  (local to host centos6.magedu.com)
           UUID : a7ee7358:0f88ee49:f5359499:7a25cd1a
         Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       64        0      active sync   /dev/sde
       1       8       48        1      active sync   /dev/sdd

       2       8       80        -      spare   /dev/sdf

~]# mkfs.ext4 /dev/md1 #格式化 即 創建文件系統 默認生成UUID
~]# blkid /dev/md1 #查看指定raid的文件系統 文件格式,UUID 等信息
/dev/md1: UUID="d6e45441-b68f-4e45-9a18-425887956d87" TYPE="ext4"
~]# vim /etc/fstab #開機自動掛載硬盤的系統文件
UUID=d6e45441-b68f-4e45-9a18-425887956d87 /backup ext4 defaults 0 0
#UUID=ea2ad152-45bb-41cf-904c-e5db0b372df7 //UUID /backup //掛載目錄 exit4//文件系統 defaults 系統的選項 0 0 //開機是否檢測一般為零 //下次開機raid名可能會改變,不重要,UUID生效


2:創建由三塊硬盤組成的可用空間為2G的RAID5設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄

~]# lsblk
sdg 8:96 0 1G 0 disk
sdh 8:112 0 1G 0 disk
sdp 8:240 0 1G 0 disk
~]# mdadm -C /dev/md5 -a yes -n 3 -l 5 -c 256K /dev/sd{g,h,p}
#-C //創建 /dev/md5//raid文件名 -a yes // -n 3 //三塊 -l 5 //raid5 -c 256 //chunk大小為256K
~]# lsblk 查看系統識別硬盤
~]# mdadm -D /dev/md5 查看raid信息
~]# mkfs.ext4 /dev/md5 //格式化/創建文件系統ext4
~]# blkid //查看uuid /文件系統格式
~]# vim /etc/fstab //開機自動掛載硬盤的系統文件
UUID="b4c94f87-8648-4835-8e86-24e7daf58c4d /mydata ext4 defaults 0 0
mount -a //從新去讀/etc/fstab文件內容,掛載未掛載磁盤,以掛載不會從新讀取,

3:創建一個raid50,由7塊盤組成,其中一塊為熱備盤,最終容量為6G大小,chunk大小為1M,要求熱備盤共享,創建為ext4文件系統,開機自動掛載到/magedata目錄下。

創建第一個raid5
~]# lsblk
sdi 8:128 0 1.5G 0 disk
sdj 8:144 0 1.5G 0 disk
sdk 8:160 0 1.5G 0 disk
~]# mdadm -C /dev/md0 -n 3 -a yes -l 5 -c 1M /dev/sd{i,j,k}
~]# mkfs.ext4 /dev/md0
創建第二個raid5
~]# lsblk
sdl 8:176 0 1.5G 0 disk
sdm 8:192 0 1.5G 0 disk
sdn 8:208 0 1.5G 0 disk
sdo 8:224 0 1.5G 0 disk
~]# mdadm -C /dev/md1 -n 3 -a yes -l 5 -c 1M -x 1 /dev/sd{l,m,n,o}
~]# mkfs.ext4 /dev/md0
創建raid0
~]# mdadm -C /dev/md3 -a yes -n 2 -l 0 -c 1M /dev/md1 /dev/md0
查看:lsblk / blkid / mdadm -D /dev/md3
~]# mkfs.ext4 /dev/md3
~]# blkid
~]# vim /etc/fstab
UUID=8a93b1f7-fb18-4439-8548-2a2ec0e4c428 /magedata ext4 defaults 0 0


刪除raid0

~]# mdadm -S /dev/md1 停止raid設備
mdadm: stopped /dev/md1
~]# mdadm --zero-superblock /dev/sdd刪除某塊硬盤的raid信息
~]# hexdump -C -n 1024 /dev/sdd 查看硬盤文件二進制信息
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400

RAID管理及命令mdadm詳解