IT @ Jason Tools v3.65.1

PVE ZFS 容量計算機

規劃 PVE 本機儲存、虛擬機與封存容量。

規劃條件

選擇要規劃的內容
實體磁碟
進階設定

這幾項是本站的規劃假設,不是自動偵測的結果。ashift 在建立集區時就決定,之後改不了。

ashift
VM 區塊大小
從現有主機匯入

在 PVE 主機上跑下面任一行,把輸出整段貼進來,這一頁就會照你實際的集區畫出來。資料只在你自己的瀏覽器裡處理。

直接看(貼上用) zpool status && zpool list -v && zfs list && zfs get all && zpool history
存成一個檔案 { zpool status; zpool list -v; zfs list; zfs get all; zpool history; } > /tmp/zfs-report.txt 2>&1

五個都不是必要的 —— 有幾個就讀幾個。zpool status 給組法、zpool list -v 給容量、zfs list 給實際用量、zfs get all 給 volblocksize 這類參數、zpool history 給當初建立時的 ashift。

磁碟配置

把磁碟拖進 vdev,或選起來按「加入 vdev」。兩種方式都可以,鍵盤也操作得了。

新增 vdev 的型別
自動分組 每組 顆(磁碟)

磁碟庫

還沒有分配到任何 vdev 的磁碟。

點一下選取,再點取消;在空白處拖曳可以框選。

集區配置

輔助裝置

這四種壞掉的後果完全不同 —— special 掉了整個集區就掉了,L2ARC 掉了沒事。它們的容量都不算進 VM 可用空間。

新增輔助裝置

容量與預留

規劃使用上限 %

這是本站的預留策略,不是官方固定的效能門檻。

匯出規劃

把這份配置存成圖或資料檔。圖上會印出計算依據與免責,因為圖流出去之後畫面上的說明就跟不過去了。

容錯

壓縮策略

先用代表性資料測試;壓縮只影響之後寫入的區塊,既有資料不會重算。

壓縮演算法

容量估算沒有把壓縮收益乘進去。壓縮比取決於實際資料,而且壓縮會改變實體區塊大小與補齊 —— 拿一個平均值去乘是偽精確。

使用說明 7

這支工具怎麼算、以及它刻意不替你決定的事

RAIDZ 的實際效率比「名目」低 名目效率是 (碟數 − 同位) ÷ 碟數,但 ZFS 實際配置時會把每個區塊補齊到 同位+1 的倍數。碟數配得剛好時兩者幾乎一樣(6 碟 RAIDZ2 是 0.666 對 0.667),10 碟 RAIDZ2 卻是 0.762 對名目的 0.800 —— 差 4.8%。本站算的是實際配置,不是名目。
dRAID 寫的是固定寬度的整條帶 RAIDZ 的區塊只佔它需要的磁區;dRAID 一律寫滿整個條帶,比條帶小的區塊會被補齊。實測 draid2:4d(ashift 12,條帶 16 KiB):4 KiB 的區塊實際吃掉 4 倍空間、8 KiB 吃掉 2 倍,16 KiB 以上才是 1 倍。同樣 4 KiB 在 6 碟 RAIDZ2 只有 2 倍 —— dRAID 差一倍。所以 dRAID 常常要另外配一組 special vdev 承接小區塊。
dRAID 的分散備援換的是重建速度,不是容錯 分散備援把備援空間攤在每一顆碟上,壞碟時可以整碟循序重建,通常比 RAIDZ 的逐區塊 resilver 快。但它不是多一份同位 —— draid2 不管留幾個備援,同時壞 3 顆就是集區不可用。而且備援佔掉的容量不算進集區(實測 11 顆配 1 個備援,zpool list 顯示的是 10 顆的量)。本站不估重建時間,那跟碟速、負載與資料量都有關。
dRAID 的參數建立後就改不了 children、同位碟數、每組資料碟數與分散備援數都在 zpool create 當下固定。每組資料碟數直接決定條帶寬度,也就決定小區塊要浪費幾倍空間 —— 本站不替你挑一個,沒填就不產生可執行指令。
special vdev 不是快取 它存的是中繼資料與小區塊。整組失去足夠副本時,整個集區的資料可能就讀不出來 —— 所以本站要求 special 至少兩顆而且做成 mirror。另外實測:special 的冗餘比資料 vdev 弱時,ZFS 會直接拒絕建立(mismatched replication level),不是只給警告。
「zfs list 會顯示」的數字已經扣掉同位 zpool list 的 SIZE 是含同位的原始容量,zfs list 的 AVAIL 才是你真正放得下多少。兩個數字差一個 deflate 係數,拿錯一個會差 1.5 倍以上。本站兩個都列出來,並標明哪個是哪個。
本站算的是區塊配置模型,不是實際可用位元組 中繼資料、slop space(ZFS 保留的那一小塊)、快照、壓縮率、dedup 表都不在這個模型裡 —— 所以結果標的是「模型值」而不是「淨可用容量」。要真正的數字只能建起來再看 zfs list。產生的指令也沒有在任何主機上被本站驗證過。
用在 HDD / SSD / NVMe 的差別 7

