ZFS 是 Proxmox、FreeNAS(TrueNAS)、Ubuntu Server 等系統中常見的「進階檔案系統與儲存管理架構」,它整合了 Volume Manager(磁碟管理)+ File System(檔案系統)+ Snapshot(快照)+ RAID 機制 + 壓縮 + 去重 等功能,是目前最完整、可靠的檔案系統之一。
一、ZFS 的核心觀念(Architecture & Concepts)
| 概念層級 | 名稱 | 說明 |
|---|
| Pool | zpool | 最上層儲存池,由多顆磁碟組成,類似 RAID。ZFS 將所有空間視為一個整體供檔案系統分配。 |
| VDEV (Virtual Device) | | Pool 內的實體儲存單元,可能是單顆磁碟、鏡像組(mirror)、RAIDZ1/2/3 組合。 |
| Dataset / Filesystem | zfs | Pool 內的邏輯子區,類似目錄,可獨立設定壓縮、快照、配額等。 |
| Volume | zvol | 區塊裝置(block device),常用於 VM 或 iSCSI。 |
| Snapshot | | 時間點快照,僅儲存差異,可快速回復。 |
| Clone | | 從快照建立可寫入的複本。 |
| ARC / L2ARC | | 記憶體(ARC)與 SSD(L2ARC)快取機制,加速存取。 |
| ZIL / SLOG | | 日誌寫入加速區(通常是高效能 SSD),加速同步寫入操作。 |
二、ZFS 的主要特性(Key Features)
| 功能 | 說明 |
|---|
| 整合的 RAID 管理 | 支援 mirror、RAIDZ1、RAIDZ2、RAIDZ3,不需外部 RAID 控制卡。 |
| Copy-on-Write (COW) | 寫入時不覆蓋舊資料,避免崩潰造成損毀。 |
| 內建壓縮(lz4) | 自動壓縮資料節省空間,幾乎無效能損失。 |
| 快照與複製 | 快速建立資料時間點備份,支援 clone 與 send/receive 傳輸。 |
| 資料完整性檢查 | 以 checksum 機制確保資料一致性,防止 silent data corruption。 |
| 自我修復(self-healing) | 若發現 checksum 錯誤,從鏡像或 parity 自動修復。 |
| 彈性空間分配 | 所有 dataset 共享 pool 空間,不需預先劃分固定容量。 |
三、常見應用場景(Practical Use Cases)
| 應用 | 說明 |
|---|
| Proxmox VM 儲存池 | 可作為 VM 的主要儲存,支援 snapshot、clone、replication。 |
| NAS 系統(如 TrueNAS) | 用於高可靠資料儲存,支援 SMB、NFS、iSCSI。 |
| 備份與同步系統 | 利用 zfs send/receive 傳輸快照至遠端備份主機。 |
| 資料庫儲存 | ZFS checksum 與快照方便資料保護與回溯。 |
| Docker / LXC 儲存後端 | 搭配壓縮及 copy-on-write,節省空間且快速建立容器。 |
四、ZFS 基本指令與操作範例
(1)建立 ZFS Pool
# 建立單一磁碟 pool
zpool create tank /dev/sdb
# 建立 mirror (RAID1)
zpool create tank mirror /dev/sdb /dev/sdc
# 建立 raidz1 (類似 RAID5)
zpool create tank raidz1 /dev/sdb /dev/sdc /dev/sdd
# 建立 raidz2 (類似 RAID6)
zpool create tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
(2)查看 Pool 狀態
zpool status
zpool list
(3)建立 Dataset(檔案系統)
# 建立一個 dataset
zfs create tank/data
# 設定壓縮
zfs set compression=lz4 tank/data
# 設定 quota (上限 100G)
zfs set quota=100G tank/data
# 設定 mount point
zfs set mountpoint=/mnt/data tank/data
(4)建立 Volume(zvol,用於VM或iSCSI)
zfs create -V 50G tank/vm01
(5)快照與回復
# 建立快照
zfs snapshot tank/data@2025-10-21
# 查看快照
zfs list -t snapshot
# 回復快照
zfs rollback tank/data@2025-10-21
# 刪除快照
zfs destroy tank/data@2025-10-21
(6)備份與傳輸
# 將快照以串流方式輸出
zfs send tank/data@2025-10-21 > /backup/data-20251021.zfs
# 將快照傳輸到遠端主機
zfs send tank/data@2025-10-21 | ssh remote zfs receive backup/data
# 增量傳輸(只傳變更)
zfs send -i tank/data@2025-10-20 tank/data@2025-10-21 | ssh remote zfs receive backup/data
(7)ZFS 健康檢查與維護
# 檢查整體健康
zpool status -v
# 修復(scrub)
zpool scrub tank
# 停止 scrub
zpool scrub -s tank
# 匯入 / 匯出 Pool
zpool export tank
zpool import tank
(8)刪除 Dataset 或 Pool
# 刪除 dataset
zfs destroy tank/data
# 刪除整個 pool(謹慎)
zpool destroy tank
五、ZFS 管理觀念與日常維護建議
| 項目 | 建議 |
|---|
| 磁碟命名 | 建議使用 /dev/disk/by-id/ 以避免開機後磁碟順序變動。 |
| 定期 scrub | 每月執行 zpool scrub 以檢查並修復潛在錯誤。 |
| 監控健康狀態 | 使用 zpool status、zpool list、zfs list 檢視空間與健康狀態。 |
| 備份策略 | 快照 ≠ 備份。仍需定期使用 zfs send 將快照同步至異地。 |
| 快取配置 | 大量 RAM 可提升效能(ARC);可配置 SSD 作為 SLOG(同步加速)或 L2ARC(快取)。 |
| 調整壓縮與 dedup | 預設建議開啟 compression=lz4;dedup=on 除非確定記憶體足夠,否則不建議開。 |
六、整體優缺點總覽
| 優點 | 缺點 |
|---|
| 高資料完整性、避免 silent corruption | 記憶體使用量較大(推薦≥8GB) |
| 內建 RAID、快照、壓縮 | 不適合用於傳統 BIOS 開機磁碟(建議另建 root pool) |
| 自我修復機制 | 部分功能需 Unix-like 系統(Linux/BSD)支援 |
| 彈性高,適合虛擬化環境 | 學習曲線較高 |