你的流程 大致正確,但有幾個地方需要修正,以確保 proxmox-boot-tool
和 grub
設定正確,避免未來換磁碟後無法開機的問題。這裡幫你調整細節,讓整個過程更順暢。
📌 正確完整流程
🟢 第一階段:加入 2TB NVMe,建立 Mirror
1️⃣ 關機,安裝新的 2TB NVMe (nvme1n1
)。
2️⃣ 開機後,複製 1TB 分區表到 2TB
sgdisk -R /dev/nvme1n1 /dev/nvme0n1
sgdisk -G /dev/nvme1n1 # 重新生成 GPT UUID,避免與舊磁碟衝突
🔹 這會讓 2TB NVMe (nvme1n1
) 和 1TB (nvme0n1
) 分區表一致,但只會用到 1TB 空間。
3️⃣ 加入 2TB 硬碟到 rpool
,形成 Mirror(因原本是by-id建立,所以attach也是)
zpool attach rpool nvme-eui.00000000000000000026XXXXXXXXXX05-part3 nvme-eui.00000000000000000026XXXXXXXXXX35-part3
🔹 ZFS 會開始同步 (resilvering
),監控進度:
watch zpool status
🔹 等待 resilvering
完成,視數據量可能需要數分鐘到數小時。
4️⃣ 設定新 2TB NVMe 可開機
proxmox-boot-tool format /dev/nvme1n1p2
proxmox-boot-tool init /dev/nvme1n1p2
proxmox-boot-tool refresh
🔹 這確保 新磁碟的 /boot/efi
區塊已正確初始化。
5️⃣ 重新安裝 GRUB
- 如果是 UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=proxmox --recheck
update-grub
- 如果是 Legacy BIOS:
grub-install /dev/nvme1n1
update-grub
✅ 此時 rpool
仍然是 1TB,但已經是 Mirror,且 2TB NVMe 只用了 1TB。
🟢 第二階段:更換 1TB NVMe,完整升級到 2TB
6️⃣ 關機,拔除 1TB (nvme0n1
),換上新的 2TB (nvme3n1
),開機。
7️⃣ 用 zpool replace
替換 1TB(也要使用by-id,去/dev/disk/by-id/找資訊)
zpool replace rpool nvme-eui.00000000000000000026XXXXXXXXXX05-part3 /dev/disk/by-id/nvme-eui.00000000000000000058XXXXXXXXXX09-part3
🔹 這會讓 ZFS 自動同步數據,監控同步:
watch zpool status
🔹 等待 resilvering
完成。
8️⃣ 確保 autoexpand=on
,讓 rpool
釋放完整 2TB
zpool set autoexpand=on rpool
🔹 如果 zpool list
仍然顯示 1TB,而不是 2TB,可以手動擴展:
zpool online -e rpool nvme-eui.00000000000000000026XXXXXXXXXX05-part3
zpool online -e rpool nvme-eui.00000000000000000058XXXXXXXXXX09-part3
9️⃣ 設定新 2TB 硬碟可開機
proxmox-boot-tool format /dev/nvme3n1p2
proxmox-boot-tool init /dev/nvme3n1p2
proxmox-boot-tool refresh
🔟 重新安裝 GRUB
- UEFI 模式
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=proxmox --recheck
update-grub
- Legacy BIOS 模式
grub-install /dev/nvme3n1
update-grub
✅ 此時 rpool
已經從 1TB 完全擴展為 2TB,並且兩顆 NVMe 都能獨立開機。
🔹 總結
步驟 | 動作 | 指令 |
---|---|---|
第一階段:增加 2TB,建立 Mirror | ||
1 | 安裝 2TB 硬碟 (nvme1n1 ),開機 | (手動) |
2 | 複製 1TB 分區表到 2TB | sgdisk -R /dev/nvme1n1 /dev/nvme0n1 sgdisk -G /dev/nvme1n1 |
3 | 建立 Mirror | zpool attach rpool nvme0n1p3 nvme1n1p3 |
4 | 初始化 proxmox-boot-tool | proxmox-boot-tool format /dev/nvme1n1 proxmox-boot-tool init /dev/nvme1n1 proxmox-boot-tool refresh |
5 | 安裝 GRUB | grub-install ... update-grub |
第二階段:更換 1TB,擴展至 2TB | ||
6 | 關機,更換 1TB → 2TB (nvme3n1 ) | (手動) |
7 | 用 zpool replace 替換舊 1TB | zpool replace rpool nvme0n1p3 /dev/nvme3n1 |
8 | 自動擴展 rpool | zpool set autoexpand=on rpool zpool online -e rpool nvme1n1p3 zpool online -e rpool nvme3n1p3 |
9 | 重新初始化 proxmox-boot-tool | proxmox-boot-tool format /dev/nvme3n1 proxmox-boot-tool init /dev/nvme3n1 proxmox-boot-tool refresh |
10 | 重新安裝 GRUB | grub-install ... update-grub |
🛠 FAQ
❓ zpool attach
和 zpool replace
有什麼不同?
指令 | 作用 | 影響 |
---|---|---|
zpool attach | 新增磁碟到現有 ZFS 池(變成 Mirror) | 需要手動分割新磁碟 |
zpool replace | 替換故障或升級的磁碟 | ZFS 會自動處理分區 |
❓ 什麼時候 zpool autoexpand
會生效?
autoexpand=on
只會在所有 Mirror 磁碟都換成較大容量時才生效。- 你可以手動執行:
zpool online -e rpool nvme1n1p3 zpool online -e rpool nvme3n1p3
✅ 結論
你的流程 基本正確,但:
- 每次換磁碟後,必須執行
proxmox-boot-tool format/init/refresh
來確保開機。 - ZFS 會自動同步分區,無需手動分割
zpool replace
的磁碟。 - 完成 2TB 替換後,ZFS 可能不會立即擴展,手動
zpool online -e
可強制擴展。
這樣你的 Proxmox VE 就能安全從 1TB 過渡到 2TB Mirror,未來磁碟壞掉時,也能輕鬆更換!🚀