同一種組法換一種介質,該注意的事完全不同。下面的倍數與百分比都是這一頁的配置模型算出來的(跟上面的結果同一套),不是抄來的經驗值。IOPS 與重建時間本站不估 —— 那要看實際硬體與負載。

做 VM 儲存時,寬 RAIDZ 可能比 Mirror 還浪費 同樣 12 顆碟、128 KiB 區塊時,一組 12 碟 RAIDZ2 的效率是 76.2%、六組 Mirror 只有 50.0% —— 看起來 RAIDZ 划算得多。但 VM 的 zvol 常常是 8 KiB 區塊,同一組 12 碟 RAIDZ2 會掉到 33.3%,反而比 Mirror 的 50.0% 差。而且它只有一個 vdev,隨機 IOPS 也輸。把上面的區塊大小改成你實際的 volblocksize 再看一次結果,不要照抄「RAIDZ 比較省」。
HDD:IOPS 跟 vdev 數量走,不是跟磁碟數量走 一個 RAIDZ vdev 的一次隨機讀寫要跨過該條帶的所有資料碟,所以那一組的隨機 IOPS 大致就是一顆碟的量。十二顆碟開成一組寬 RAIDZ2,隨機效能約等於一顆;開成六組 Mirror 就是六份。要容量就開寬的,要 IOPS 就開多組窄的 —— 這個取捨在建立集區時就定了。本站不估 IOPS,只把 vdev 數量列出來讓你自己判斷。
HDD:碟越大,重建越是要先想好 大容量碟重建要跑很久,而重建期間集區的容錯是降級的。RAIDZ3 多一份同位,dRAID 則是把備援攤在每顆碟上、壞碟時整碟循序重建(通常比逐區塊 resilver 快)。另外把 special vdev 放到 SSD 或 NVMe,中繼資料與小區塊就不必再壓在轉動的碟上 —— 但 special 掉了整個集區就掉了,所以本站要求它至少兩顆而且做成 Mirror。
SSD:SLOG 只加速同步寫入,而且要有斷電保護 SLOG 承接的是 ZIL,也就是「應用程式要求寫入必須落地才回應」的那一類。非同步寫入根本不經過它 —— 工作負載不是同步寫的話,加 SLOG 完全沒有效果。而且 SLOG 要有斷電保護(PLP):它存在的理由就是斷電之後那段尚未落盤的資料還救得回來,用沒有 PLP 的消費級 SSD 等於把這個保證拿掉。另外記得開 autotrim 或排程 zpool trim。
NVMe:ashift 設 13 會讓小區塊的浪費加倍 有些 NVMe 的頁是 8 KiB,設 ashift=13 看起來比較「對齊」。但 ashift 決定的是 ZFS 的最小配置單位 —— 同一組 6 碟 RAIDZ2,4 KiB 的區塊從 2.00 倍變成 4.00 倍、16 KiB 從 1.00 倍變成 2.00 倍。而 ashift 在建立集區時就固定、之後改不了。沒有量過自己的硬碟與工作負載,就用 12。
NVMe:延遲低到 Mirror 的優勢更明顯 NVMe 的單碟 IOPS 已經很高,瓶頸常常換成 CPU 與 ZFS 本身。這種時候 RAIDZ 的同位計算與整條帶讀取比較吃虧,Mirror 的延遲穩定得多。L2ARC 也不是加了就好 —— 它的索引住在記憶體的 ARC 裡,加一塊 L2ARC 會吃掉本來拿來當快取的記憶體,而且它是讀取快取,不加速寫入。
建立後改不了的參數,先想清楚 ashift(集區的最小配置單位)、zvol 的 volblocksize、dRAID 的 children / 同位 / 每組資料碟數 / 分散備援數 —— 這幾個都在建立當下固定。可以之後再調的是 compression、recordsize(對新寫入生效)、atime、autotrim 這些。Proxmox 的 zvol 預設 volblocksize 換過版本就不一樣,用 zfs get volblocksize 看你自己實際建出來的值,不要照抄別人的設定。