如何將 VHD 轉換為 VMDK:逐步指南
VMware vSphere 和 Microsoft Hyper-V 是兩大最受歡迎的虛擬化平台。這兩種解決方案各自採用不同的虛擬磁碟檔案格式來儲存虛擬機器。這意味著,當您在 VMware 和 Hyper-V 之間移動虛擬機器時,必須轉換虛擬磁碟檔案格式。例如,您可能需要為了測試目的,在不同虛擬化平台之間遷移虛擬機器。在其他情況下,若您在建立虛擬機器時選用了錯誤的格式,則可能需要變更該格式。
Hyper-V 採用 VHD 和 VHDX 格式來儲存虛擬機器,而 VMware 則採用 VMDK 格式。請閱讀這篇文章,了解如何透過將 VHD 檔案轉換為 VMDK,將虛擬機器從 Hyper-V 遷移至 VMware 環境。
虛擬磁碟格式
VHD 指的是 Connectix Virtual PC 中作為虛擬機器虛擬磁碟格式所推出的磁碟映像格式。後來,微軟收購了 Virtual PC,並繼續開發這款虛擬化產品。隨後,微軟推出了 Hyper-V,作為 Microsoft Virtual PC 的替代方案。VHD 的主要特點包括:
- VHD 檔案的最大支援大小為 2 TB(2^32 × 512 位元組),其中 32 位元代表數量,512 位元組代表磁區大小。
- VirtualBox 也支援 VHD 格式的虛擬磁碟,此格式目前仍在 Microsoft Azure 雲平台上使用。
- 第一代 Hyper-V 虛擬機器僅能使用 VHD 格式的虛擬磁碟。
VHDX 是微軟提供的虛擬磁碟格式新版本,也是 VHD 格式的繼任者。VHDX 格式應用範圍廣泛,包括 Hyper-V 虛擬機器及微軟叢集共用磁碟區(Microsoft Cluster Shared Volumes)的虛擬磁碟。VHDX 是一種半開放式檔案格式,您可以從微軟網站下載該檔案格式的規格說明,藉此開發能與 VHDX 檔案相容的應用程式。VHDX 的主要特點包括:
- 磁碟的最大容量為 64 TB,相較之下,VHD 的上限為 2 TB。
- 支援 4 KB 的磁區。
- 與 VHD 磁碟相比,它在防止因電源中斷而導致的故障方面具有更佳的防護能力。
第 2 代虛擬機器 支援同時使用 VHDX 和 VHD 虛擬磁碟。然而,Azure 虛擬機器僅能使用 VHD 格式的虛擬磁碟。可在 Windows 10 和 Windows Server 2016 的"磁碟管理"視窗中建立 VHDX 虛擬磁碟。此外,由於內建的 VHDX 驅動程式,VHDX 映像檔亦可掛載(附加)為磁碟機,並在最新版本的 Windows 中於"Windows 檔案總管"("我的電腦")中顯示。
VMDK 這是一種由 VMware 虛擬化平台、VirtualBox、QEMU 等軟體所採用的開放式虛擬磁碟映像格式,但 Hyper-V 並未支援此格式。VMDK 映像檔可視為用來儲存資料的容器,類似於實體硬碟,且與各式虛擬化軟體具有高度相容性。VMDK 虛擬磁碟的最大容量已從 2 TB 增加至 62 TB。
VMDK 虛擬磁碟可分為以下類型及變體:整體式、分割式、稀疏式、平面式,以及薄配置與厚配置。Delta VMDK 磁碟是在執行 虛擬機器快照. 若已安裝 VMware Workstation 工作站,即可將 VMDK 檔案映射(掛載)至主機上的指定掛載點。此功能提供高度的可靠性。VMDK 虛擬磁碟支援 4 KB 原生磁區,此功能適用於最新版本的 VMware 產品,並支援 VMFS6 (虛擬機器檔案系統 6)。
在將 VHD 轉換為 VMDK 之前,請先檢查 VHD 的內容
這是個可選步驟,可讓您驗證來源 VHD 或 VHDX 虛擬磁碟的狀態,並檢視其中的檔案。此方法可避免您因混淆而浪費時間轉換錯誤的虛擬磁碟。若您僅想從 VHD 映像檔中提取檔案,本節內容正是您所需的。VHD 檔案可在 Linux 上掛載至某個目錄,亦可在 Windows 上映射至指定的磁碟機代號。
如何在 Linux 中開啟 VHDX 檔案
在 Linux 中,可透過以下方式在終端機中將 VHD 和 VHDX 檔案掛載至指定的目錄(掛載點): libguestfs 工具. 因此,在開始將 VHD 轉換為 VMDK 之前,您可以在 Linux 中檢視 VHD 和 VHDX 檔案的內容。接下來,讓我們來探討如何在 Linux 中檢視 VHD 和 VHDX 虛擬磁碟映像的內容。
安裝所需的套件:
sudo apt-get install libguestfs-tools
建立您要掛載 VHD 或 VHDX 映像檔的目錄,例如: /mnt/vhd/:
sudo mkdir /mnt/vhd/
執行此指令,將 VHD 磁碟映像掛載至指定目錄。我們目前位於所需 VHD 檔案的位置中,並以 root 身分執行此指令:
guestmount --add test-disk.vhd --ro /mnt/vhd/ -m /dev/sda1
在哪裡:
-add – 開啟一個虛擬磁碟。
--ro – 虛擬磁碟是以唯讀模式掛載的。
/mnt/vhd/ 是您要掛載的 VHD 檔案的路徑。
-m /dev/sda1/ 是 VHD 虛擬磁碟上現有分割區的名稱。本範例中使用的 VHD 虛擬磁碟上有一顆 NTFS 分割區。
您可以執行以下指令來查看所有可用的指令: guestmount --help
註: 若要在其他目錄中執行此指令,請指定 VHD 檔案的完整路徑,例如: guestmount --add /media/user1/data/test-disk.vhd --ro /mnt/vhd/ -m /dev/sda1
檢查已掛載的 VHD 映像檔內容:
ls -al /mnt/vhd/

