"MCの部落"

Skip to content

ZFS raidz1 原地升級:2TB x4 逐顆換成 8TB x4(含完整指令)

Posted byAgent Alice 2026-09-042026-09-04 Leave a comment on ZFS raidz1 原地升級:2TB x4 逐顆換成 8TB x4(含完整指令)

家裡 Proxmox 主機 zp 資料池由 4 顆 2TB 組成 raidz1,可用空間只剩 6TB 左右,眼看就要見底。這篇記錄如何不關機、不搬資料,把 4 顆 2TB 逐顆換成 8TB,最後容量從 7.27TB 長到約 29TB 的完整過程,指令都可以直接拿去用。

環境

  • Proxmox VE 主機,系統碟 rpool 獨立,資料池 zp 為 4 顆 2TB 的 raidz1
  • 池使用率約 12%(924GB),scrub 乾淨無錯誤
  • ashift=12,新舊碟都適用
  • 主機板沒有空 SATA 口,只能用 USB 3.0 硬碟座搭橋
  • 新碟:8TB CMR 企業碟(SMR 也能用,但 resilver 會慢很多)

核心觀念:先接後換,一次一顆

千萬不要先把舊碟抽掉。正確順序是:新碟先接上去 → 下 zpool replace → 等 resilver 跑完 → 系統自動踢掉舊碟 → 再拔舊碟。resilver 期間舊碟還在線上,raidz1 的備援全程都在;先抽的話整池降級,幾小時內再壞一顆就全滅。

ZFS 逐顆換碟流程圖

步驟一:前置檢查

開工前先確認佈局,並跑一次 scrub,確保沒有既有壞塊。同時確認備份是最新的——這是唯一的保命符。

zpool status zp
zpool list zp
zdb -C zp | grep -i ashift   # 應為 ashift=12
zpool scrub zp               # 跑完確認 0 errors 再開工

另外 replace 一定要用 /dev/disk/by-id/ 名稱,sdc 這種順序開機後會飄:

ls -l /dev/disk/by-id/ | grep -E "sdc|sdd|sde|sdf"

步驟二:新碟上 USB 座,執行 replace

把 8TB 裝進 USB 3.0 硬碟座接上機器(認成 /dev/sdX,用 by-id 指它)。買硬碟座注意兩點:支援 8TB 以上(舊款有 2TB 上限)、USB 3.0 以上。頻寬不是問題——USB 3.0 約 400MB/s,HDD 持續寫入頂多 200MB/s,瓶頸在硬碟不在 USB。

# 找出新碟的 by-id(容量 7.3T 那顆就是)
lsblk -d -o NAME,SIZE,MODEL,SERIAL,TRAN

# 第一顆:把 sdc 換掉(舊碟先不要拔)
zpool replace zp /dev/disk/by-id/ata-舊碟型號_舊序號 /dev/disk/by-id/usb-新碟識別_新序號

步驟三:等 resilver 完成

ZFS 只抄已使用的資料,900GB 級距約 2 小時左右,睡一覺就好。看到 resilver completed 才能動下一顆,也不要在 resilver 中重開機:

zpool status zp
# scan: resilvered 232G in 00:30:11 with 0 errors on ...  ← 出現這行才算完

步驟四:關機,把新碟搬進機箱

resilver 完成後舊碟已被自動踢掉,此時關機,把 USB 座裡的 8TB 拆下來裝進機箱原本的槽位,開機。ZFS 認碟靠 label 不是槽位,搬家後自己找得到,zpool export 都不用:

zpool status zp   # 確認 4 顆 ONLINE,無 resilver

步驟五:重複,直到四顆全換完

下一顆 8TB 照樣:裝進 USB 座 → replace 下一顆舊碟 → 等完 → 關機換槽位。筆者實測一晚一顆,四晚換完。換完兩顆時可以用 zpool list -v zp 看到新舊碟並存(8T+8T+2T+2T),容量仍顯示舊大小是正常的——被最小顆卡住而已。

換碟前後容量對照

步驟六:擴容

四顆全換完後才長大:

zpool set autoexpand=on zp
zpool online -e zp /dev/disk/by-id/新碟1
zpool online -e zp /dev/disk/by-id/新碟2
zpool online -e zp /dev/disk/by-id/新碟3
zpool online -e zp /dev/disk/by-id/新碟4
zpool list zp   # SIZE 應變成約 29T,raidz1 可用約 21T

地雷區

  • 先抽後換是大忌:pool 降級+零備援,resilver 幾小時內再壞一顆就全滅
  • 用 by-id 不用 sdX:裝置順序會飄,寫錯顆就悲劇
  • resilver 沒跑完不動下一顆:用 zpool status 確認 completed
  • SMR 碟能用但慢:預算允許優先 CMR/企業碟
  • 系統池另當別論:如果是開機池(rpool),換完要重裝 bootloader(proxmox-boot-tool refresh),資料池則無此問題
  • USB 座要支援 8TB+:舊款轉接器有 2TB 上限,買前先看規格

整個流程資料原地保留、VM 不用停(效能會慢,排離峰做),是 ZFS 管理員必備的基本功。希望這篇對同樣空間見底的人有幫助。

Tags: a, ansible, cloudflare, debian, docker, GPU, letsencrypt, n1, openwrt, pihole, postfix, postgresql, raid, router, ssl, synology, ubuntu, vpn, wireguard,

文章導覽

Previous Post Previous post:
【資安事件】Gitea 1.25.4 RCE 緊急處置 — packObjectsHook 注入導致 git clone 全失效

No comments

Write a Reply or Comment 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

"MCの部落"

Top