SSD (固態硬碟) 無機械結構、隨機 IOPS 極高,但擦寫壽命有限、需 TRIM 指令回收閒置塊、受寫入放大影響。Linux 內核 2.6.37+ 原生支援 discard (TRIM),ext4/xfs/f2fs/btrfs 完美適配。本文從 I/O 調度器、掛載參數、文件系統調優、日誌模式、定時 TRIM、監控壽命 六大維度,給出生產級 SSD 優化完整清單。
# 查看當前調度器
cat /sys/block/nvme0n1/queue/scheduler
# [mq-deadline] kyber none
# 設為 none (NVMe 多佇列無需調度器,直接下發硬體)
echo none > /sys/block/nvme0n1/queue/scheduler
# SATA SSD (單佇列) 設為 noop
echo noop > /sys/block/sda/queue/scheduler
# 永久生效 (啟動參數)
# /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="... nvme_core.default_ps_max_latency_us=0 scsi_mod.use_blk_mq=1"
# 或 udev 規則 /etc/udev/rules.d/60-scheduler.rules
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="noop"
原理:SSD 內部控制器已具備優秀的佇列管理、磨損均衡、垃圾回收,OS 層調度器反而增加延遲與 CPU 開銷。
# ext4
UUID=xxxx / ext4 defaults,noatime,discard,commit=60 0 1
# xfs
UUID=xxxx /data xfs defaults,noatime,discard 0 2
# f2fs (專為閃存設計)
UUID=xxxx /home f2fs defaults,noatime,discard,active_logs=6 0 2
discard:同步 TRIM,每次刪除/截斷立即下發 TRIM,延遲極低但高併發刪除可能阻塞。noatime:禁用訪問時間更新,大幅減少元資料寫入(relatime 為折中,僅當 atime > mtime/ctime 時更新)。commit=60 (ext4):延遲日誌提交至 60 秒,減少日誌寫入頻率。| 文件系統 | 關鍵調優 | 建議場景 |
|---|---|---|
| ext4 | lazy_itable_init、lazy_journal_init、journal_async_commit、data=writeback (需權衡一致性) | 通用根分區、資料盤 |
| xfs | logbufs=8、logbsize=256k、inode64、allocsize=16m (大檔案)、swalloc (條帶化) | 大容量、高並發、大檔案存儲 |
| f2fs | active_logs=6、inline_data、inline_dentry、compress_algorithm=lz4 (內核 4.15+) | 嵌入式、移動設備、容器根檔案系統 |
| btrfs | ssd、space_cache=v2、compress=zstd:3、noatime、定期 btrfs balance | 快照/子卷需求、開發測試、桌面 |
UUID=xxxx / ext4 defaults,noatime,discard,commit=60,lazy_itable_init,lazy_journal_init,journal_async_commit,data=ordered 0 1
| 模式 | 掛載選項 | 一致性 | 效能 | 適用場景 |
|---|---|---|---|---|
| Ordered (預設) | data=ordered | 高 (數據先於元資料落盤) | 中 | 通用生產、資料庫、關鍵業務 |
| Writeback | data=writeback | 中 (元資料優先,數據可能亂序) | 高 (減少日誌寫入) | 日誌/快取/臨時數據、可容忍崩潰丟失最近寫入 |
| Journal | data=journal | 最高 (數據+元資料雙寫日誌) | 低 (寫入放大 2x) | 極高一致性需求、財務/審計系統 |
| 維度 | 核心動作 | 收益 | 風險/代價 |
|---|---|---|---|
| I/O 調度器 | NVMe→none, SATA→noop | 降低延遲、CPU 開銷 | 極低 (硬體已內建管理) |
| 掛載參數 | discard + noatime (+ commit=60) | 即時回收塊、減少元資料寫入 | 同步 discard 高併發刪除可能阻塞 |
| 文件系統調優 | ext4 lazy_init, xfs logbufs, f2fs compress | 減少寫入放大、提升吞吐 | 需測試驗證業務相容性 |
| 日誌模式 | 關鍵業務 ordered, 非關鍵 writeback | 平衡一致性與壽命 | writeback 崩潰可能丟數據 |
| 定時 TRIM | fstrim.timer 每周 | 補充同步 discard、批量高效 | 無 |
| 壽命監控 | SMART Percentage Used / Available Spare | 提前預警更換 | 無 |
將上述清單納入主機基線映像、自動化部署與日常巡檢,讓 SSD 在 Linux 下發揮極致效能與壽命,避免「買了高階 SSD 卻跑不出性能、壽命卻縮水」的尷尬。