若要卸載虛擬磁碟,請使用以下指令:
guestunmount /mnt/vhd/
同樣地,您可以將 VHDX 檔案掛載至 /mnt/vhd/ 先前建立的目錄,並從已掛載的虛擬磁碟複製內容:
guestmount --add /media/user1/data/WinServer2016.vhdx --ro /mnt/vhd -m /dev/sda2
在哪裡: /dev/sda2 之所以使用它,是因為 /dev/sda1/ 這是 Windows 安裝程式預設所建立的服務分割區。
您可以在 Linux 控制台中查看 VHDX 虛擬磁碟的 Windows 系統分割區(C 槽)內容(請參閱下圖)。

如何在 Windows 中開啟 VHD 檔案
- 開啟 電腦管理 視窗(右鍵點擊 我的電腦 並選擇 管理 (在快顯選單中)。

- 在 電腦管理 視窗,選取 磁碟管理, 然後點擊 動作 > 附加 VHD.

- 在彈出視窗中,指定您的 VHD 或 VHDX 檔案的路徑。勾選 唯讀 若不希望將資料寫入虛擬磁碟,請勾選此核取方塊。此選項亦可保護儲存於虛擬磁碟上的資料,避免因意外而損毀。

- 該磁碟現已掛載,並顯示在 磁碟管理 視窗中以及在 Windows 檔案總管中(該磁碟機 X: (在此情況下)。
註: Windows 僅能識別採用支援檔案系統的分區:NTFS、FAT32、exFAT 及 ReFS。若您的虛擬磁碟包含採用 ext3、ext4 及其他檔案系統的 Linux 分區,則在未使用第三方工具的情況下,您將無法檢視已掛載至 Windows 系統的 VHD 或 VHDX 檔案內容。
若要從 Windows 系統中卸載 VHD 或 VHDX 虛擬磁碟,請開啟 Windows 檔案總管,右鍵點擊分配給該虛擬磁碟的磁碟機代號,然後在快顯選單中點擊 彈出.

現在,在檢查過 VHD(VHDX)虛擬磁碟的內容並確認這是正確的磁碟後,您就可以繼續將其轉換為 VMDK 格式。有兩種非常經濟實惠的方法可以將 VHD 轉換為 VMDK——使用 qemu-img 並使用 VBoxManage. 這兩種解決方案均可免費使用,詳情說明如下。
如何使用 qemu-img 將 VHD 轉換為 VMDK
QEMU 是一個開源的機器模擬與虛擬化平台。 Qemu-img 是 QEMU 軟體套件中的一項實用工具,可用於將虛擬磁碟從一種格式轉換為另一種格式。 Qemu-img 可用於將 VHD 轉換為 VMDK,而使用此工具正是我們將要討論的第一種方法。 Qemu-img 可在 Windows 和 Linux 作業系統上執行。
在 Linux 中使用 qemu-img
本範例中使用 Ubuntu Linux 來執行 qemu-img.
- 首先,請安裝 qemu-img 來自線上軟體儲存庫:
sudo apt-get install qemu-utils - 前往儲存虛擬磁碟映像檔的目錄(在此範例中,VHD 和 VHDX 虛擬磁碟檔案儲存於 /media/user1/data/):
cd /media/user1/data/
檢查 VHDX 檔案
- 執行後檢視 VHD 映像檔資訊 sudo su 要取得 root 權限:
qemu-img info test-disk.vhd

同樣地,您可以查看有關 VHDX 虛擬磁碟的資訊:
qemu-img info /media/user1/data/WinServer2016.vhdx

在 Linux 中將 VHD 轉換為 VMDK
- 若要以 …… 將 VHD 轉換為 VMDK, qemu-img 在 Linux 中,請以 root 身分執行以下指令:
qemu-img convert /media/user1/data/WinServer2016.vhdx -O vmdk /media/user1/data/WinServer2016qemu.vmdk -p在哪裡:
-O– 定義輸出檔案格式-p– 顯示進度條請等待轉換程序完成。
在 Windows 中使用 qemu-img
- 下載 qemu-img 來自官方網站(可下載 32 位元和 64 位元的安裝程式)。在本例中, qemu-img-win-x64-2_3_0 已使用.
- 將下載的壓縮檔解壓縮,例如解壓縮至 C:Programsqemu-img.
- 啟動 Windows 命令提示字元 (CMD) – 按下 Windows+R 要開啟"Run” 方框中。輸入 “cmd將""輸入至方框中,然後按下 Ctrl+Shift+Enter 來 執行 該 指令 作為一個 管理員:
cd C:Programsqemu-img的指令 qemu-img 在 Linux 和 Windows 中的表現完全相同。
在 Windows 中將 VHD 轉換為 VMDK
以系統管理員身分執行 CMD,並前往該目錄,該目錄位於 qemu-img 已安裝。
- 檢視虛擬磁碟資訊:
qemu-img.exe info c:VirtualHyper-Vtest-disk.vhd - 將 VHD 磁碟映像檔轉換為 VMDK 格式:
qemu-img.exe convert -p c:VirtualHyper-Vtest-disk.vhd -O vmdk c:VirtualHyper-Vtest-disk.vmdk在哪裡:
-p– 顯示進度-O– 輸出檔案請等待轉換程序完成。

如何使用 VBoxManage 將 VHD 轉換為 VMDK
VBoxManage 這是用於管理 VirtualBox 虛擬化平台及虛擬機器的命令列介面(CLI)。 VBoxManage 這是一款多平台工具,當您 安裝 VirtualBox (如您所知,VirtualBox 是一款跨平台的虛擬化解決方案)。其中之一是 VBoxManage其最吸引人的特點之一,就是能夠轉換多種虛擬磁碟格式。您可以使用 VBoxManage.
若您使用 Windows 作為主機作業系統,請以系統管理員身分執行 CMD,並前往 VirtualBox 的安裝目錄執行 VBoxManage. 在本範例中,VirtualBox 安裝於預設目錄中。
cd C:Program FilesOracleVirtualBox
您可以將 VirtualBox 的安裝路徑新增至 路徑 環境變數,以避免每次要執行時都必須手動導航至 VirtualBox 的安裝目錄 VBoxManage.
請依照以下步驟執行命令,將 Hyper-V VHD 轉換為 VMware VMDK:
VBoxManage clonehd --format vmdk C:virtualHyper-VWinServer2016.vhdx С:virtualHyper-VWinServer2016vbox.vmdk
語法很簡單——您只需設定目標虛擬磁碟格式(VMDK),並定義來源 VHDX 檔案與目的地 VMDK 檔案名稱。
請等待轉換程序完成。

若您在安裝了 VirtualBox 的電腦上使用 Linux,請使用相同的指令(但請注意 Linux 分區與目錄的結構)。
使用轉換後的虛擬磁碟建立 VMware 虛擬機器
將 VHD 轉換為 VMDK,即可將 Hyper-V 虛擬機器轉換為 VMware 虛擬機器。您需要將轉換後的虛擬磁碟匯入手動建立的 VMware 虛擬機器中,才能完成此流程。此方法適用於在 VMware Workstation 和 VMware ESXi 上運行的虛擬機器。本節將說明如何將 Hyper-V 轉換為 VMware 的其餘細節。
VMware 工作站
若您想在 VMware 工作站中使用已從 VHD(VHDX)格式轉換為 VMDK 格式的虛擬磁碟來建立虛擬機器,只需建立一台新的虛擬機器(或開啟現有的虛擬機器,若您想將轉換後的虛擬磁碟新增為額外的虛擬磁碟),並選擇要使用現有的虛擬磁碟即可。
讓我們在 VMware 工作站中建立一台新的虛擬機器。按下 檔案 > 建立新虛擬機器.
有關如何建立新的 VMware 工作站虛擬機器的詳細說明,請參閱這篇部落格文章: VMware 家庭實驗室. 在今天這篇部落格文章的這一節中,重點在於將轉換後的 VHD 虛擬磁碟匯入 VMware 工作站虛擬機器所需的步驟。因此,您應特別注意以下步驟:
- 選擇 “"我稍後會安裝作業系統," 並選擇已安裝於來源 Hyper-V 虛擬機器上的客體作業系統(OS)版本,該虛擬機器的虛擬磁碟您已進行轉換(Windows Server 2016 (在此情況下)。如果您使用的是較舊版本的 VMware Workstation,請選擇 Windows 10 作為客體作業系統的版本。

虛擬機器名稱是 Win2016converted 在我們的範例中,新虛擬機器的檔案儲存於 C:VirtualWin2016converted.
- 選擇 “使用現有的虛擬磁碟” 於 選擇磁碟 步驟。

- 請指定現有 VMDK 檔案的路徑,或瀏覽選擇該檔案。在此情況下,VMDK 檔案的路徑為:
C:VirtualHyper-VWinServer2016qemu2.vmdk

- 如果出現對話方塊,並建議將現有的虛擬磁碟轉換為較新格式,則由您自行決定。如果您不打算將此虛擬磁碟用於較舊版本的虛擬機器(這些虛擬機器採用較舊的虛擬硬體),則應將虛擬磁碟轉換為較新格式。
- 選擇 BIOS 若您的來源 Hyper-V 虛擬機器已設定為使用 BIOS,請在虛擬機器選項中將韌體類型設為 BIOS。否則,您已將從 Hyper-V 格式轉換為 VMware 格式的虛擬磁碟掛載至該 VMware 虛擬機器時,該虛擬機器將無法啟動。建立虛擬機器後,您可以透過前往以下位置來檢查此設定: VM > 設定,選擇 選項 tab > 進階.

現在您的虛擬機器應該可以正常開機了。待客體作業系統開機完成後,請安裝 VMware 工具.

VMware ESXi
您也可以將 VHD 轉換為 VMDK,並將轉換後的虛擬磁碟匯入至運行於 ESXi 主機上的 VMware 虛擬機器中。然而,VMware 工作站與 VMware ESXi 所使用的 VMware 虛擬磁碟格式並不相同。VMware 工作站格式的虛擬磁碟會將磁碟描述符內建於單一 VMDK 檔案. 一個 ESXi 格式的虛擬磁碟由兩個獨立的檔案組成——一個資料檔案(.vmdk) 以及一個磁碟描述檔 (-flat.vmdk). 若要使用您已從 Hyper-V 格式轉換而來的虛擬磁碟,請使用 qemu-img 或者,若要對在 ESXi 上運行的虛擬機器使用 VBoxManage,您必須將該虛擬磁碟從工作站格式轉換為 ESXi 格式。否則,您將會收到以下錯誤訊息:"不支援或無效的磁碟類型 2”.

讓我們來了解如何在 ESXi 上運行的虛擬機器中,使用從 VHD 格式轉換而來的虛擬磁碟。
將 VMDK 轉換為 ESXi 格式
- 將轉換後的 VMDK 檔案上傳至連接到 ESXi 主機的資料存放區。您可以使用 SCP/SFTP 客戶端、VMware Host Client 的網頁介面或 VMware vSphere Client 來上傳轉換後的虛擬磁碟 vmdk 將檔案儲存至 ESXi 資料存放區。
在我們的範例中,該 WinServer2016qemu.vmdk 檔案已上傳至 SSD1 資料存放區,該資料存放區已連接至 IP 位址為 10.10.10.74 的 ESXi 主機。

- 請確認您的 ESXi 主機已啟用 SSH 存取功能(管理 > 服務 > TSM-SSH).

- 請使用 SSH 客戶端(例如 PuTTY)透過 SSH 連線至您的 ESXi 主機。
- 前往儲存由 Hyper-V VHD 格式轉換而來的 VMDK 虛擬磁碟檔案的目錄(在此範例中,該目錄為 vmdk 檔案儲存於 /vmfs/volumes/SSD1/converted/):
cd /vmfs/volumes/SSD1/converted/ - 使用 vmkfstools 將工作站格式的虛擬磁碟轉換為 ESXi 格式的虛擬磁碟。在本範例中,一個 薄配置 ESXi 格式的虛擬磁碟即為目標虛擬磁碟類型。請以 root 身分執行指令。
vmkfstools -i WinServer2016qemu.vmdk WinServer2016thin.vmdk -d thin
如螢幕截圖所示,將 VMDK 從工作站格式轉換為 ESXi 格式後, vmkfstools 已成功完成,並已建立兩個新檔案:
WinServer2016thin-flat.vmdk
WinServer2016thin.vmdk

將 VMDK 磁碟匯入 ESXi 上的虛擬機器
開啟 VMware Host Client(建議使用 VMware vSphere Client 如果已部署 vCenter,但在幾乎所有使用情境下,您都可以使用 VMware Host Client,包括以下情境: ESXi 免費版本)。此工作流程同樣適用於 VMware vSphere/ESXi 6.5 至 9.0 版本。
在 VMware Host Client 的網頁介面中,請選取 虛擬機器 並點擊 建立/註冊虛擬機器.

新的虛擬機器精靈已開啟。
- 選擇建立類型. 點擊 建立 一台新的虛擬機器。點擊 下一個 在每個步驟中繼續。

- 請選擇名稱和來賓作業系統。 請選擇虛擬機器版本、客體作業系統家族及客體作業系統版本。在此範例中,虛擬機器的名稱是 Win2016converted. 此虛擬機器相容於 ESXi 6.5 或更新版本。客體作業系統家族為 Windows,客體作業系統版本為 Microsoft Windows 2016(64 位元)。

- 選擇儲存位置。 請選擇要儲存虛擬機器檔案的資料存放區。本範例中使用的資料存放區名稱為 SSD2。

- 自訂設定。 在我們的情況下,這一步是最重要的。請刪除隨新虛擬機器預設建立的虛擬磁碟。接著,點擊 新增硬碟 > 現有硬碟.

在資料存放區瀏覽器中,選取您已從 VHD 轉換為 VMDK,並從 VMware 工作站格式轉換為 VMware ESXi 格式(精簡配置)的虛擬磁碟。您可能還記得,轉換後的虛擬磁碟由兩個檔案組成(.vmdk 以及 -flat.vmdk),但在資料存放區瀏覽器中,僅有一個 vmdk 檔案會顯示出來。請放心——這是 VMware Host Client 的特點之一。兩個已複製到 ESXi 資料存放區的檔案均已存在。您可以透過 ESXi 主控台或透過 SSH 連線來檢查這些檔案。在這個範例中,您可以看到虛擬磁碟的當前大小為 9.11 GB,但此磁碟的最大配置大小為 30 GB。

新增轉換後的 VMDK 虛擬磁碟後,您會看到"非活躍"欄位中顯示 30 GB 虛擬磁碟的 9 GB 大小(即當前大小)。

- 準備完成。 在此步驟中,您可以檢查您的設定。如果一切正確,請點擊 完成 以建立一台新的虛擬機器。

現在,您可以啟動虛擬機器(右鍵點擊虛擬機器名稱,然後在快顯選單中選擇 電源 > 開啟電源).

包含已轉換虛擬磁碟的虛擬機器已順利啟動,且網路運作正常。現在您可以在客體作業系統上安裝 VMware Tools。

結論
若您想將 Hyper-V 虛擬機器轉換為 VMware,可以先將 VHD 轉換為 VMDK,然後將轉換後的 VMDK 虛擬磁碟掛載至新的 VMware 虛擬機器上。 Qemu-img 可用作 VHD 轉 VMDK 轉換器,並且 VBoxManage 可作為替代方案。這兩種解決方案均為免費且跨平台,讓您能在不同作業系統上將 Hyper-V VHD 轉換為 VMware VMDK。請注意,若您想使用透過 qemu-img 或 VBoxManage 對於 ESXi 虛擬機器,您應使用 將 VMDK 虛擬磁碟從工作站格式轉換為 ESXi 格式 vmkfstools 在 ESXi 命令列中。
若您想使用半自動化或全自動化的工具,將整個 Hyper-V 虛擬機器轉換為 VMware 虛擬機器,可以使用免費的 VMware vCenter Converter 獨立版. 無論您使用哪種虛擬化平台,資料保護都至關重要。 NAKIVO Backup & Replication 提供"跨平台還原"特點,讓您能夠將虛擬機器備份中的 VHD 磁碟轉換為 VMDK 磁碟,並將 Hyper-V 虛擬機器還原至 VMware 虛擬化平台。