IBM Cloud VPC 的 Windows 遷移注意事項:驅動程式、授權及準備工作
請檢視 Windows 遷移至 IBM Cloud VPC 時需考量的事項,包括 VirtIO 驅動程式注入、sysprep 準備工作以及授權要求。
駕駛挑戰
在 VMware 環境中,Windows 會載入 VMware 虛擬化驅動程式 ( vmxnet3 用於網路、pvscsi 用於儲存等),並將它們與特定硬體識別碼綁定。 當您將磁碟移動到 VPC 時,硬體就會改變:
- 網路:VMware vmxnet3 → 虛擬 I/O ( VirtIO ) 網路介面卡
- 儲存(開機):VMware PVSCSI → VirtIO SCSI 介面卡
- 儲存(資料):VMware PVSCSI → VirtIO 區塊介面卡
如果 Windows 開機時發現其開機儲存控制器的硬體 ID 不同,就會無法開機 (INACCESSIBLE_BOOT_DEVICE 藍螢幕)。
解決方案 A:Sysprep 方法
微軟的 sysprep 公用程式會「概括化」Windows 安裝,將其重設為第一次啟動的狀態。 這個
- 釋放驅動程式綁定
- 重設 Windows 安全識別碼 (SID)
- 移除電腦特定資訊
- 為重新部署準備影像
完成下列 sysprep 的流程:
-
在 Windows 虛擬機器中安裝 VirtIO 驅動程式,同時仍託管在 VMware 中:
- 從 RHEL 虛擬伺服器執行個體(
/usr/share/virtio-win)下載 virtio-win ISO 檔案。 - 安裝 ISO,執行
virtio-win-gt-x64.exe,然後選取virtio-win-guest-tools.exe。 - 為作業系統和復原磁碟分割安裝驅動程式。
- 從 RHEL 虛擬伺服器執行個體(
-
執行 sysprep:
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown -
使用任何一種 遷移方法 進行匯出和遷移,但 VDDK Direct Extraction 除外,該方法僅適用於 vCenter.NET Framework。
-
首次在 VPC 中啟動:
- Windows 會執行迷你設定精靈 (OOBE)
- 偵測新硬體,載入 VirtIO 驅動程式
- 可能需要重新輸入產品金鑰
- 可能需要重新加入網域
優勢:
- 記錄完整的 Microsoft 流程
- 在 Windows 部署中可靠運作
缺點:
- 重設機器身分 (對於連結網域的伺服器有問題)
- 可能觸發 Windows 重新啟動
- 應用程式特有的問題 (某些應用程式無法很好地處理 sysprep)
- 需要在首次開機時完成 OOBE
設計決策:將 sysprep 用於基於範本的部署,或當您遷移至可接受身分重設的開發或測試虛擬機器時。 避免用於具有複雜應用程式相依性的生產網域連接伺服器。
解法 B:virt-v2v 驅動程式注入
libguestfs virt-v2v 工具可在 Windows 安裝中注入 VirtIO 驅動程式,而無需執行 sysprep。 它:
- 掛載 Windows 檔案系統 (不啟動 Windows)
- 將 VirtIO 驅動程式注入驅動程式儲存庫
- 修改註冊表以強制 Windows 載入這些驅動程式
- 保留機器身份、網域成員資格和應用程式狀態
必要條件:
- 虛擬機器必須乾淨地關閉 (不是當機,也不是強制關閉)
- 必須支援 Windows 版本 (Server 2008 R2 至 2025、Windows 7 至 11)
- Virtio-win 驅動程式套件 (適用於 RHEL 系統:
/usr/share/virtio-win)
以下是 virt-v2v 驅動程式注入的流程:
-
在 Windows 開機和復原磁碟分割中安裝 VirtIO 驅動程式 (與 sysprep 方法相同)
-
徹底關閉 Windows 虛擬機
-
請使用任一種 遷移方法,將磁碟匯出/轉移至工作虛擬伺服器執行個體。
-
運行 virt-v2v:
virt-v2v -i disk windows-vm.img -o disk -os /target --block-driver virtio-scsi參數:
-i disk:輸入是磁碟映像檔-o disk -os /target:輸出到目錄--block-driver virtio-scsi:第一個磁碟使用 SCSI 驅動程式 (VPC 開機磁碟區需要)
-
如果直接寫入裝置:
ln -fs /dev/vdb /target/windows-vm-sda virt-v2v -i disk windows-vm.img -o disk -os /target --block-driver virtio-scsi
優勢 virt-v2v:
- 保留機器身分(無需重新啟動、無需重域連結)
- 無首次開機設定精靈
- 應用程式狀態完好
- 適用於生產伺服器
缺點:
- 需要 RHEL/ Ubuntu 混合設定
- 比 sysprep 更複雜
- 需要乾淨關機(不處理崩潰/強制關閉的虛擬機)
設計決定:使用 virt-v2v 作為生產 Windows 伺服器,因為在這些伺服器上保留身分是非常重要的。 接受額外的工具複雜性,以換取更乾淨的移轉。
RHEL/ Ubuntu 的挑戰
關鍵問題:VPC Windows 虛擬機器必須啟用「--block-driver virtio-scsi」選項(開機磁碟使用 Virtual I/O ( VirtIO ) SCSI,而非 VirtIO 區塊),但:
- RHEL virt-v2v 不支援
--block-driver virtio-scsi - Ubuntu virt-v2v 支援
--block-driver virtio-scsi - RHEL libguestfs 包含 virtio-win 驅動程式,位於
/usr/share/virtio-win - Ubuntu libguestfs 不包含 virtio-win 驅動程式
暫行解決方法
RHEL/ Ubuntu 問題有兩種解決方法。
選項 1:將 libguestfs 建立在 Ubuntu
第一個選項是在 Ubuntu 上建立 libguestfs,執行下列指令。
# On Ubuntu worker virtual server instance
apt-get install libguestfs-tools
# Copy virtio-win from a RHEL system
# On RHEL: tar czf virtio-win.tar.gz /usr/share/virtio-win
# Transfer to Ubuntu and extract:
tar xzf virtio-win.tar.gz -C /usr/share/
# Now virt-v2v on Ubuntu has both SCSI support and drivers
virt-v2v -i disk windows.img -o disk -os /target --block-driver virtio-scsi
選項 2:兩階段轉換
第二個選項是使用下列指令進行兩階段轉換。
# On RHEL worker (has drivers, no SCSI support)
virt-v2v -i disk windows.img -o disk -os /tmp
# Transfer to Ubuntu worker
scp /tmp/windows-sda ubuntu-worker:/tmp/
# On Ubuntu worker (has SCSI support)
virt-v2v -i disk /tmp/windows-sda -o disk -os /target --block-driver virtio-scsi
VPC 中的 Windows 儲存驅動程式架構
瞭解 VPC 如何將儲存呈現於 Windows,有助於排除開機問題:
第一個磁碟區 (開機磁碟):
- 呈現為 VirtIO SCSI 裝置
- 需要 virtio-scsi 驅動程式
- 這就是為什麼
--block-driver virtio-scsi是強制性的
後續磁碟區 (資料磁碟):
- 呈現為 VirtIO 區塊裝置
- 需要 virtio-blk 驅動程式
- 與開機磁碟不同的驅動程式
兩個驅動程式必須同時安裝:
- 執行中的作業系統
- 復原環境 ( WinRE )
復原環境的驅動程式安裝
Windows 復原環境 ( WinRE ) 是一個獨立的迷你 Windows 環境,用於執行復原作業。 如果該裝置沒有虛擬 I/O( VirtIO )驅動程式,您將無法在遷移後使用它進行復原。
定位 WinRE:
reagentc /info
這可能會報告復原磁碟區,但實際的 WinRE 映像可能在:
C:\Windows\System32\Recovery\winre.wim
安裝驅動程式 WinRE:
-
安裝 virtio-win ISO
-
透過 WinRE 識別位置
reagentc /info -
如果位於獨立磁碟區,請暫時掛載
-
使用 DISM 來注入驅動程式:
dism /mount-wim /wimfile:C:\Windows\System32\Recovery\winre.wim /index:1 /mountdir:C:\mount dism /image:C:\mount /add-driver /driver:E:\viostor\w10\amd64 /recurse dism /image:C:\mount /add-driver /driver:E:\netkvm\w10\amd64 /recurse dism /unmount-wim /mountdir:C:\mount /commit
GPT 磁碟分割的注意事項:
如果您的 Windows 磁碟使用 GPT(而非 MBR):
- 使用
list volume和select volume代替list partition - 設定音量 ID 不同:
- 資料量:
set id=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 - 系統音量:
set id=c12a7328-f81f-11d2-ba4b-00a0c93ec93b
- 資料量:
支援的 Windows 版本
Red Hat 的 virtio-win 套件提供驅動程式:
Windows Server:
- 2008 R2
- 2012,2012 R2
- 2016、2019、2022、2025
Windows 用戶端:
- 7
- 8, 8.1
- 10
- 11
不支援舊版 (Server 2003, 2008 non-R2, Vista)。
下表為 Windows 的設計決策矩陣
| 情境 | 建議方法 |
|---|---|
| 開發/測試虛擬機 | Sysprep (簡單,可接受身分重設) |
| 生產獨立伺服器 | virt-v2v (保留身份) |
| 網域連接的生產伺服器 | virt-v2v (避免重新加入網域) |
| 基於模板的部署 | Sysprep (適合模板) |
| 具有與硬體 ID 綁定的授權的伺服器 | virt-v2v + 謹慎的許可證審查 |
| 舊 Windows (2003, 2008 non-R2 ) | 不支援遷移 |