導入和導出Hyper-V VMs:靠譜的方法

您需要將 Hyper-V VMs 匯出並從一台主機轉移到另一台主機嗎?將虛擬機從開發工作站匯出到製作環境中的 Hyper-V 主機又如何?如果是的話,您來对地方了!

在本文中,您將學習如何使用 Hyper-V 管理員和 PowerShell 匯出和導入虛擬機。準備好了嗎?開始吧!

先決條件

本文將作為教程。如果您打算一步一步跟著操作,您將需要以下設備:

  • PowerShell 7 或 Windows PowerShell 5.1 – 本教程將聚焦於 PowerShell 7,但命令也適用於 Windows PowerShell 5.1。
  • A Windows Server with Hyper-V enabled – This tutorial is based on the insider preview released March 2021, but any Windows Server from 2012R2 onward will suffice.
  • A virtual machine guest – This tutorial is using an Alpine Linux guest because it’s light on resources. You can use any guest Operating System you like.
  • A local Windows user account in the local administrators group on the Hyper-V host.

匯出 Hyper-V VMs 的步驟

如果您不喜歡命令行,或者只需將單個 VM 保存到磁盤,Hyper-V 管理員是一個堅實的選擇。假設您在您的 Hyper-V 主機上並且有一個虛擬機正在運行:

1. 在 Windows 搜索菜單中,輸入“hyper”。Hyper-V 管理器控制台應該會顯示出來。如果是這樣,請點擊打開。

2. 找到要匯出的虛擬機,在其上右鍵點擊 匯出

Exporting VM using Hyper-V Manager The VM can be offline or running prior to exporting.

3. 接下來,選擇一個文件夾來保存虛擬機和配置,然後點擊 匯出

Export Virtual Machine Dialog.

您選擇儲存的位置應該有足夠的空間來存放導出的虛擬機。這會有所不同。請記住,您可以為磁碟分配 60 GB,但這並不意味著虛擬機磁碟已擴展到 60 GB。

一旦 Hyper-V 開始導出過程,您將在 Hyper-V 管理器窗口中看到導出的狀態。

Export Status in Hyper-V Manager

4. 現在,確認所有所需文件都存在。您應該會看到三個子文件夾。這些子文件夾包含啟動導出的虛擬機所需的所有文件;快照、虛擬硬碟和虛擬機。

Exported VM example
  • 快照文件夾包含虛擬機的快照信息。如果虛擬機沒有快照,則該文件夾可能是空的。在此文件夾中,您將看到 VMCX、VMRS 和 VMGS 文件擴展名。 VMCX 二進制文件包含特定於您導出的虛擬機的配置信息。 VMRS 二進制文件包含虛擬機運行時狀態信息。沒有此文件,虛擬機無法啟動。最後還有 VMGS 文件。不確定此文件用於何用途。如果您知道,請留下評論。

如果您具有 Hyper-V 的先前經驗,您可能已經注意到文件擴展名有所不同。從 Windows Server 2016 開始,Hyper-V 不再使用 XML 文件進行配置信息,而改為使用二進制文件。 了解更多關於這些新擴展名的信息。

如果您的虛擬機器具有多個檢查點,則每個檢查點的虛擬機器將具有多個 VMCX、VMRS 和 VMGS 檔案。

Snapshots folder example
  • 虛擬硬碟 文件夾包含所有硬碟映像檔案或 *.vhdx 供虛擬機器使用。 AVHDX自動虛擬硬碟 檔案是用於虛擬機器檢查點的差異磁碟。如果您的虛擬機器具有多個檢查點,您將看到多個 AVHDX 檔案。
Virtual Hard Disks example
  • 虛擬機器 文件夾包含用於啟動虛擬機器的 VM 配置檔案。與快照文件夾類似,您還將在這裡看到 VMCX、VMRS 和 VMGS 二進位檔案。
Virtual Machines configuration files example

如果所有三個文件夾都存在並包含文件,則您的導出成功。

使用 PowerShell 導出虛擬機器

