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 的流程:

  1. 在 Windows 虛擬機器中安裝 VirtIO 驅動程式,同時仍託管在 VMware 中:

    1. 從 RHEL 虛擬伺服器執行個體(/usr/share/virtio-win )下載 virtio-win ISO 檔案。
    2. 安裝 ISO,執行 virtio-win-gt-x64.exe,然後選取 virtio-win-guest-tools.exe。
    3. 為作業系統和復原磁碟分割安裝驅動程式。
  2. 執行 sysprep:

    C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown
    
  3. 使用任何一種 遷移方法 進行匯出和遷移,但 VDDK Direct Extraction 除外,該方法僅適用於 vCenter.NET Framework。

  4. 首次在 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 驅動程式注入的流程:

  1. 在 Windows 開機和復原磁碟分割中安裝 VirtIO 驅動程式 (與 sysprep 方法相同)

  2. 徹底關閉 Windows 虛擬機

  3. 請使用任一種 遷移方法,將磁碟匯出/轉移至工作虛擬伺服器執行個體。

  4. 運行 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 開機磁碟區需要)
  5. 如果直接寫入裝置:

    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:

  1. 安裝 virtio-win ISO

  2. 透過 WinRE 識別位置 reagentc /info

  3. 如果位於獨立磁碟區,請暫時掛載

  4. 使用 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 ) 不支援遷移