1. 程式人生 > >Linux 獨立冗余磁盤陣列介紹

Linux 獨立冗余磁盤陣列介紹

linux raid

RAID(Redundant Array of Independent Disk 獨立冗余磁盤陣列)技術是加州大學伯克利分校1987年提出,最初是為了組合小的廉價磁盤來代替大的昂貴磁盤,同時希望磁盤失效時不會使對數據的訪問受損 失而開發出一定水平的數據保護技術。RAID就是一種由多塊廉價磁盤構成的冗余陣列,在操作系統下是作為一個獨立的大型存儲設備出現。RAID可以充分發 揮出多塊硬盤的優勢,可以提升硬盤速度,增大容量,提供容錯功能夠確保數據安全性,易於管理的優點,在任何一塊硬盤出現問題的情況下都可以繼續工作,不會 受到損壞硬盤的影響。

常用raid介紹

raid 0

RAID 0又稱為Stripe或Striping,它代表了所有RAID級別中最高的存儲性能。RAID 0提高存儲性能的原理是把連續的數據分散到多個磁盤上存取,這樣,系統有數據請求就可以被多個磁盤並行的執行,每個磁盤執行屬於它自己的那部分數據請求。這種數據上的並行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。

使用:以2塊盤為例子,數據存儲各一半
優點:寫入讀取快,適合保存非重要數據
可用空間:num*min(device)
技術分享圖片


raid 1

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

使用:以2塊盤為例子,數據各一份
優點:讀性能提升,數據冗余
缺點:寫性能略有下降
可用空間:1*min(device)
技術分享圖片


raid 4

RAID是英文Redundant Array of IndependentDisks的縮寫,中文簡稱為獨立磁盤冗余陣列。RAID就是一種由多塊硬盤構成的冗余陣列。雖然RAID包含多塊硬盤,但是在操作系統下是作為一個獨立的大型存儲設備出現。RAID4即帶奇偶校驗碼的獨立磁盤結構,RAID4和RAID3很象。在獨立訪問陣列中,每個磁盤都是獨立運轉的,因此不同的I/O請求可以並行地滿足

使用:以3塊盤為例子,一塊校驗盤,用戶還原數據,2塊數據盤
優點:有冗余能力,讀、寫性能提升,允許壞一塊盤
缺點:校驗盤壓力過大
可用空間:(N-1)*min(device)


raid 5

RAID 5 是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。 RAID 5可以理解為是RAID 0和RAID 1的折中方案。RAID 5可以為系統提供數據安全保障,但保障程度要比Mirror低而磁盤空間利用率要比Mirror高。RAID 5具有和RAID 0相近似的數據讀取速度,只是多了一個奇偶校驗信息,寫入數據的速度比對單個磁盤進行寫入操作稍慢。同時由於多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較低,是目前運用較多的一種解決方案。

使用:以3塊盤為例子,1塊輪流做校驗盤和2塊輪流存儲盤
優點:相比radi4,降低校驗盤壓力
缺點:只能壞一塊盤
可用空間:(N-1)*min(device)
技術分享圖片


raid 6

RAID6技術是在RAID 5基礎上,為了進一步加強數據保護而設計的一種RAID方式,實際上是一種擴展RAID 5等級。與RAID 5的不同之處於除了每個硬盤上都有同級數據XOR校驗區外,還有一個針對每個數據塊的XOR校驗區。當然,當前盤數據塊的校驗數據不可能存在當前盤而是交錯存儲的,這樣一來,等於每個數據塊有了兩個校驗保護屏障(一個分層校驗,一個是總體校驗),因此RAID 6的數據冗余性能相當好。但是,由於增加了一個校驗,所以寫入的效率較RAID 5還差,而且控制系統的設計也更為復雜,第二塊的校驗區也減少了有效存儲空間。

使用:以4塊盤為例子,二塊校驗盤,用戶還原數據,2塊數據盤
優點:容錯比raid 5好
缺點:寫入沒raid 5 好
可用空間:(N-2)*min(device)


raid 10

