Linux下RAID磁碟陣列的原理與搭建

上古南城發表於2021-06-04

RAID概念

  • 磁碟陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁碟構成的具有冗餘能力的陣列”之意。 磁碟陣列是由很多價格較便宜的磁碟,以硬體(RAID卡)或軟體(MDADM)形式組合成一個容量巨大的磁碟組,利用多個磁碟組合在一起,提升整個磁碟系統效能。利用這項技術,將資料切割成許多區段,分別存放在各個硬碟上。 磁碟陣列還能利用同位檢查(Parity Check)的觀念,在陣列中任意一個硬碟故障時,仍可讀出資料,在資料重構時,將資料經計算後重新置入新硬碟中

    

為什麼要用RAID

  • RAID(Redundant Arrays of Independent Disks,磁碟陣列):把相同的資料儲存在多個硬碟的不同的地方的方法
  • 通過RAID可以提高磁碟I/O能力(磁碟並行讀寫)以及提高耐用性(磁碟冗餘)。
  • RAID級別:多種磁碟組織在一起的工作方式有所不同

軟體 RAID 和硬體 RAID   

  • 軟體 RAID 的效能較低,因為其使用主機的資源。 需要載入 RAID 軟體以從軟體 RAID 卷中讀取資料。在載入 RAID 軟體前,作業系統需要引導起來才能載入 RAID 軟體。在軟體 RAID 中無需物理硬體。零成本投資。
  • 硬體 RAID 的效能較高。他們採用 PCI Express 卡物理地提供有專用的 RAID 控制器。它不會使用主機資源。他們有 NVRAM 用於快取的讀取和寫入。快取用於 RAID 重建時,即使出現電源故障,它會使用後備的電池電源保持快取。對於大規模使用是非常昂貴的投資。

實現方式:

  • 外接式磁碟陣列:通過擴充套件卡提供適配能力
  • 內接式磁碟陣列:主機板整合RAID控制器
  • Software RAID:在軟體層面實現RAID

 RAID級別:

  • RAID 0:Data Stripping資料分條技術
  • RAID 1:磁碟映象
  • RAID 2:帶海明碼校驗
  • RAID 3:帶奇偶校驗碼的並行傳送
  • RAID 4:帶奇偶校驗碼的獨立磁碟結構
  • RAID 5:分散式奇偶校驗的獨立磁碟結構
  • RAID 10:高可靠性與高效磁碟結構
  • RAID 01:RAID0和RAID1技術結合起來

RAID 的兩個關鍵目標是提高資料可靠性和 I/O 效能。

RAID 中主要有三個關鍵概念和技術:映象( Mirroring )、資料條帶( Data Stripping )和資料校驗( Data parity )。

  • 1.映象:
    • 映象是一種冗餘技術,為磁碟提供保護功能,防止磁碟發生故障而造成資料丟失。
  •  2.資料條帶:
    • 資料條帶技術將資料以塊的方式分佈儲存在多個磁碟中,從而可以對資料進行併發處理。這樣寫入和讀取資料就可以在多個磁碟上同時進行,併發產生非常高的聚合 I/O ,有效提高了整體 I/O 效能,而且具有良好的線性擴充套件性。
  • 3.資料校驗
    • 資料校驗是一種冗餘技術,它用校驗資料來提供資料的安全,可以檢測資料錯誤,並在能力允許的前提下進行資料重構。

