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

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超級塊