Raid 10是一個Raid 1與Raid0的組合體,它是利用奇偶校驗實現條帶集鏡像,所以它繼承了Raid0的快速和Raid1的安全。我們知道,RAID 1在這裏就是一個冗余的備份陣列,而RAID 0則負責數據的讀寫陣列。其實,右圖只是一種RAID 10方式,更多的情況是從主通路分出兩路,做Striping操作,即把數據分割,而這分出來的每一路則再分兩路,做Mirroring操作,即互做鏡像。

使用:以4塊盤為例子,分2對 raid 1,2對raid為raid 0
優點:提升讀寫,有冗余,每對raid1能壞一塊
技術分享圖片


虛擬實現raid 5

mdadm 常用選項說明

支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
模式:
-C: 創建模式
|--- -n #: 使用#個塊設備來創建此RAID;
|--- -l #:指明要創建的RAID的級別;
|--- -a {yes|no}:自動創建目標RAID設備的設備文件;
|--- -c CHUNK_SIZE: 指明塊大小;
|--- -x #: 指明空閑盤的個數;
-D:管理模式 顯示raid的詳細信息;
-f: 標記指定磁盤為損壞;
-a: 添加磁盤
-r: 移除磁盤

實驗先創建4個1G的分區,用2塊存儲數據,1塊存儲校驗,1塊備用,創建raid 5,

#創建4塊分區,註意格式是fd
[root@localhost sh]# fdisk /dev/sdb

命令(輸入 m 獲取幫助):t
分區號 (1-7,默認 7):5
Hex 代碼(輸入 L 列出所有代碼):fd
已將分區“Linux”的類型更改為“Linux raid autodetect”

  設備 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    16779263     8388608    5  Extended
/dev/sdb5            4096     2101247     1048576   fd  Linux raid autodetect
/dev/sdb6         2103296     4200447     1048576   fd  Linux raid autodetect
/dev/sdb7         4202496     6299647     1048576   fd  Linux raid autodetect
/dev/sdb8         6301696     8398847     1048576   fd  Linux raid autodetect

查看本機虛擬raid

[root@localhost sh]# cat /proc/mdstat
Personalities :
unused devices: <none>

創建

 [root@localhost sh]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
#-x 1 一塊是空閑備份   -l 5 raid5 -n 3塊使用盤
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

再次查看

 [root@localhost sh]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>
#active  活動狀態,可以使用

掛載

 [root@localhost sh]# mke2fs -t ext4 /dev/md0

[root@localhost sh]# mount /dev/md0 /mnt/t2
[root@localhost sh]# df -h /mnt/t2/      #2g可以用設備
文件系統        容量  已用  可用 已用% 掛載點
/dev/md0        2.0G  6.0M  1.9G    1% /mnt/t2

詳細信息查看:

[root@localhost t2]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Apr 23 03:14:26 2018
        Raid Level : raid5
        Array Size : 2095104 (2046.00 MiB 2145.39 MB)
     Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr 23 03:20:48 2018
             State : clean
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 24dec4a5:d57dbe03:f9aa2729:b2997a05
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
       4       8       23        2      active sync   /dev/sdb7

       3       8       24        -      spare   /dev/sdb8    空閑狀態

手動標記一塊錯誤盤

[root@localhost t2]# mdadm  /dev/md0 -f /dev/sdb6
mdadm: set /dev/sdb6 faulty in /dev/md0

[root@localhost t2]# cat /proc/mdstat   #這個階段可以觀察數據恢復  直到active
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3] sdb6[1](F) sdb5[0]
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

再次觀察

[root@localhost t2]# mdadm -D /dev/md0
#會發現
 1       8       22        -      faulty   /dev/sdb6      #損壞盤   而8已經從空閑到正常使用
 #如果在移掉一個
 State : clean也會變化成clean,degrade降級狀態

手動移除壞的分區

 [root@localhost t2]# mdadm  /dev/md0 -r /dev/sdb6
mdadm: hot removed /dev/sdb6 from /dev/md0

再次添加

[root@localhost t2]# mdadm  /dev/md0 -a /dev/sdb6
mdadm: added /dev/sdb6

移除raid 5

[root@localhost mnt]# umount /mnt/t2
[root@localhost mnt]# mdadm -S /dev/md0
mdadm: stopped /dev/md0

Linux 獨立冗余磁盤陣列介紹