您需要將 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. 找到要匯出的虛擬機,在其上右鍵點擊 匯出。

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

您選擇儲存的位置應該有足夠的空間來存放導出的虛擬機。這會有所不同。請記住,您可以為磁碟分配 60 GB,但這並不意味著虛擬機磁碟已擴展到 60 GB。
一旦 Hyper-V 開始導出過程,您將在 Hyper-V 管理器窗口中看到導出的狀態。

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

- 快照文件夾包含虛擬機的快照信息。如果虛擬機沒有快照,則該文件夾可能是空的。在此文件夾中,您將看到 VMCX、VMRS 和 VMGS 文件擴展名。 VMCX 二進制文件包含特定於您導出的虛擬機的配置信息。 VMRS 二進制文件包含虛擬機運行時狀態信息。沒有此文件,虛擬機無法啟動。最後還有 VMGS 文件。不確定此文件用於何用途。如果您知道,請留下評論。
如果您具有 Hyper-V 的先前經驗,您可能已經注意到文件擴展名有所不同。從 Windows Server 2016 開始,Hyper-V 不再使用 XML 文件進行配置信息,而改為使用二進制文件。 了解更多關於這些新擴展名的信息。
如果您的虛擬機器具有多個檢查點,則每個檢查點的虛擬機器將具有多個 VMCX、VMRS 和 VMGS 檔案。

- 虛擬硬碟 文件夾包含所有硬碟映像檔案或 *.vhdx 供虛擬機器使用。 AVHDX 或 自動虛擬硬碟 檔案是用於虛擬機器檢查點的差異磁碟。如果您的虛擬機器具有多個檢查點,您將看到多個 AVHDX 檔案。

- 虛擬機器 文件夾包含用於啟動虛擬機器的 VM 配置檔案。與快照文件夾類似,您還將在這裡看到 VMCX、VMRS 和 VMGS 二進位檔案。

如果所有三個文件夾都存在並包含文件,則您的導出成功。
使用 PowerShell 導出虛擬機器
如果您喜歡命令行或者有很多虛擬機器需要導出,使用 PowerShell 導出虛擬機器也是一個很好的選擇。要使用 PowerShell 導出 Hyper-V,請使用 Export-VM
cmdlet。為此,假設您在您的 Hyper-V 主機上並且您的 VM 是 離線:
1. 打開 PowerShell 控制台。
2. 查詢 Hyper-V 主機以獲取您的 VM 和要導出的 VM 名稱的清單。本教程將導出名為 Alpine Linux 01
的 VM。

Export-VM
command3. 創建一個文件夾來將 VM 導出到。本教程將 VM 導出到 C:\Export_VM。
4. 現在使用Export-VM
cmdlet導出VM,提供虛擬機器的名稱作為Name
參數,要保存到的文件夾的Path
,以及PassThru
參數。
PassThru
參數是可選的,用於返回導出的VM對象。否則,Export-VM
不會返回任何輸出。

當VM正在運行時,
Export-VM
不會自動保存記憶體。如果您想保存VM中運行的記憶體內容,請使用-CaptureLiveState CaptureSavedState
參數與Export-VM
。了解更多有關捕獲記憶體的技術。
5. 現在從Hyper-V中刪除VM。別擔心!您已經將其保存下來了!
使用Hyper-V管理器導入VM
一旦導出VM,災難就發生了,VM消失了。別擔心!您已經將其導出到磁盤上。讓我們將其恢復。要這樣做,假設您再次在您的Hyper-V主機上:
1. 打開Hyper-V管理器。
2. 點擊Hyper-V管理器窗口右側的導入虛擬機器菜單項。將出現導入虛擬機器精靈。點擊下一步。

3. 接下來,輸入您想要導入的虛擬機的匯出路徑,然後點擊下一步。對於本教程,VM 已保存到C:\Export_VM\Alpine Linux 01。
與使用 PowerShell 導入時不同,精靈將為您定位 VM 的 VMCX 文件。

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

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 進行識別。暫時選擇此選項,所以點擊下一步。

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

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

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

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

使用 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 擴展名的文件名,如下所示:
根據匯出的虛擬機器是否有快照,您可能會看到多個 .vmcx 文件。您只需在虛擬機器文件夾中找到一個以啟動虛擬機器的 VMCX 文件。
您可能會看到類似以下示例的輸出:

2. 接下來,使用帶有 Path
參數的 Import-VM
命令碼來指定虛擬機器的配置文件(在上一步中獲取)。
就是這樣!您已使用匯出時虛擬機器的相同 UID 在原位註冊了虛擬機器。

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

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

Hyper-V現在將VM複製到您之前在Hyper-V Manager中導入VM時看到的默認路徑,但會為VM分配新的UID。
下一步
在本指南中,您已經學會了如何使用PowerShell和內置的Hyper-V管理器導出和導入Hyper-V VM。
既然您知道如何導出和導入Hyper-V虛擬機,請嘗試設置自動虛擬機啟用(AVMA)以啟用在Hyper-V上托管的Windows Server虛擬機。