dPhhAt3dkwNe57E0VIETCopNBAvS4qtY0z2O1th0
Bookmark

《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

注意事項

  1. rsync 需要 sudo:memphisbelle 上的映像屬於 root,需確認 katharine 上的 ssh 可用 sudo 或以 root 身份拉取。可考慮先在 memphisbelle 端 sudo rsync --daemon 或使用 ssh memphisbelle sudo cat <file> | ...
  2. 傳輸時間估算:Tailscale 直連速度約 ~1 Gbps(實測 1.18ms 延遲),469 GB 約需 40–60 分鐘(若本地網路直連),若透過中繼則更久。
  3. io='native' on ZFS:ZFS 對 O_DIRECT 的支援不完整,改用 io='threads' 配合 cache='none' 可獲得更穩定的效能。
  4. lz4 壓縮對 qcow2 效益低:qcow2 內部已壓縮,ZFS lz4 對這類資料幾乎不會進一步壓縮,可保留預設或關閉(zfs set compression=off datapool/libvirt)。
  5. UUID 衝突:若兩台機器同時在線,需確認 VM 的 MAC 位址與 UUID 不會在同一子網中造成衝突。遷移完成後再關閉 memphisbelle 上的對應 VM 定義(virsh undefine)。
導讀
選擇語音
1x
* 更改設定將重新朗讀文章。