《libvirt VM 遷移計畫》These are my debain plasma boxes!!
店員問大哥「黑咖啡要怎麼做?」『冰的啦!』旁邊小弟暴走砸店...
... 次閱讀
Icekimo
15:00
參考我給你兩個主機的環境說明,擬定遷移計劃給我。
Claude Fable
15:01
好的!
Libvirt VM 遷移計畫:memphisbelle → katharine
關鍵差異對照
| 項目 | memphisbelle (來源) | katharine (目的地) |
|---|---|---|
| 根/系統 FS | ext4 | Btrfs |
| Libvirt 映像 FS | ext4 (/var/lib/libvirt/images) |
ZFS (/datapool/libvirt) |
| 映像基礎路徑 | /var/lib/libvirt/images/ |
/datapool/libvirt/ |
| ZFS 壓縮 | 無 | lz4(對 qcow2 效果有限,但無害) |
| ZFS 紀錄大小 | — | 128K(預設,可調整) |
| io='native' | 使用中(BetteDavis, DianaGish, UFTOne2023) | 需調整(ZFS 不建議 O_DIRECT) |
| 儲存池定義 | 已存在 3 個 | 尚未定義,需建立 |
| 網路連通 | Tailscale 100.113.41.89 |
Tailscale 100.90.240.22 |
磁碟映像清單(來源)
| VM | 磁碟映像路徑 | 實際大小 |
|---|---|---|
| BetteDavis | /var/lib/libvirt/images/BetteDavis.qcow2 |
~121 GB |
| DianaGish | /var/lib/libvirt/images/DianaGish.qcow2 |
~121 GB |
| JaneFonda6.3 | /var/lib/libvirt/images/JaneFonda/OS.qcow2 + Data.qcow2 |
~113 GB (合計) |
| UFTOne2023 | /var/lib/libvirt/images/UFTOne2023/OS.qcow2 + Data.qcow2 |
~114 GB (合計) |
| 總計 | ~469 GB |
katharine 上 datapool/libvirt 可用空間為 887 GB,空間充足。
遷移步驟
步驟 1:在 katharine 建立目標目錄
# 在 katharine 執行
sudo mkdir -p /datapool/libvirt/JaneFonda
sudo mkdir -p /datapool/libvirt/UFTOne2023
sudo chown -R root:root /datapool/libvirt
步驟 2:(可選)調整 ZFS 紀錄大小
qcow2 映像對 ZFS 紀錄大小不敏感,但可考慮調小以改善隨機 I/O:
# 在 katharine 執行(移轉前設定,資料移入後無法生效)
sudo zfs set recordsize=64K datapool/libvirt
步驟 3:從 memphisbelle 傳輸磁碟映像
在 katharine 上執行(透過 Tailscale 拉取),逐一執行或依序進行:
# BetteDavis (~121 GB)
sudo rsync -avP --sparse \
icekimo@memphisbelle:/var/lib/libvirt/images/BetteDavis.qcow2 \
/datapool/libvirt/BetteDavis.qcow2
# DianaGish (~121 GB)
sudo rsync -avP --sparse \
icekimo@memphisbelle:/var/lib/libvirt/images/DianaGish.qcow2 \
/datapool/libvirt/DianaGish.qcow2
# JaneFonda6.3 (~113 GB)
sudo rsync -avP --sparse \
icekimo@memphisbelle:/var/lib/libvirt/images/JaneFonda/ \
/datapool/libvirt/JaneFonda/
# UFTOne2023 (~114 GB)
sudo rsync -avP --sparse \
icekimo@memphisbelle:/var/lib/libvirt/images/UFTOne2023/ \
/datapool/libvirt/UFTOne2023/
--sparse旗標確保 qcow2 的稀疏空洞不被展開,減少傳輸量。
步驟 4:從 memphisbelle 匯出 VM XML 定義
在 katharine 上執行:
for vm in BetteDavis DianaGish JaneFonda6.3 UFTOne2023; do
ssh memphisbelle "virsh -c qemu:///system dumpxml $vm" \
> /tmp/${vm}.xml
done
步驟 5:修正 XML 中的磁碟路徑
# 替換基礎路徑
for vm in BetteDavis DianaGish JaneFonda6.3 UFTOne2023; do
sed 's|/var/lib/libvirt/images/|/datapool/libvirt/|g' \
/tmp/${vm}.xml > /tmp/${vm}_katharine.xml
done
步驟 6:調整 io='native' → io='threads'(ZFS 建議)
ZFS 有自己的 ARC 快取,不建議使用 io='native'(O_DIRECT)。
# 針對有 io='native' 的 VM (BetteDavis, DianaGish, UFTOne2023)
for vm in BetteDavis DianaGish UFTOne2023; do
sed -i "s|io='native'|io='threads'|g" /tmp/${vm}_katharine.xml
done
步驟 7:在 katharine 建立 libvirt 儲存池
# 建立 default 池
virsh -c qemu:///system pool-define-as default dir \
--target /datapool/libvirt
virsh -c qemu:///system pool-build default
virsh -c qemu:///system pool-start default
virsh -c qemu:///system pool-autostart default
# 建立 JaneFonda 池
virsh -c qemu:///system pool-define-as JaneFonda dir \
--target /datapool/libvirt/JaneFonda
virsh -c qemu:///system pool-build JaneFonda
virsh -c qemu:///system pool-start JaneFonda
virsh -c qemu:///system pool-autostart JaneFonda
# 建立 UFTOne2023 池
virsh -c qemu:///system pool-define-as UFTOne2023 dir \
--target /datapool/libvirt/UFTOne2023
virsh -c qemu:///system pool-build UFTOne2023
virsh -c qemu:///system pool-start UFTOne2023
virsh -c qemu:///system pool-autostart UFTOne2023
步驟 8:定義 VM
for vm in BetteDavis DianaGish JaneFonda6.3 UFTOne2023; do
virsh -c qemu:///system define /tmp/${vm}_katharine.xml
done
virsh -c qemu:///system list --all
步驟 9:驗證與測試啟動
# 先驗證一台(例如 BetteDavis)
virsh -c qemu:///system start BetteDavis
virsh -c qemu:///system domstate BetteDavis
# 確認正常後再啟動其餘 VM
注意事項
- rsync 需要 sudo:memphisbelle 上的映像屬於 root,需確認 katharine 上的 ssh 可用 sudo 或以 root 身份拉取。可考慮先在 memphisbelle 端
sudo rsync --daemon或使用ssh memphisbelle sudo cat <file> | ...。 - 傳輸時間估算:Tailscale 直連速度約 ~1 Gbps(實測 1.18ms 延遲),469 GB 約需 40–60 分鐘(若本地網路直連),若透過中繼則更久。
- io='native' on ZFS:ZFS 對 O_DIRECT 的支援不完整,改用
io='threads'配合cache='none'可獲得更穩定的效能。 - lz4 壓縮對 qcow2 效益低:qcow2 內部已壓縮,ZFS lz4 對這類資料幾乎不會進一步壓縮,可保留預設或關閉(
zfs set compression=off datapool/libvirt)。 - UUID 衝突:若兩台機器同時在線,需確認 VM 的 MAC 位址與 UUID 不會在同一子網中造成衝突。遷移完成後再關閉 memphisbelle 上的對應 VM 定義(
virsh undefine)。
上一頁
...
下一頁
...