Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

KVM/Libvirt 實戰筆記:VM 搬移、操作指令與疑難排解(以 Win10 由 a3520→a1550 為例)

Posted on 2025-11-042025-11-04 by Rico

這篇把這次把 win10-cht-pro-basic 從 a3520 (CentOS 7) 搬到 a1550 (Ubuntu 24) 的過程與重點全記下來,包含基本操作、冷遷移流程、XML 調整、RDP/主控台連線、取 IP 方法與常見錯誤排查。未來同類案件照表操課即可。


一、最常用 virsh 指令小抄

# 啟動 / 關機 / 強制關機
virsh start <vm>
virsh shutdown <vm>
virsh destroy <vm>      # 相當於拔電,最後手段

# 查狀態/資訊
virsh list --all
virsh domstate <vm>
virsh dominfo  <vm>
virsh domiflist <vm>    # 介面/MAC/bridge
virsh domifaddr <vm>    # 要 guest agent 或 DHCP 租約

# 編輯/匯出定義
virsh edit <vm>
virsh dumpxml <vm> > /tmp/<vm>.xml

二、冷遷移(建議做法,跨版本最穩)

CentOS7 ↔ Ubuntu24 的 libvirt/QEMU 版本差距大,不建議 live migrate。冷遷移:關機→匯出→搬磁碟→修 XML→匯入。

1) 在來源 a3520 關機並匯出定義

virsh shutdown win10-cht-pro-basic
virsh dumpxml win10-cht-pro-basic > /tmp/win10.xml

2) 複製虛擬磁碟到目的 a1550

先查磁碟路徑:

virsh domblklist win10-cht-pro-basic
# 例:/var/lib/libvirt/images/win10-cht-pro-basic.qcow2

搬檔:

rsync -avhP /var/lib/libvirt/images/win10-cht-pro-basic.qcow2 \
  root@a1550:/var/lib/libvirt/images/

3) 在 a1550 調整 XML(重點 4 件)

打開 /tmp/win10.xml 依下列重點修改:

(A) QEMU 執行檔路徑(Ubuntu 24)

<emulator>/usr/bin/qemu-system-x86_64</emulator>

來源機若是 /usr/libexec/qemu-kvm 會報錯,需改為上面這條。

(B) CPU 相容性

跨主機最穩兩種選一:

  • host-model(效能較好)
<cpu mode='host-model' check='none'/>
  • qemu64(最保守;若有 svm/vmx 相容性問題可另外停用)
<cpu mode='custom' match='exact' check='none'>
  <model fallback='allow'>qemu64</model>
  <!-- 如遇到 "requires: svm" 可加上這兩行 -->
  <!-- <feature policy='disable' name='svm'/> -->
  <!-- <feature policy='disable' name='vmx'/> -->
</cpu>

(C) 記憶體大小(KiB)

<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>

4GB=4194304、8GB=8388608。Win10 建議至少 4–8GB。

(D) 網路橋接名稱

確認目的機的 bridge 名稱(例:br.eno1.5 或 br0):

<interface type='bridge'>
  <source bridge='br.eno1.5'/>
  <model type='rtl8139'/>  <!-- 後續可改 virtio -->
</interface>

(E) 機型 (machine type)(可選)

若遇到舊機型不相容,可改較通用的 q35:

<os>
  <type arch='x86_64' machine='q35'>hvm</type>
</os>

4) 匯入並啟動

virsh define /tmp/win10.xml
virsh start  win10-cht-pro-basic
virsh dominfo win10-cht-pro-basic

三、取得來賓 IP 的方法

方法 1:從主機用 MAC 反查(橋接網路最實用)

# 先看 VM 的 MAC
virsh domiflist win10-cht-pro-basic
# 假設 MAC=52:54:00:65:35:46,bridge=br.eno1.5
ip neigh show dev br.eno1.5 | grep -i 52:54:00:65:35:46 | awk '{print $1}'

如剛開機鄰居表還沒學到,可先對該網段掃描一下再查。

方法 2:啟用 QEMU Guest Agent(長期最方便)

XML 補一段通道(若尚未存在):

<channel type='unix'>
  <source mode='bind'/>
  <target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>

在 Windows 內安裝 qemu-guest-agent 後即可:

virsh domifaddr --source agent win10-cht-pro-basic

方法 3:NAT 網路(libvirt default)

virsh net-dhcp-leases default

四、RDP 連線 CredSSP 錯誤(Encryption Oracle Remediation)