如果您喜歡命令行或者有很多虛擬機器需要導出,使用 PowerShell 導出虛擬機器也是一個很好的選擇。要使用 PowerShell 導出 Hyper-V,請使用 Export-VM cmdlet。為此,假設您在您的 Hyper-V 主機上並且您的 VM 是 離線

1. 打開 PowerShell 控制台。

2. 查詢 Hyper-V 主機以獲取您的 VM 和要導出的 VM 名稱的清單。本教程將導出名為 Alpine Linux 01 的 VM。

Get-VM
Virtual machine name to be used in Export-VM command

3. 創建一個文件夾來將 VM 導出到。本教程將 VM 導出到 C:\Export_VM。

New-Item -ItemType Directory -Name 'Exported_VM\' -Path 'C:\'

4. 現在使用Export-VM cmdlet導出VM,提供虛擬機器的名稱作為Name參數,要保存到的文件夾的Path,以及PassThru參數。

PassThru參數是可選的,用於返回導出的VM對象。否則,Export-VM不會返回任何輸出。

Export-VM -Name 'Alpine Linux 01' -Path 'C:\Exported_VM\' -Passthru
Successful export of an offline virtual machine.

當VM正在運行時,Export-VM不會自動保存記憶體。如果您想保存VM中運行的記憶體內容,請使用-CaptureLiveState CaptureSavedState參數與Export-VM了解更多有關捕獲記憶體的技術

5. 現在從Hyper-V中刪除VM。別擔心!您已經將其保存下來了!

Remove-VM -Name 'Alpine Linux 01'

使用Hyper-V管理器導入VM

一旦導出VM,災難就發生了,VM消失了。別擔心!您已經將其導出到磁盤上。讓我們將其恢復。要這樣做,假設您再次在您的Hyper-V主機上:

1. 打開Hyper-V管理器。

2. 點擊Hyper-V管理器窗口右側的導入虛擬機器菜單項。將出現導入虛擬機器精靈。點擊下一步

Import Virtual Machine Wizard

3. 接下來,輸入您想要導入的虛擬機的匯出路徑,然後點擊下一步。對於本教程,VM 已保存到C:\Export_VM\Alpine Linux 01

與使用 PowerShell 導入時不同,精靈將為您定位 VM 的 VMCX 文件。

Import Virtual Machine Wizard

4. 一旦 Hyper-V 發現文件夾內的 VM 配置文件(在此示例中為C:\Exported_VM\Alpine Linux 01\Virtual Machines\),Hyper-V 將要求您選擇要導入的虛擬機。選擇要導入的 VM,然後點擊下一步

Import Virtual Machine Wizard

5. 接下來,選擇要執行的導入類型。首先,讓我們更詳細地探討選項。

當您選擇選項“在原地註冊虛擬機(使用現有唯一 ID)”時,您假設導出的 VM 文件位於其最終位置,這意味著您不將 VM 移動到新文件夾。導出的 VM 文件將成為虛擬機的運行狀態。UID 不會更改。

UID 是 Hyper-V 用於識別虛擬機的標識。如果 Hyper-V 檢測到當前已註冊相同的 UID,則會收到錯誤消息。

當您還原虛擬機時,您可以選擇位置或使用匯出虛擬機文件的默認 Hyper-V 位置進行複製。

複製虛擬機時,類似於還原已匯出的 VM,但使用新的唯一 ID(UID)。新的 UID 使得可以將相同的虛擬機多次重新部署到相同或不同的 Hyper-V 主機上。

為了示範,讓我們選擇導入類型複製虛擬機。複製虛擬機將生成一個新的唯一 ID(UID)。每個 Hyper-V 虛擬機都通過 UID 進行識別。暫時選擇此選項,所以點擊下一步

Import Virtual Machine Wizard

6. 由於您選擇了複製選項,您可以更改存儲虛擬機文件的位置。點擊下一步以接受本教程的默認值。

Import Virtual Machine Wizard

7. 最後,選擇一個被稱為存儲文件夾的虛擬機位置。存儲文件夾是 VHDX 和 AVHDX 文件所在的位置。對於本教程,接受默認位置,並點擊下一步

Import Virtual Machine Wizard

8. 審核摘要頁面,當您準備好時,點擊完成開始導入。

Completing Import Virtual Machine Wizard

當 Hyper-V 完成導入後,它會返回到 Hyper-V 管理器窗口,您現在會看到導入的虛擬機,如下所示。

Imported VM

使用 PowerShell 導入虛擬機

如果通過 Hyper-V 管理器導入虛擬機不是您的菜,沒問題。使用 PowerShell!要使用 PowerShell 導入虛擬機,您將使用Import-VM cmdlet。考慮以下情景:

您已匯出一個虛擬機器,它位於 C:\Exported_VM\,也許它被意外刪除了,或者可能需要在不同的 Hyper-V 主機上使用?由於已經匯出,它本質上已被備份,可以輕鬆地導入,因此恢復虛擬機器。

如果 Export-VM 將虛擬機器保存到磁盤,Import-VM 命令碼則相反;它從磁盤讀取虛擬機器並將其導入 Hyper-V。

1. 假設您已經打開了 PowerShell 控制台,並且位於匯出虛擬機器的目錄中 (C:\Exported_VM)。首先,執行帶有 Recurse 選項的 Get-ChildItem 命令碼,以列出所有文件並注意帶有 *.vmcx 擴展名的文件名,如下所示:

Get-ChildItem -Recurse | Where-Object -Property Name -CLike *.vmcx

根據匯出的虛擬機器是否有快照,您可能會看到多個 .vmcx 文件。您只需在虛擬機器文件夾中找到一個以啟動虛擬機器的 VMCX 文件。

您可能會看到類似以下示例的輸出:

Exported VM UID example – VM configuration file (vmcx)

2. 接下來,使用帶有 Path 參數的 Import-VM 命令碼來指定虛擬機器的配置文件(在上一步中獲取)。

Import-VM -Path '.\Alpine Linux 01\Virtual Machines\.vmcx'

就是這樣!您已使用匯出時虛擬機器的相同 UID 在原位註冊了虛擬機器。

Importing a VM in place

3. 現在,驗證 UID 是否與匯出虛擬機器時的 .vmcx 文件名相同。您可以使用以下代碼通過查詢 WMI 來執行此操作:

(Get-CimInstance -Namespace Root\Virtualization\V2 -ClassName Msvm_VirtualSystemSettingData -Filter "ElementName = 'Alpine Linux 01'").InstanceID
UID Retained

應該看到與以下示例相似的輸出:

上面的示例是從VM配置文件直接導入的,VM保留了原始UID。在生產環境中,您可能希望生成新的UID,以防止將舊VM錯認為新VM。這就是Copy參數發揮作用的地方。使用Copy參數導入虛擬機將文件從原始位置(C:\Exported_VM\)複製到Hyper-V伺服器配置的路徑。當與GenerateNewId一起使用時,可以在同一Hyper-V伺服器上多次導入VM,並使用新的唯一標識符(UID)。

Import-VM -Path '.\Alpine Linux 01\Virtual Machines\.vmcx' -Copy -GenerateNewId

這次,導入的VM不包含與導出時相同的UID。您可以在下面的截圖中看到舊的和新的UID:

Showing previous UID prior to import vs. new UID created with Copy and GenerateNewID parameters.

Hyper-V現在將VM複製到您之前在Hyper-V Manager中導入VM時看到的默認路徑,但會為VM分配新的UID。

下一步

在本指南中,您已經學會了如何使用PowerShell和內置的Hyper-V管理器導出和導入Hyper-V VM。

既然您知道如何導出和導入Hyper-V虛擬機,請嘗試設置自動虛擬機啟用(AVMA)以啟用在Hyper-V上托管的Windows Server虛擬機。

Source:
https://adamtheautomator.com/export-hyper-v-vm/