RAID 5 以「單盤容錯、空間利用率 (N-1)/N、讀性能優異」成為中小型存儲首選。本文基于 mdadm 在 Linux 下實現軟 RAID 5,涵蓋磁盤分區、陣列創建、文件系統格式化、持久化掛載與故障模擬恢復的完整閉環操作。
| 級別 | 最少盤數 | 容錯 | 空間利用率 | 讀性能 | 寫性能 | 典型場景 |
|---|---|---|---|---|---|---|
| RAID 0 | 2 | 無 | 100% | 最佳 | 最佳 | 臨時緩存、非關鍵數據 |
| RAID 1 | 2 | N-1 塊盤 | 50% | 好 | 一般 | 系統盤、關鍵小數據 |
| RAID 5 | 3 | 1 塊盤 | (N-1)/N | 優 | 中 (校驗開銷) | 數據庫、文件服務器、虛擬化存儲 |
| RAID 6 | 4 | 2 塊盤 | (N-2)/N | 優 | 中低 | 高可靠歸檔、大容量陣列 |
| RAID 10 | 4 | 最多 N/2 | 50% | 最佳 | 優 | 高性能關鍵業務 (OLTP) |
mdadm (軟 RAID 管理)、fdisk/parted (分區)/dev/sdb (20GB) 劃分 5 個主分區模擬 5 塊盤,**生產環境必須使用物理獨立磁盤**。fdisk /dev/sdb
# 依次創建 5 個主分區 (或擴展分區下邏輯分區),類型設置為 Linux RAID (fd)
# n -> p -> 1 -> Enter -> +4G (分區 1)
# n -> p -> 2 -> Enter -> +4G (分區 2)
# n -> p -> 3 -> Enter -> +4G (分區 3)
# n -> p -> 4 -> Enter -> +4G (分區 4)
# n -> p -> 5 -> Enter -> Enter (分區 5,剩餘空間)
# t -> 1 -> fd (修改類型為 Linux RAID)
# ... 重複對所有分區設置類型 fd
# w 寫入分區表
partprobe /dev/sdb
# 或
partx -a /dev/sdb
lsblk /dev/sdb
# 確認 sdb1-sdb5 均顯示類型 "linux_raid_member" (尚未創建陣列前為 "linux")
# RHEL/CentOS
yum install mdadm
# Debian/Ubuntu
apt-get install mdadm
# 驗證
mdadm --version
mdadm --create /dev/md0 \
--level=5 \
--raid-devices=5 \
/dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5 \
--metadata=1.2 \
--chunk=512 \
--name=raid5_data
# 參數解析:
# --level=5 RAID 5
# --raid-devices=5 成員盤數
# --metadata=1.2 超級塊版本 1.2 (支援 >2TB、啟動器友好)
# --chunk=512 塊大小 512KB (大文件順序讀寫優化,小文件可用 64K/128K)
# --name=raid5_data 陣列名稱 (顯示在 /dev/md/raid5_data)
watch -n 1 cat /proc/mdstat
# 輸出示例:
# Personalities : [raid6] [raid5] [raid4]
# md0 : active raid5 sdb5[4] sdb4[3] sdb3[2] sdb2[1] sdb1[0]
# 15624192 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
# [====>................] resync = 23.4% (732160/3124832) finish=1.2min speed=32100K/sec
# 等待 resync 完成顯示 [UUUUU] 且無 resync 行
mkfs.ext4 -L RAID5_DATA /dev/md0
# 或 xfs
mkfs.xfs -L RAID5_DATA /dev/md0
blkid /dev/md0
# /dev/md0: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" LABEL="RAID5_DATA"
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data/raid5 ext4 defaults,noatime,nodiratime,_netdev 0 2
# _netdev: 標記為網絡設備,延遲掛載至網絡就緒 (systemd 會自動排序)
# noatime/nodiratime: 禁用訪問時間更新,減少寫入放大
mkdir -p /data/raid5
mount -a
df -h /data/raid5
mdadm --detail --scan >> /etc/mdadm.conf
# 或 Ubuntu/Debian
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# 內容示例:
# ARRAY /dev/md/raid5_data metadata=1.2 name=host:raid5_data UUID=uuid...
# RHEL/CentOS
dracut -f
# Debian/Ubuntu
update-initramfs -u
# /etc/mdadm.conf 添加
MAILADDR root@localhost
PROGRAM /usr/sbin/mdadm-monitor
# systemctl enable --now mdmonitor
# 1. 標記故障
mdadm --manage /dev/md0 --fail /dev/sdb3
# 2. 移除故障盤
mdadm --manage /dev/md0 --remove /dev/sdb3
# 3. 查看狀態 (應顯示 degraded [UU_U])
cat /proc/mdstat
# 4. 物理更換磁盤後,假設新盤為 /dev/sdc1 (已分區類型 fd)
mdadm --manage /dev/md0 --add /dev/sdc1
# 5. 觀察重建進度
watch cat /proc/mdstat
# 重建完成後恢復 [UUUUU]
| 優化點 | 建議值/操作 | 效果 |
|---|---|---|
| Chunk Size | 512K (大順序 IO) / 64K (小隨機 IO) | 匹配應用 IO 模式 |
| Read Ahead | blockdev --setra 65536 /dev/md0 (64MB) | 順序讀預取優化 |
| Stripe Cache | echo 8192 > /sys/block/md0/md/stripe_cache_size | 寫入性能提升 2-3 倍 (消耗內存) |
| Bitmap | mdadm --grow /dev/md0 --bitmap=internal | 斷電後快速重建,僅同步脏條帶 |
| 文件系統 | XFS (大文件/高併發) / ext4 (通用) | 元數據性能差異 |

fd (Linux RAID)。mdadm --create --level=5 --raid-devices=N 創建陣列,等待 resync 完成。/etc/fstab 持久化掛載。mdadm --detail --scan >> /etc/mdadm.conf + dracut/update-initramfs 保證開機自動組裝。cat /proc/mdstat 巡檢,掌握 --fail/--remove/--add 故障替換流程。標準化部署與演練,讓軟 RAID 5 成為您存儲架構中可靠、可觀測、可運維的基石。