症狀:RDP 顯示「不支援要求的功能,CredSSP 加密提示修復」。

最佳修法(伺服器端修補)

  1. 透過主控台登入(VNC/SPICE)。
  2. 執行 Windows Update。
  3. 設為 Mitigated(PowerShell 管理員): New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Force | Out-Null Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Name AllowEncryptionOracle -Type DWord -Value 1
  4. 建議啟用 NLA(安全):SystemPropertiesRemote.exe → 勾選「只允許使用網路層級驗證…」。

臨時權宜(用戶端降級)
只在可信網段、短時間使用:

# 用戶端(你現在的電腦)PowerShell 管理員
New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Name AllowEncryptionOracle -Type DWord -Value 2
gpupdate /force

連上後請儘快修好伺服器並把用戶端還原。


五、沒有桌面主機如何開主控台(SPICE/VNC)

A. 用 SSH Tunnel 連 VNC(最安全)

virsh domdisplay win10-cht-pro-basic 若顯示 vnc://localhost:1,表示埠是 5901,只綁本機。

# 在你本機打隧道
ssh -L 5901:127.0.0.1:5901 root@a1550
# 再用 VNC Client 連 127.0.0.1:5901

B. 對內網監聽(僅限可信網)

  1. 設 libvirt 全域 VNC 監聽:
sed -i 's/^#\?vnc_listen.*/vnc_listen = "0.0.0.0"/' /etc/libvirt/qemu.conf
systemctl restart libvirtd
  1. 調整 VM 的 <graphics>:
<graphics type='vnc' autoport='yes' listen='192.168.100.15' passwd='StrongPass!'>
  <listen type='address' address='192.168.100.15'/>
</graphics>
  1. 放行 59xx 埠並連線。

若由 SPICE 改 VNC,記得移除 SPICE 專用元件(<channel type='spicevmc'>、<redirdev type='spicevmc'>、video qxl、audio spice),改成 video virtio/audio none,否則會報 “chardev ‘spicevmc’ not supported without spice graphics”。


六、效能與相容性建議(Windows 來賓)

  • 磁碟/網卡改 virtio 可大幅提升效能(先在 Windows 裝 virtio 驅動再切換,避免藍屏)
    • 磁碟:<target dev='vda' bus='virtio'/>
    • 網卡:<model type='virtio'/>
  • 機型:現代 OS 建議 q35;舊 VM 若原用 i440fx 可維持,遇相容性再改。
  • CPU:能用 host-model 優先,其次 qemu64 做救援。
  • RAM/CPU 額度:Win10 建議 ≥2 vCPU、≥4GB RAM,桌面用途 8GB 體感更佳。

七、常見錯誤與排查

  • Cannot check QEMU binary /usr/libexec/qemu-kvm
    → Ubuntu 使用 /usr/bin/qemu-system-x86_64,改 <emulator>。
  • Host CPU does not provide required features: svm
    → 來源帶入 AMD svm;目的為 Intel(vmx)。改 <cpu> 為 host-model 或 qemu64,必要時 <feature policy='disable' name='svm'/>。
  • 無法連 VNC:只顯示 localhost
    → 用 SSH Tunnel,或改 qemu.conf 的 vnc_listen + <graphics listen=…> 綁內網 IP。
  • RDP CredSSP 錯誤
    → 依第四節修補;短期可用用戶端降級、長期修伺服器。
  • 磁碟/網路沒裝置
    → 檢查 <source file=…> 路徑、權限(libvirt-qemu:kvm,chmod 640),bridge 名稱是否存在。

八、(可選)Live Migration 備忘

  • 成功率仰賴:共享儲存、CPU 近似、libvirt/QEMU 版本接近、bridge 名稱一致。
  • 指令範例(共享儲存): virsh migrate --live --persistent --undefinesource \ <vm> qemu+ssh://a1550/system
  • 不共享儲存可加 --copy-storage-all,但時間長、風險高,不推薦跨大版本環境。

九、這次實例的關鍵變更(摘要)

  • <emulator> → /usr/bin/qemu-system-x86_64
  • <cpu> → host-model(或 qemu64 並禁用 svm)
  • <memory> → 調至 4–8GB
  • <interface> → source bridge='br.eno1.5'(依目的機實際 bridge)
  • (選)<type machine='q35'>
  • SPICE→VNC 時,同步移除 spicevmc 元件、改 video virtio、必要時開 vnc_listen

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme