在 Ubuntu Server 中,RAID 主要用來提升「資料安全性」與「I/O 效能」。 本篇會用實務角度帶你理解 mdadm 軟體 RAID 的建置方式、RAID 1 / RAID 10 差異, 以及 MySQL 與 Docker 為什麼會被磁碟 I/O 影響。 Docker 在現代雲端與容器化架構中扮演重要角色,如果你還不熟悉基本概念, 可以先參考 Docker 是什麼?新手完整入門教學。 同時也會補充硬體 RAID 卡差異與故障後的完整恢復流程。
RAID 基本觀念(RAID 1 vs RAID 10)
RAID 1 是「鏡像」,資料會同時寫入兩顆硬碟,優點是資料安全性高,但寫入效能不會明顯提升。 RAID 10 則是「鏡像 + 條帶化」,能同時分散 I/O 負載,因此在資料庫與容器化環境中,通常能提供更好的整體效能與延遲表現。 在理解不同系統架構(例如虛擬化與容器化)的差異時,也可以進一步延伸參考 Docker vs VM vs Kubernetes 差異比較, 幫助你更完整理解不同運行環境對效能與資源分配的影響。
| 項目 | RAID 1 | RAID 10 |
|---|---|---|
| 結構 | Mirror | Mirror + Stripe |
| 效能 | 一般 | 高(可擴展 IOPS) |
| 適合 | 網站 / 檔案 | MySQL / Docker / 高流量 |
| 容錯 | 1 顆 | 多組 mirror 容錯 |
IOPS 與 MySQL / Docker 效能影響
IOPS(每秒磁碟 I/O 次數)是影響網站速度的關鍵。 MySQL 在處理查詢、交易時會大量讀寫磁碟, Docker 則會產生 log、layer 寫入與 container filesystem I/O。
當 IOPS 不足時,你會看到: – 網站變慢 – MySQL query latency 上升 – Docker container 卡頓
RAID 10 可以透過多顆磁碟「同時處理 I/O」,因此比 RAID 1 更適合高負載環境。
mdadm 建置 RAID 實務(完整流程)
Step 1:確認磁碟
lsblk
# 查看目前系統磁碟,確認 /dev/sdb /dev/sdc 是否存在
Step 2:安裝 mdadm
sudo apt update
sudo apt install mdadm -y
# 安裝 Linux 軟體 RAID 管理工具
Step 3:建立 RAID 1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# RAID 1:兩顆硬碟鏡像
Step 4:建立 RAID 10
sudo mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# RAID 10:至少 4 顆硬碟(mirror + stripe)
Step 5:檢查 RAID 狀態
cat /proc/mdstat
# 查看同步 / degraded 狀態
Step 6:格式化與掛載
mkfs.ext4 /dev/md0
mkdir -p /data
mount /dev/md0 /data
# 格式化並掛載使用
Ubuntu Server、Docker 與 MySQL 效能完整比較
在實務上,Ubuntu Server 本身不會產生大量 I/O, 真正影響效能的是「跑在上面的服務」,例如 Docker 與 MySQL。 因此 RAID 的設計必須以服務特性來決定,而不是只看系統層。
| 項目 | Ubuntu Server(系統層) | Docker Container | MySQL 資料庫 |
|---|---|---|---|
| IO 類型 | 中低(log / system) | 中高(layer / log / file write) | 極高(random read/write) |
| IO 模式 | 偏 sequential | 混合型 IO | 大量 random IO |
| RAID 1 表現 | 穩定但延遲一般 | 可能出現 IO bottleneck | TPS 容易受限 |
| RAID 10 表現 | 更穩定、延遲下降 | 明顯改善寫入與 log 延遲 | TPS 明顯提升、延遲降低 |
| 效能瓶頸 | 較少 | container density 高時 IO 卡住 | 最容易受磁碟影響 |
結論很簡單:
- 只有 Ubuntu Server → RAID 1 通常夠用
- 有 Docker → 建議 RAID 10
- 有 MySQL → 幾乎一定 RAID 10
原因是 MySQL 與 Docker 都屬於「高 random I/O workload」,磁碟 IOPS 才是真正瓶頸,而不是 CPU。
mdadm vs 硬體 RAID 卡
mdadm 是軟體 RAID,由 Linux + CPU 處理。 硬體 RAID 則由 RAID 卡控制器處理,不占 CPU,但成本高。
| 比較項目 | mdadm | 硬體 RAID |
|---|---|---|
| 成本 | 低 | 高 |
| 效能 | 依 CPU(現代足夠) | 穩定高效 |
| 可移植性 | 高(Linux 可直接讀) | 低(依賴卡) |
| 維護 | 指令操作 | BIOS / 工具 |
RAID 故障診斷與完整重建流程
當 RAID 壞掉時的標準流程:
1️⃣ 先確認 RAID 是否降級
cat /proc/mdstat
# 如果看到 [U_] 或 [_U] 代表 degraded
2️⃣ 查看詳細狀態
mdadm --detail /dev/md0
# 確認哪一顆 disk 掛掉
3️⃣ 移除故障碟(如果系統仍識別)
mdadm --remove /dev/md0 /dev/sdb
# 移除壞掉硬碟
4️⃣ 更換新硬碟後加入 RAID
mdadm --add /dev/md0 /dev/sdb
# 將新硬碟加入 RAID
5️⃣ 觀察重建進度
watch cat /proc/mdstat
# 即時觀看 rebuild 進度
重點: RAID 不會自動修好,一定要「加入新硬碟 → rebuild」
延伸閱讀
FAQ
RAID 1 和 RAID 10 差在哪?
RAID 1 是鏡像,RAID 10 是鏡像+條帶化,因此 RAID 10 IOPS 更高。
mdadm 是什麼?
Linux 軟體 RAID 工具,用 CPU 管理磁碟陣列。
RAID 壞掉資料會消失嗎?
不會立即消失,但如果沒有 rebuild,第二顆也壞就會遺失。
MySQL 為什麼受 RAID 影響?
因為 MySQL 高度依賴 random I/O,磁碟效能直接影響 query latency。
