Proxmox VE ZFS 快取
由於 BUBU 在專案執行中遇到需要提升儲存 I/O 效能的情境,因此決定透過 ZFS 的快取機制(L2ARC / SLOG) 來強化系統讀寫效率。以下紀錄完整新增快取服務的步驟與說明,方便後續維運及教學使用。
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Proxmox VE 9
設定過程
ZFS 快取設定 — 新增與移除教學
在實務環境中,ZFS 可透過兩種快取機制提升 I/O 效能:
- SLOG(ZIL 日誌裝置):加速「同步寫入」作業
- L2ARC(二級快取):加速「重複讀取」作業
以下說明如何針對單一硬碟新增或移除 ZFS 的快取功能。
- 設定寫入快取(SLOG)
# 新增寫入快取
zpool add <pool-name> log <來源硬碟>
# 移除寫入快取
zpool remove <pool-name> <來源硬碟>
- 範例:
# 新增寫入快取
zpool add tank log /dev/nvme1n1
# 移除寫入快取
zpool remove tank /dev/nvme1n1
說明:
SLOG(Separate Intent Log)用於加速同步寫入作業,適合資料庫、NFS 等需確保資料一致性的情境。 建議使用具 Power Loss Protection(PLP) 的 SSD,以防突發斷電造成資料遺失。
- 設定讀取快取(L2ARC)
# 新增讀取快取
zpool add <pool-name> cache <來源硬碟>
# 移除讀取快取
zpool remove <pool-name> <來源硬碟>
- 範例:
# 新增讀取快取
zpool add tank cache /dev/nvme0n1
# 移除讀取快取
zpool remove tank /dev/nvme0n1
說明:
L2ARC(二級快取)會將常用資料暫存在 SSD 上,減少從主儲存池中重複讀取的時間,適合虛擬化主機、Web 檔案伺服器等重度讀取環境。
- 單一 SSD 同時作為讀寫快取
若僅有一顆 SSD,但空間足夠(例如 500 GB 以上),可透過 分割磁碟 的方式,同時作為 SLOG 與 L2ARC。
- 在 Proxmox VE 環境中,系統預設並未安裝
parted套件。
由於我們後續需要使用parted進行 SSD 分割,以建立 讀取快取(L2ARC) 與 寫入快取(SLOG) 的專用磁區,因此需先安裝此工具。
# 安裝 parted 套件
apt install parted -y
- 啟動分割工具
parted /dev/disk/by-id/nvme-TS1TMTE220S_H740030147
- 檢查磁碟現有分割,若該磁碟已有既有分割,需先刪除舊分割區再重新建立。
(parted) print
- 刪除舊有分割區,使用以下指令刪除指定編號的磁區(例如第 1 區):
(parted) rm 1
如有多個分割區,請依序刪除所有分割。
- 建立新 GPT 分割表與磁區,建立新的 GPT 分割表,並將磁碟空間平均切成兩半:
(parted) mklabel gpt
(parted) mkpart primary 0% 50%
(parted) mkpart primary 50% 100%
(parted) quit
建議:
第一個磁區(part1)作為 L2ARC 讀取快取
第二個磁區(part2)作為 SLOG 寫入快取
- 將分割區加入 ZFS 快取
# 新增讀取快取(L2ARC)
zpool add <pool-name> cache /dev/disk/by-id/nvme-TS1TMTE220S_H740030147-part1
# 新增寫入快取(SLOG)
zpool add <pool-name> log /dev/disk/by-id/nvme-TS1TMTE220S_H740030147-part2
- 確認設定結果
zpool status <pool-name>
- 顯示如下
logs
nvme-TS1TMTE220S_H740030147-part2 ONLINE
cache
nvme-TS1TMTE220S_H740030147-part1 ONLINE
注意事項
建議使用具 PLP(Power Loss Protection) 的 SSD 以確保資料一致性。
若 SLOG 故障,ZFS 仍能自動回寫至主池,不會導致資料遺失。
L2ARC 快取為暫存性資料,重開機後會自動重建。