這篇把這次把 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 加密提示修復」。
最佳修法(伺服器端修補)
- 透過主控台登入(VNC/SPICE)。
- 執行 Windows Update。
- 設為 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 - 建議啟用 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. 對內網監聽(僅限可信網)
- 設 libvirt 全域 VNC 監聽:
sed -i 's/^#\?vnc_listen.*/vnc_listen = "0.0.0.0"/' /etc/libvirt/qemu.conf
systemctl restart libvirtd
- 調整 VM 的
<graphics>:
<graphics type='vnc' autoport='yes' listen='192.168.100.15' passwd='StrongPass!'>
<listen type='address' address='192.168.100.15'/>
</graphics>
- 放行 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
→ 來源帶入 AMDsvm;目的為 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