RAID 主要優勢有如下幾點:

  • (1) 大容量
    • 這是 RAID 的一個顯然優勢,它擴大了磁碟的容量,由多個磁碟組成的 RAID 系統具有海量的儲存空間。現在單個磁碟的容量就可以到 1TB 以上,這樣 RAID 的儲存容量就可以達到 PB 級,大多數的儲存需求都可以滿足。一般來說, RAID 可用容量要小於所有成員磁碟的總容量。不同等級的 RAID 演算法需要一定的冗餘開銷,具體容量開銷與採用演算法相關。如果已知 RAID 演算法和容量,可以計算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之間。
  • (2) 高效能
    • RAID 的高效能受益於資料條帶化技術。單個磁碟的 I/O 效能受到介面、頻寬等計算機技術的限制,效能往往很有 限,容易成為系統效能的瓶頸。通過資料條帶化, RAID 將資料 I/O 分散到各個成員磁碟上,從而獲得比單個磁碟成倍增長的聚合 I/O 效能。
  • (3) 可靠性
    • 可用性和可靠性是 RAID 的另一個重要特徵。從理論上講,由多個磁碟組成的 RAID 系統在可靠性方面應該比單個磁碟要差。這裡有個隱含假定:單個磁碟故障將導致整個 RAID 不可用。 RAID 採用映象和資料校驗等資料冗餘技術,打破了這個假定。 映象是最為原始的冗餘技術,把某組磁碟驅動器上的資料完全複製到另一組磁碟驅動器上,保證總有資料副本可用。 比起映象 50% 的冗餘開銷 ,資料校驗要小很多,它利用校驗冗餘資訊對資料進行校驗和糾錯。 RAID 冗餘技術大幅提升資料可用性和可靠性,保證了若干磁碟出錯時,不 會導致資料的丟失,不影響系統的連續執行。
  • (4) 可管理性
    • 實際上, RAID 是一種虛擬化技術,它對多個物理磁碟驅動器虛擬成一個大容量的邏輯驅動器。對於外部主機系統來說, RAID 是一個單一的、快速可靠的大容量磁碟驅動器。這樣,使用者就可以在這個虛擬驅動器上來組織和儲存應用系統資料。 從使用者應用角度看,可使儲存系統簡單易用,管理也很便利。 由於 RAID 內部完成了大量的儲存管理工作,管理員只需要管理單個虛擬驅動器,可以節省大量的管理工作。 RAID 可以動態增減磁碟驅動器,可自動進行資料校驗和資料重建,這些都可以 大大簡化管理工作。

RAID幾種常見的型別RAID幾種常見的型別

    

RAID-0 (條帶化)

  • 條帶 (strping),也是我們最早出現的RAID模式
  • 需磁碟數量:2塊以上(大小最好相同),是組建磁碟陣列中最簡單的一種形式,只需要2塊以上的硬碟即可.
  • 特點:成本低,可以提高整個磁碟的效能和吞吐量。RAID 0沒有提供冗餘或錯誤修復能力,速度快.
  • 任何一個磁碟的損壞將損壞全部資料;磁碟利用率為100%

    

RAID-1 (映象化)

  • mirroring(映象卷),需要磁碟兩塊以上
  • 原理:是把一個磁碟的資料映象到另一個磁碟上,也就是說資料在寫入一塊磁碟的同時,會在另一塊閒置的磁碟上生成映象檔案,(同步)
  • RAID 1 mirroring(映象卷),至少需要兩塊硬碟,raid大小等於兩個raid分割槽中最小的容量(最好將分割槽大小分為一樣),資料有冗餘,在儲存時同時寫入兩塊硬碟,實現了資料備份;
  • 磁碟利用率為50%,即2塊100G的磁碟構成RAID1只能提供100G的可用空間。

    

 RAID-5 (分散式奇偶校驗)

  • 需要三塊或以上硬碟,可以提供熱備盤實現故障的恢復;只損壞一塊,沒有問題。但如果同時損壞兩塊磁碟,則資料將都會損壞。
  • 空間利用率: (n-1)/n   

    

 RAID-6( 雙分散式奇偶校驗磁碟)

  • RAID 6 和 RAID 5 相似但它有兩個分散式奇偶校驗。大多用在大數量的陣列中。我們最少需要4個驅動器,即使有2個驅動器發生故障,我們依然可以更換新的驅動器後重建資料。

    

 RAID-10 (映象+條帶)

  RAID 10是將映象和條帶進行兩級組合的RAID級別,第一級是RAID1映象對,第二級為RAID 0。

    

 幾個方案對比下來, RAID5是最適合的,如下圖

    

第一步 部署環境準備

[root@wencheng ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
 
[root@wencheng ~]# rpm -qa | grep mdadm
mdadm-4.1-6.el7.x86_64

[root@wencheng ~]# ls -l /dev | grep sd
brw-rw----. 1 root disk      8,   0 Apr 15 11:38 sda
brw-rw----. 1 root disk      8,   1 Apr 15 11:38 sda1
brw-rw----. 1 root disk      8,   2 Apr 15 11:38 sda2
brw-rw----. 1 root disk      8,   3 Apr 15 11:38 sda3

VMware Workstation新增硬碟

  • 在"我的計算機"中選擇該主機--右鍵--設定--新增--硬碟--下一步--下一步--下一步--完成 新增硬碟步驟。

  •  命令:echo "- - -" > /sys/class/scsi_host/host0/scan
  •  1.新增添磁碟,還不能直接顯示出來,要想出現要對磁碟進行掃描(實際生產環境中不需要,都是熱插拔技術):
  • 2.假如 fdisk -l 還是未發現新硬碟,則將上面命令中的host0,替換為host1,host2,....看看;
  • 3.我們再檢視系統日誌/var/log/messages,發現對SCSI裝置進行了一次重新掃描,用fdisk -l也看到了新增加的磁碟了。

 第二步 建立RAID分割槽

[root@wencheng ~]# fdisk /dev/sdb     //建立/dev/sdb分割槽
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x50157e3b.

Command (m for help): m
Command action
   a   toggle a bootable flag           //設定可引導標記
   b   edit bsd disklabel             //編輯 bsd 磁碟標籤
   c   toggle the dos compatibility flag    //設定 DOS 作業系統相容標記
   d   delete a partition             //刪除一個分割槽
   g   create a new empty GPT partition table //建立一個新的空GPT分割槽表
   G   create an IRIX (SGI) partition table  //建立一個IRIX (SGI)分割槽表
   l   list known partition types        //顯示已知的檔案系統型別。82 為 Linux swap 分割槽,83 為 Linux 分割槽
   m   print this menu              //顯示幫助選單
   n   add a new partition            //新建分割槽
   o   create a new empty DOS partition table //建立空白 DOS 分割槽表
   p   print the partition table         //顯示分割槽列表
   q   quit without saving changes       //不儲存退出
   s   create a new empty Sun disklabel    //新建空白 SUN 磁碟標籤
   t   change a partition's system id     //改變一個分割槽的系統 ID
   u   change display/entry units       //改變顯示記錄單位
   v   verify the partition table       //驗證分割槽表
   w   write table to disk and exit      //儲存退出
   x   extra functionality (experts only)   //附加功能(僅專家)

Command (m for help): n    //新建分割槽
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p    //這裡選主分割槽
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):     //回車(預設大小)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):   //回車(預設整塊硬碟大小);可指定但小於硬碟容量
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p    //顯示分割槽列表

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x50157e3b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   83  Linux      //分割槽的狀態

Command (m for help): L    //列出所有可用的型別

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix      

Command (m for help): t    //改變一個分割槽的系統 ID
Selected partition 1
Hex code (type L to list all codes): fd  //Linux raid auto  
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p    //顯示分割槽列表

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x50157e3b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect    //分割槽狀態

Command (m for help): w    //儲存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@wencheng ~]#
[root@wencheng ~]# fdisk -l | grep raid
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sdd1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sde1            2048    20971519    10484736   fd  Linux raid autodetect

 : 請使用上述步驟同樣在 sd[c-m] 驅動器上建立分割槽,不再累贅。

  • mdadm命令常見引數解釋:

    

第三步 現在使用以下命令建立 md 裝置(即 /dev/md0),並選擇 RAID級別。

 

RAID-0

  • 1.建立分割槽後,驗證/dev/sd[b-c]這兩個驅動器是否正確定義 RAID,使用下面的命令。
[root@wencheng ~]# mdadm -E /dev/sd[b-c]     //或mdadm --examine /dev/sd[b-c]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)

[root@wencheng ~]# mdadm -E /dev/sd[b-c]1    //mdadm --examine /dev/sd[b-c]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.

  • 2.建立RAID0,與其他RAID級別差非同步驟
[root@wencheng ~]# mdadm -C -v /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1    //這裡是raid0為例
mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@wencheng ~]#
  •  3.檢視 RAID 級別,裝置和陣列的使用狀態。
[root@wencheng ~]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdc1[1] sdb1[0]
      20951040 blocks super 1.2 512k chunks
      
