Linux:RAID(磁盤冗余陣列)配置
一、RAID 核心概念
RAID(Redundant Array of Independent Disks,磁盤冗余陣列)通過將多個物理磁盤組合為一個邏輯存儲設備,實現提升讀寫性能、增強數據安全性或平衡兩者的目的。不同RAID級別采用不同的技術實現,適用于不同場景。
二、常見RAID級別及特性
RAID級別 | 最少磁盤數 | 核心原理 | 性能 | 安全性 |
---|---|---|---|---|
RAID 0 | 2塊 | 數據分割為N份,并行寫入各磁盤(無冗余) | 讀寫速度大幅提升 | 無冗余,單盤故障數據全丟 |
RAID 1 | 2塊 | 數據完全鏡像,每塊磁盤存儲相同內容 | 讀速提升,寫速略降 | 單盤故障不丟數據 |
RAID 5 | 3塊 | 數據分割存儲+分布式校驗(每塊盤均含校驗信息) | 讀寫性能較好 | 允許單盤故障(可重建) |
RAID 10 | 4塊(2的倍數) | 先做RAID 1鏡像,再將鏡像組組成RAID 0(1+0) | 讀寫性能優異 | 允許每組鏡像中一塊盤故障 |
RAID 50 | 6塊(3的倍數) | 先做多個RAID 5,再將這些RAID 5組成RAID 0(5+0) | 讀寫性能優異 | 每個RAID 5允許單盤故障 |
三、RAID 實現方式
- 硬件RAID:通過獨立RAID控制器實現,性能好、穩定性高,支持熱插拔,適合企業級場景。
- 軟件RAID:通過操作系統工具(如Linux的
mdadm
)實現,無需額外硬件,成本低,適合個人或小型場景。本文重點介紹mdadm
工具配置。
四、軟件RAID 配置實戰(基于mdadm
)
- 在實際環境中,若物理磁盤數量有限,可通過磁盤分區模擬獨立硬盤來配置 RAID。以下以 RAID 0 和 RAID 5 為例,詳細演示基于分區的配置步驟。
1. 安裝mdadm
工具
yum -y install mdadm # CentOS/RHEL系統
2.新增物理磁盤
? 添加 1 塊足夠大的物理磁盤(如/dev/sdb
,容量≥50GB),用于創建多個分區模擬獨立硬盤。
3. 創建RAID 0(追求性能)
(1)創建分區(模擬獨立硬盤)
? 創建/dev/sdb1 /de/sdb2 分區 大小設置為1G
[root@zhangyiwei ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
錯誤: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel
新的磁盤標簽類型? gpt
(parted) unit
Unit? [compact]? Mib
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 30720MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name 標志(parted) quit
信息: You may need to update /etc/fstab.[root@zhangyiwei ~]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。命令(輸入 m 獲取幫助):n
分區號 (1-128,默認 1):
第一個扇區 (34-41943006,默認 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006,默認 41943006):+1G
已創建分區 1命令(輸入 m 獲取幫助):N
分區號 (2-128,默認 2):
第一個扇區 (34-41943006,默認 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-41943006,默認 41943006):+1G
已創建分區 2命令(輸入 m 獲取幫助):W
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 50G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
使用2個分區(/dev/sdb1
、/dev/sdb2
)組成RAID 0:
[root@zhangyiwei ~]# mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.-Cv # 創建并命名-/dev/md0# 作為設備必須在/dev目錄下-l 0 # RAID級別(0)-n 2 # 成員磁盤數量(2塊)/dev/sdb1 /dev/sdb1 # 參與的磁盤或分區
- 輸出提示array /dev/“md0 started.已創建”即成功。
(2)查看RAID信息
mdadm -Ds # 顯示所有RAID設備詳細信息
mdadm -D /dev/md0 # 查看指定RAID(md0)的狀態
lsblk # 列出系統中所有塊設備
- 關鍵信息:
RAID Level: raid0
、Active Devices: 2
(激活的設備數)。
(3)格式化并掛載
# 格式化為xfs文件系統(也可使用ext4)
[root@zhangyiwei ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=8, agsize=65408 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=523264, 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@zhangyiwei ~]# mkdir /md0
[root@zhangyiwei ~]# mount /dev/md0 /md0 #臨時掛載# 獲取RAID設備的UUID
[root@zhangyiwei ~]# blkid /dev/md0
/dev/md0: UUID="8759b45d-89ed-458e-b860-efb267ddd110" TYPE="xfs" # 寫入fstab
[root@zhangyiwei ~]# vim /etc/fstab #永久掛載UUID=8759b45d-89ed-458e-b860-efb267ddd110 /md0 xfs defaults 0 0
(5)刪除RAID 0(清理環境)
# 卸載掛載點
umount /md0# 停止RAID設備
mdadm -S /dev/md0# 清除磁盤上的RAID信息(避免下次誤識別)
mdadm --zero-superblock /dev/sdb
mdadm --zero-superblock /dev/sdc# 刪除掛載點和fstab配置
rm -rf /raid0
sed -i '/\/raid0/d' /etc/fstab # 刪除fstab中對應行
. 創建RAID 1(追求安全)
(1)創建RAID 1設備(/dev/md1
)
新建sdb3、sdb4分區
[root@zhangyiwei ~]# fdisk /dev/sdb**********
[root@zhangyiwei ~]# partprobe /dev/sdb
使用2個分區(/dev/sdb3
、/dev/sdb4
、)組成RAID 1
[root@zhangyiwei ~]# mdadm -Cv /dev/md1 -l 1 -n 2 /dev/sdb3 /dev/sdb4 # 設置RAID級別為1
mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90
mdadm: size set to 1046528K
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
************
├─sdb3 8:19 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1
└─sdb4 8:20 0 1G 0 part └─md1 9:1 0 1022M 0 raid1
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
#掛載同RAID 0步驟
4. 創建RAID 5(平衡性能與安全)
(1)創建RAID 5設備(/dev/md5
)
創建分區:
[root@zhangyiwei ~]# fdisk /dev/sdb****************************
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb5 8:21 0 1G 0 part
├─sdb6 8:22 0 1G 0 part
├─sdb7 8:23 0 1G 0 part
└─sdb8 8:24 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
使用3個分區(/dev/sdb5
、/dev/sdb6
、/dev/sdb7
)組成RAID 5,額外1塊/dev/sdeb8
作為熱備盤(自動替換故障盤):
[root@zhangyiwei ~]# mdadm -Cv /dev/md5 -l 5 -n 3 /dev/sdb5 /dev/sdb6 /dev/sdb7 --spare-devices=1 /dev/sdb8
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 1046528K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.-l 5 \ # RAID級別(5)-n 3 \ # 成員磁盤數量(3塊)/dev/sdb /dev/sdc /dev/sdd \--spare-devices=1 /dev/sde # 熱備盤數量及設備
(2)查看RAID 5狀態
[root@zhangyiwei ~]# mdadm -D /dev/md5
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT***********************
├─sdb5 8:21 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
├─sdb6 8:22 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
├─sdb7 8:23 0 1G 0 part
│ └─md5 9:5 0 2G 0 raid5
└─sdb8 8:24 0 1G 0 part └─md5 9:5 0 2G 0 raid5
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
- 關鍵信息:
RAID Level: raid5
、Active Devices: 3
、Spare Devices: 1
(熱備盤就緒)。
(3)模擬磁盤故障與重建
-
標記磁盤為故障:
[root@zhangyiwei ~]# mdadm -f /dev/md5 /dev/sdb5 # 將/dev/sdb5標記為故障盤 mdadm: set /dev/sdb5 faulty in /dev/md5
-
查看自動重建過程:
[root@zhangyiwei ~]# mdadm -D /dev/md5*******************Number Major Minor RaidDevice State3 8 24 0 spare rebuilding /dev/sdb81 8 22 1 active sync /dev/sdb64 8 23 2 active sync /dev/sdb70 8 21 - faulty /dev/sdb5
- 此時
/dev/sde
(熱備盤)會自動替換/dev/sdb
,并顯示“Rebuild Status: xx%
”(重建進度)。
- 此時
-
移除故障盤或分區:
# 從RAID中移除故障盤 [root@zhangyiwei ~]# mdadm -r /dev/md5 /dev/sdb5 mdadm: hot removed /dev/sdb5 from /dev/md5
4.添加硬盤或分區
-
sdb5可作為md5的熱備盤加入:
[root@zhangyiwei ~]# mdadm /dev/md5 --add /dev/sdb5
-
執行后
sdb5
狀態會變為spare
,當md5
中任一盤故障時自動替換。
#掛載同RAID 0步驟
二、創建 RAID 10(1+0)
1. 核心原理
RAID 10 = RAID 1(鏡像)+ RAID 0(條帶化),先將磁盤兩兩鏡像(RAID 1),再將鏡像組條帶化(RAID 0),兼顧安全性和性能。
2. 分步配置
創建分區:
[root@zhangyiwei ~]# fdisk /dev/sdb****************************
[root@zhangyiwei ~]# partprobe /dev/sdb
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb9 8:25 0 1G 0 part
├─sdb10 8:26 0 1G 0 part
├─sdb11 8:27 0 1G 0 part
└─sdb12 8:28 0 1G 0 part
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
(1)創建 2 組 RAID 1
-
第一組(/dev/md101):使用sdb9和sdb10
[root@zhangyiwei ~]# mdadm -Cv /dev/md101 -l 1 -n 2 /dev/sdb9 /dev/sdb10 mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md101 started.
-
第二組(/dev/md102):使用sdb11和sd12
[root@zhangyiwei ~]# mdadm -Cv /dev/md102 -l 1 -n 2 /dev/sdb11 /dev/sdb12 mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md2 started.
(2)將兩組 RAID 1 組成 RAID 0(即 RAID 10)
[root@zhangyiwei ~]# mdadm -Cv /dev/md10 -l 0 -n 2 /dev/md101 /dev/md102
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT********************
├─sdb9 8:25 0 1G 0 part
│ └─md101 9:101 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
├─sdb10 8:26 0 1G 0 part
│ └─md101 9:101 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
├─sdb11 8:27 0 1G 0 part
│ └─md102 9:2 0 1022M 0 raid1
│ └─md10 9:10 0 2G 0 raid0
└─sdb12 8:28 0 1G 0 part └─md102 9:2 0 1022M 0 raid1 └─md10 9:10 0 2G 0 raid0
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
3. 驗證 RAID 10
mdadm -D /dev/md10
- 關鍵信息:
RAID Level: raid0
,成員為/dev/md101
和/dev/md102
(兩組 RAID 1)。
#格式化與掛載同RAID 0步驟
三、創建 RAID 50(5+0)
1. 核心原理
RAID 50 = RAID 5(分布式校驗)+ RAID 0(條帶化),先將磁盤分成多組 RAID 5(每組至少 3 個磁盤),再將各組條帶化,兼顧大容量、安全性和性能。
2. 分步配置
(1)創建 2 組 RAID 5
? #需要重新使用被分配的硬盤或分區可以停止他們的頂層陣列(如 md0、md1 等,根據實際情況替換)
[root@zhangyiwei ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
[root@zhangyiwei ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
[root@zhangyiwei ~]# mdadm --stop /dev/md10
mdadm: stopped /dev/md10
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT****************
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
├─sdb4 8:20 0 1G 0 part
├─sdb5 8:21 0 1G 0 part
├─sdb6 8:22 0 1G 0 part
-
第一組(/dev/md501):使用sdb1、sdb2、sdb3(無熱備盤)
[root@zhangyiwei ~]# mdadm -Cv /dev/md501 -l 5 -n 3 /dev/sdb1 /dev/sdb2 /dev/sdb3 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdb1 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 20:33:14 2025 mdadm: /dev/sdb2 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 20:33:14 2025 mdadm: /dev/sdb3 appears to be part of a raid array:level=raid1 devices=2 ctime=Mon Aug 18 20:43:16 2025 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md501 started.
-
第二組(/dev/md502):使用sdb4、sdb5、sdb6(無熱備盤)
[root@zhangyiwei ~]# mdadm -Cv /dev/md502 -l 5 -n 3 /dev/sdb4 /dev/sdb5 /dev/sdb6 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdb4 appears to be part of a raid array: level=raid1 devices=2 ctime=Mon Aug 18 20:43:16 2025 mdadm: /dev/sdb5 appears to be part of a raid array:level=raid5 devices=3 ctime=Mon Aug 18 20:49:51 2025 mdadm: /dev/sdb6 appears to be part of a raid array:level=raid5 devices=3 ctime=Mon Aug 18 20:49:51 2025 mdadm: size set to 1046528K Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md502 started.
(2)將兩組 RAID 5 組成 RAID 0(即 RAID 50)
[root@zhangyiwei ~]# mdadm --assemble /dev/md502 /dev/sdb4 /dev/sdb5 /dev/sdb6
mdadm: /dev/sdb4 is busy - skipping
mdadm: /dev/sdb5 is busy - skipping
mdadm: /dev/sdb6 is busy - skipping
[root@zhangyiwei ~]# mdadm -Cv /dev/md50 -l 0 -n 2 /dev/md501 /dev/md502
mdadm: chunk size defaults to 512K
mdadm: /dev/md502 appears to be part of a raid array:level=raid0 devices=2 ctime=Mon Aug 18 21:02:02 2025
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md50 started.
[root@zhangyiwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT******************
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb2 8:18 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb3 8:19 0 1G 0 part
│ └─md501 9:501 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb4 8:20 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb5 8:21 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
├─sdb6 8:22 0 1G 0 part
│ └─md502 9:502 0 2G 0 raid5
│ └─md50 9:50 0 4G 0 raid0
3. 驗證 RAID 50
[root@zhangyiwei ~]# mdadm -D /dev/md50
- 關鍵信息:
RAID Level: raid0
,成員為/dev/md5
和/dev/md6
(兩組 RAID 5)。
4. 格式化與掛載
mkfs.xfs /dev/md50
mkdir /raid50
mount /dev/md50 /raid50
df -Th /raid50
五、RAID 運維常用命令
命令用途 | 命令示例 |
---|---|
創建RAID | mdadm -Cv /dev/mdX -l 級別 -n 數量 磁盤列表 |
查看RAID詳情 | mdadm -D /dev/mdX |
停止RAID | mdadm -S /dev/mdX |
標記故障盤 | mdadm -f /dev/mdX 故障磁盤 |
移除故障盤 | mdadm -r /dev/mdX 故障磁盤 |
添加新盤(替換故障盤) | mdadm -a /dev/mdX 新磁盤 |
清除磁盤RAID信息 | mdadm --zero-superblock 磁盤 |