網站伺服器 RAID 1 vs RAID 10 怎麼選?Ubuntu Server、Docker 與 MySQL 資料庫效能完整比較

Ubuntu Server mdadm RAID完整教學:RAID 1/10建置、MySQL/Docker效能與故障重建(2026)

在 Ubuntu Server 中,RAID 主要用來提升「資料安全性」與「I/O 效能」。本篇會用實務角度帶你理解 mdadm 軟體 RAID 的建置方式、RAID 1 / RAID 10 差異,以及 MySQL 與 Docker 為什麼會被磁碟 I/O 影響,同時補充硬體 RAID 卡差異、開機持久化設定與故障後的完整恢復流程。

Docker 在現代雲端與容器化架構中扮演重要角色,如果你還不熟悉基本概念,可以先參考 Docker 是什麼?新手完整入門教學。

RAID 基本觀念(RAID 1 vs RAID 10)

RAID 1 是「鏡像」,資料會同時寫入兩顆硬碟,優點是資料安全性高,但寫入效能不會明顯提升。RAID 10 則是「鏡像 + 條帶化」,能同時分散 I/O 負載,因此在資料庫與容器化環境中,通常能提供更好的整體效能與延遲表現。

在理解不同系統架構(例如虛擬化與容器化)的差異時,也可以進一步延伸參考 Docker vs VM vs Kubernetes 差異比較,幫助你更完整理解不同運行環境對效能與資源分配的影響。

RAID 1 與 RAID 10 比較
項目RAID 1RAID 10
結構MirrorMirror + 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
# 格式化並掛載使用
⚠️ 重要:這樣還沒結束!沒做完下面兩步,重開機後RAID可能「消失」。很多教學到這裡就結束了,但這其實只完成一半。目前為止的設定只在「這次開機期間」有效,Ubuntu並不知道下次開機時要自動組裝這個陣列、也不知道要把它掛載到 /data。伺服器一旦重開機,很可能發現RAID不見了(其實資料還在,只是沒被正確組裝或掛載),這是最容易讓新手嚇一跳的坑。

Step 7:把RAID設定寫入設定檔(開機自動組裝的關鍵)

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u
# 把目前RAID陣列的組成資訊寫進mdadm設定檔
# 並重建initramfs,讓開機流程能正確辨識並組裝這個RAID

這兩行指令缺一不可:mdadm --detail --scan會輸出目前陣列的UUID等組成資訊,寫進/etc/mdadm/mdadm.conf後,系統開機時才知道要把哪幾顆硬碟組成哪個陣列;update-initramfs -u則是把這份設定重新編入開機用的initramfs映像檔,確保開機早期階段就能正確載入。

Step 8:設定開機自動掛載(寫入 /etc/fstab)

先查詢RAID陣列的UUID:

blkid /dev/md0

把輸出的UUID複製下來,編輯 /etc/fstab 加入一行(記得依實際輸出替換UUID):

UUID=你查到的UUID  /data  ext4  defaults  0  2

寫入後可以用以下指令測試設定是否正確,而不用真的重開機:

sudo umount /data
sudo mount -a
df -h /data
# 如果重新掛載成功且df有顯示/data,代表fstab設定正確
💡 工程師提醒:完成Step 7、8後,建議找一個非上線時段實際重開機測試一次,確認RAID陣列能正確自動組裝、掛載點也正常,而不是等到未來意外斷電重開機時才發現設定沒生效。

Ubuntu Server、Docker 與 MySQL 效能完整比較

在實務上,Ubuntu Server 本身不會產生大量 I/O,真正影響效能的是「跑在上面的服務」,例如 Docker 與 MySQL。因此 RAID 的設計必須以服務特性來決定,而不是只看系統層。

系統層與服務層的I/O特性比較
項目Ubuntu Server(系統層)Docker ContainerMySQL 資料庫
IO 類型中低(log / system)中高(layer / log / file write)極高(random read/write)
IO 模式偏 sequential混合型 IO大量 random IO
RAID 1 表現穩定但延遲一般可能出現 IO bottleneckTPS 容易受限
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 比較
比較項目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」。

mdadm建置RAID的完整流程不是只到「格式化掛載」就結束——建立陣列後,務必把設定寫進/etc/mdadm/mdadm.conf並執行update-initramfs -u,再把掛載點加進/etc/fstab,這兩步做完才算真正完成,否則重開機後很可能發現RAID「不見了」。日常則要留意/proc/mdstat是否出現degraded狀態,一旦有硬碟故障應盡快更換並重建,避免容錯用盡導致資料遺失。

FAQ 常見問題

RAID 1 和 RAID 10 差在哪?
RAID 1是鏡像,RAID 10是鏡像+條帶化,因此RAID 10 IOPS更高,更適合MySQL、Docker這類高隨機I/O負載的環境。
mdadm 是什麼?
Linux軟體RAID工具,用CPU管理磁碟陣列,不需要額外的硬體RAID卡。
RAID 壞掉資料會消失嗎?
不會立即消失,但如果沒有進行rebuild,等第二顆硬碟也壞掉時就會遺失資料,因此發現降級(degraded)狀態後應盡快更換故障硬碟並重建。
MySQL 為什麼受 RAID 影響?
因為MySQL高度依賴隨機讀寫(random I/O),磁碟效能直接影響query latency,磁碟IOPS不足時交易延遲會明顯上升。
建立好RAID後,為什麼重開機就找不到了?
最常見原因是沒有把RAID設定寫入/etc/mdadm/mdadm.conf並執行update-initramfs -u,導致開機時系統不知道要組裝這個陣列;另外掛載點如果沒寫進/etc/fstab,重開機後也需要手動重新mount。建立RAID後務必完成這兩個持久化設定步驟。

本文為 Ubuntu Server 使用 mdadm 建置軟體 RAID 的通用教學,實際指令與硬體代號請依你的環境調整;正式環境操作RAID前請先完成資料備份,並在非上線時段測試重開機是否能正確自動組裝。