unused devices: <none>
[root@wencheng ~]#
[root@wencheng ~]# mdadm -Ds    //或mdadm --detail /dev/md0 或 mdadm -E /dev/sd[b-c]1
ARRAY /dev/md0 metadata=1.2 name=wencheng:0 UUID=17542cfe:0b0649c8:43eecd07:cc58228b
[root@wencheng ~]# 
[root@wencheng ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Thu Apr 15 14:37:47 2021
        Raid Level : raid0
        Array Size : 20951040 (19.98 GiB 21.45 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Thu Apr 15 14:37:47 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K    //chunk是raid中最小的儲存單位

Consistency Policy : none

              Name : wencheng:0  (local to host wencheng)
              UUID : 17542cfe:0b0649c8:43eecd07:cc58228b
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
  •  4.儲存RAID配置到一個"mdadm"檔案中,以供將來使用。
[root@wencheng ~]# mdadm -E -s -v > /etc/mdadm.conf 
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=2 UUID=17542cfe:0b0649c8:43eecd07:cc58228b name=wencheng:0
   devices=/dev/sdc1,/dev/sdb1
或
[root@wencheng ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=wencheng:0 UUID=17542cfe:0b0649c8:43eecd07:cc58228b
[root@wencheng ~]# 
[root@wencheng ~]# mdadm -Ds > /etc/mdadm.conf
  • 5. 將 RAID 裝置 /dev/md0 建立為 xfs 檔案系統,並掛載到 /mnt/raid0 下。
[root@wencheng ~]# mkfs.xfs /dev/md0 
meta-data=/dev/md0               isize=512    agcount=16, agsize=327296 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5236736, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@wencheng ~]# mkdir /mnt/raid0    //建立掛載點
[root@wencheng ~]# 
[root@wencheng ~]# mount /dev/md0 /mnt/raid0/
[root@wencheng ~]# df -Th /mnt/raid0/
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md0       xfs    20G   33M   20G   1% /mnt/raid0

驗證/mnt/raid0/是否能正常使用
[root@wencheng ~]# ls -l /mnt/raid0/
total 0
[root@wencheng ~]# echo 123 > /mnt/raid0/a
[root@wencheng ~]# echo 456 > /mnt/raid0/b
[root@wencheng ~]# 
[root@wencheng ~]# ls -l /mnt/raid0/
total 8
-rw-r--r--. 1 root root 4 Apr 15 15:39 a
-rw-r--r--. 1 root root 4 Apr 15 15:40 b
[root@wencheng ~]# 
[root@wencheng ~]# rm /mnt/raid0/b -f
[root@wencheng ~]# 
[root@wencheng ~]# ls -l /mnt/raid0/
total 4
-rw-r--r--. 1 root root 4 Apr 15 15:39 a

新增開機自動掛載 [root@wencheng ~]# blkid /dev/md0 /dev/md0: UUID="2d2c0f39-3605-4634-bfb1-c8b151936057" TYPE="xfs"
[root@wencheng ~]# echo "UUID=2d2c0f39-3605-4634-bfb1-c8b151936057 /mnt/raid0 xfs defaults 0 0" >> /etc/fstab
[root@wencheng ~]# cat /etc/fstab | grep /mnt/raid0 UUID=2d2c0f39-3605-4634-bfb1-c8b151936057 /mnt/raid0 xfs defaults 0 0 [root@wencheng ~]# mount -av    //檢查 fstab 的條目是否有誤 / : ignored /boot : already mounted swap : ignored /mnt/raid0 : already mounted

  :以上步驟建立各RAID級別類似,不再贅述。

RAID1

  •  1.建立RAID1
[root@wencheng ~]# mdadm -C -v /dev/md1 -l raid1 -n 2 -x 1 /dev/sd[d-f]1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? (y/n) y
mdadm: Fail to create md1 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
  • 2.檢視 RAID 級別,裝置和陣列的使用狀態。
[root@wencheng ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Apr 16 17:33:12 2021
        Raid Level : raid1
        Array Size : 10475520 (9.99 GiB 10.73 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Apr 16 17:34:04 2021
             State : clean
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : wencheng:1  (local to host wencheng)
              UUID : a88125e0:2c4b9029:cfaa3acf:67941e04
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       65        1      active sync   /dev/sde1

       2       8       81        -      spare   /dev/sdf1
  •  3.儲存 RAID1 的配置到檔案“mdadm.conf”中。
[root@wencheng ~]# mdadm -Dsv /dev/md1 > /etc/mdadm.conf
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=1.2 spares=1 name=wencheng:1 UUID=a88125e0:2c4b9029:cfaa3acf:67941e04
   devices=/dev/sdd1,/dev/sde1,/dev/sdf1
  •  4.在RAID1裝置上建立檔案系統,並掛載到 /mnt/raid1 下。
[root@wencheng ~]# mkfs.xfs /dev/md1
meta-data=/dev/md1               isize=512    agcount=4, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2618880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@wencheng ~]#
[root@wencheng ~]# mkdir /mnt/raid1
[root@wencheng ~]# mount /dev/md1 /mnt/raid1  
[root@wencheng ~]# df -Th /mnt/raid1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md1       xfs    10G   33M   10G   1% /mnt/raid1
  •  5.模擬RAID1中資料盤/dev/sde出現故障,觀察/dev/sdf備用盤能否自動頂替故障盤。
[root@wencheng ~]# mdadm /dev/md1 -f /dev/sde1    //模擬測試檔案損壞
mdadm: set /dev/sde1 faulty in /dev/md1
[root@wencheng ~]#
[root@wencheng ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Apr 16 17:33:12 2021
        Raid Level : raid1
        Array Size : 10475520 (9.99 GiB 10.73 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 09:26:02 2021
             State : clean, degraded, recovering
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 7% complete

              Name : wencheng:1  (local to host wencheng)
              UUID : a88125e0:2c4b9029:cfaa3acf:67941e04
            Events : 23

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       2       8       81        1      spare rebuilding   /dev/sdf1    //熱備盤已經在同步資料

       1       8       65        -      faulty   /dev/sde1
------------------------------------------------------------------------
    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       2       8       81        1      active sync   /dev/sdf1    //資料同步完成

       1       8       65        -      faulty   /dev/sde1
  • 6.更新配置檔案。
[root@wencheng ~]# mdadm -Dsv > /etc/mdadm.conf
[root@wencheng ~]#
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=1.2 name=wencheng:1 UUID=a88125e0:2c4b9029:cfaa3acf:67941e04
   devices=/dev/sdd1,/dev/sde1,/dev/sdf1
  •  7.檢視資料是否丟失。
[root@wencheng ~]# ls -l /mnt/raid1/
total 4
-rw-r--r--. 1 root root 846 Apr 19 09:24 passwd
  •  8.移除損壞的裝置。
[root@wencheng ~]# mdadm -r /dev/md1 /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md1
[root@wencheng ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Apr 16 17:33:12 2021
        Raid Level : raid1
        Array Size : 10475520 (9.99 GiB 10.73 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 09:34:50 2021
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : wencheng:1  (local to host wencheng)
              UUID : a88125e0:2c4b9029:cfaa3acf:67941e04
            Events : 44

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       2       8       81        1      active sync   /dev/sdf1
  •  9.更換一塊新硬碟。
[root@wencheng ~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde
[root@wencheng ~]#
[root@wencheng ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Apr 16 17:33:12 2021
        Raid Level : raid1
        Array Size : 10475520 (9.99 GiB 10.73 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 09:37:30 2021
             State : clean
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : wencheng:1  (local to host wencheng)
              UUID : a88125e0:2c4b9029:cfaa3acf:67941e04
            Events : 45

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       2       8       81        1      active sync   /dev/sdf1

       3       8       64        -      spare   /dev/sde

RAID5

(1)建立RAID5, 新增1個熱備盤,指定chunk大小為32K(預設512K)
  -x或--spare-devicds=    指定陣列中備用盤的數量
  -c或--chunk=    設定陣列的塊chunk塊大小 ,單位為KB
(2)停止陣列,重新啟用陣列
(3)使用熱備盤,擴充套件陣列容量,從3個磁碟擴充套件到4個

  • 1.建立RAID5
[root@wencheng ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd{g,h,i,j}1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10475520K
mdadm: Fail to create md5 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
  •  2.檢視 RAID 級別,裝置和陣列的使用狀態。
[root@wencheng ~]# mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Mon Apr 19 10:03:42 2021
        Raid Level : raid5
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 10:04:34 2021
             State : clean
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
 Chunk Size : 512K

Consistency Policy : resync    //資料同步完成

              Name : wencheng:5  (local to host wencheng)
              UUID : 816190d1:6b78e305:49220ba0:6178499b
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       97        0      active sync   /dev/sdg1
       1       8      113        1      active sync   /dev/sdh1
       4       8      129        2      active sync   /dev/sdi1

       3       8      145        -      spare   /dev/sdj1    //熱備盤
  •   3.儲存 RAID5 的配置到檔案“mdadm.conf”中。
[root@wencheng ~]# mdadm -Dsv > /etc/mdadm.conf
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md5 level=raid5 num-devices=3 metadata=1.2 spares=1 name=wencheng:5 UUID=816190d1:6b78e305:49220ba0:6178499b
   devices=/dev/sdg1,/dev/sdh1,/dev/sdi1,/dev/sdj1
  •  4.停止/啟用md5陣列。
[root@wencheng ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md

[root@wencheng ~]# mdadm -AS /dev/md5
mdadm: Fail to create md5 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
  •  5.擴充套件md5陣列,將熱備盤增加到md5中,使用md5中可以使用的磁碟數量為4塊,並驗證。
[root@wencheng ~]# mdadm -G /dev/md5 -n 4    //-G或--grow	改變陣列大小或形態
[root@wencheng ~]#
[root@wencheng ~]# mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Mon Apr 19 10:03:42 2021
        Raid Level : raid5
        Array Size : 31426560 (29.97 GiB 32.18 GB)    //對比初始空間已增大
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 10:27:43 2021
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : wencheng:5  (local to host wencheng)
              UUID : 816190d1:6b78e305:49220ba0:6178499b
            Events : 47

    Number   Major   Minor   RaidDevice State
       0       8       97        0      active sync   /dev/sdg1
       1       8      113        1      active sync   /dev/sdh1
       4       8      129        2      active sync   /dev/sdi1
       3       8      145        3      active sync   /dev/sdj1
[root@wencheng ~]#
[root@wencheng ~]# mdadm -Dsv > /etc/mdadm.conf
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md5 level=raid5 num-devices=4 metadata=1.2 name=wencheng:5 UUID=816190d1:6b78e305:49220ba0:6178499b
   devices=/dev/sdg1,/dev/sdh1,/dev/sdi1,/dev/sdj1

 RAID10

  • 1.建立RAID10
[root@wencheng ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sd[k,l,n,m]1
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10475520K
mdadm: Fail to create md10 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
  •   2.檢視 RAID 級別,裝置和陣列的使用狀態。
[root@wencheng ~]# mdadm -D /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Mon Apr 19 10:54:33 2021
        Raid Level : raid10
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 10:56:18 2021
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : wencheng:10  (local to host wencheng)
              UUID : 98ee3164:bc417c61:3e8b29d6:24470192
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8      161        0      active sync set-A   /dev/sdk1
       1       8      177        1      active sync set-B   /dev/sdl1
       2       8      193        2      active sync set-A   /dev/sdm1
       3       8      209        3      active sync set-B   /dev/sdn1
  •    3.儲存 RAID10 的配置到檔案“mdadm.conf”中。
[root@wencheng ~]# mdadm -Dsv /dev/md10 > /etc/mdadm.conf
[root@wencheng ~]#
[root@wencheng ~]# cat /etc/mdadm.conf
ARRAY /dev/md10 level=raid10 num-devices=4 metadata=1.2 name=wencheng:10 UUID=98ee3164:bc417c61:3e8b29d6:24470192
   devices=/dev/sdk1,/dev/sdl1,/dev/sdm1,/dev/sdn1

刪除RAID所有資訊及注意事項

  • 1.如果你已經掛載raid,就先解除安裝。
[root@wencheng ~]# df -Th | grep raid1
/dev/md1       xfs        10G   33M   10G   1% /mnt/raid1
[root@wencheng ~]#
[root@wencheng ~]# umount /dev/md1 /mnt/raid1
umount: /mnt/raid1: not mounted
[root@wencheng ~]#
[root@wencheng ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        30G  1.3G   29G   5% /
devtmpfs       devtmpfs  981M     0  981M   0% /dev
tmpfs          tmpfs     992M     0  992M   0% /dev/shm
tmpfs          tmpfs     992M  9.6M  982M   1% /run
tmpfs          tmpfs     992M     0  992M   0% /sys/fs/cgroup
/dev/sda1      xfs       297M  107M  191M  36% /boot
tmpfs          tmpfs     199M     0  199M   0% /run/user/0
  •  2.停止RAID裝置,並刪除配置檔案。
[root@wencheng ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Apr 16 17:33:12 2021
        Raid Level : raid1
        Array Size : 10475520 (9.99 GiB 10.73 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Mon Apr 19 11:03:51 2021
             State : clean
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : wencheng:1  (local to host wencheng)
              UUID : a88125e0:2c4b9029:cfaa3acf:67941e04
            Events : 45

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       2       8       81        1      active sync   /dev/sdf1

       3       8       64        -      spare   /dev/sde
[root@wencheng ~]#
[root@wencheng ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@wencheng ~]#
[root@wencheng ~]# mdadm -D /dev/md1
mdadm: cannot open /dev/md1: No such file or directory
[root@wencheng ~]#
[root@wencheng ~]# rm  /etc/mdadm.conf -f
  •  3.清除物理磁碟中的raid標識。
[root@wencheng ~]# mdadm --zero-superblock /dev/sdd1
[root@wencheng ~]# mdadm --zero-superblock /dev/sdf1
引數:--zero-superblock :  erase the MD superblock from a device.   #擦除裝置中的MD超級塊

 

相關文章