在進行操作 ZFS Pool 擴充時發生錯誤
root@pbs:~# zpool add pbsdata /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi5 invalid vdev specification use ‘-f’ to override the following errors: mismatched replication level: pool uses raidz and new vdev is disk
這個錯誤訊息的重點在這句:
mismatched replication level: pool uses raidz and new vdev is disk
意思是:你的 pbsdata pool 目前是 RAIDZ(例如 raidz1/2/3)組成,而你嘗試用 單顆磁碟(單一 vdev) 去 zpool add。這會導致整個 pool 的容錯層級不一致(RAIDZ + 單碟混搭),ZFS 會擋下來;用 -f 強制加入會讓整個 pool 因為那顆單碟而失去容錯(那顆一掛,整池就掛),不建議。
下面給你安全且正確的擴充做法選單,依你的目標挑一種:
你要「擴大容量」的正確做法
方案 A:新增一組與原本相同類型的 RAIDZ vdev(最常見)
- 如果原 pool 是
raidz1三顆盤組,就要一次再加 三顆 組成新的raidz1vdev。 - 指令範例(請改成你的磁碟 by-id 路徑):
# 先看清楚目前結構
zpool status pbsdata
# 假設原本是 raidz1(三顆),那就再加三顆做一個新的 raidz1 vdev
zpool add pbsdata raidz1 \
/dev/disk/by-id/diskA \
/dev/disk/by-id/diskB \
/dev/disk/by-id/diskC
注意:RAIDZ vdev 不能事後「加盤」變更多顆;只能一次建好一組,再「加一組」到 pool。
方案 B:把現有每顆盤都換成更大顆(逐顆 replace),最後自動放大
- 一次替換同一個 vdev 裡的每顆盤 → resilver 完成 → 全部換完 → pool 容量自動(或手動)放大。
- 指令範例:
# 確認 autoexpand(自動放大)已開
zpool set autoexpand=on pbsdata
# 逐顆換
zpool replace pbsdata \
/dev/disk/by-id/原小盤X \
/dev/disk/by-id/新大盤X
# 等待 resilver 完成
zpool status -v
# 全部盤位都換完、resilver 結束後,如未自動放大可嘗試:
zpool online -e pbsdata /dev/disk/by-id/新大盤X
這個方法不用新增槽位,但需要時間等每次 resilver。
方案 C:不跟原 pool 混,獨立新 pool,PBS 內再新增一個 Datastore
- 在 Proxmox Backup Server 裡,你也可以:
- 用新碟建立 新的 zpool(例如
pbsdata2) - 在 PBS 後台新增一個新的 datastore 指到
pbsdata2
- 用新碟建立 新的 zpool(例如
- 指令範例:
zpool create pbsdata2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi5
這樣兩個 datastore 各自獨立,簡單安全,也方便做資料分流。
你其實是想加「快取 / 日誌 / 備援」而不是容量?
如果你的目標不是擴容量,而是提升效能或備援:
- 讀取快取(L2ARC):
zpool add pbsdata cache /dev/disk/by-id/你的SSD
- 同步寫入日誌(SLOG/ZIL):(用有斷電保護的企業級 SSD)
zpool add pbsdata log /dev/disk/by-id/你的高耐寫SSD
- 熱備援(spare):
zpool add pbsdata spare /dev/disk/by-id/你的備援盤
這些「特殊 vdev」不影響資料冗餘層級,可以移除;但不會增加 pool 容量。
動手前的檢查清單
# 了解目前結構(特別是 vdev 類型與每組顆數)
zpool status pbsdata
# 用 by-id,避免 /dev/sdX 變動
ls -l /dev/disk/by-id/
# 看空間與健康
zpool list
zfs list
為什麼不要用 -f 強加單碟?
如果你在 RAIDZ pool 中用 -f 把單顆磁碟加進去,pool 就會變成「RAIDZ vdev + 單碟 vdev 的混血」。
那顆單碟若壞掉會讓整池故障(因為任何一個 vdev 掛掉,整個 pool 就不可用)。
所以除非你完全理解風險,否則不要這麼做。