如何開啟、掛載 VMDK 檔案並從中提取資料

VMDK 檔案用於儲存虛擬機器硬碟的內容。若虛擬機器因作業系統損毀、更新失敗、惡意軟體或設定錯誤而無法啟動,您仍可能能夠存取其虛擬硬碟中的資料。</p>
<p> 本指南說明如何使用 VMware Tools 以及適用於 Windows 和 Linux 的替代方法,來開啟、掛載 VMDK 檔案並從中擷取資料。透過這些方法,您無需啟動虛擬機器即可存取檔案。 請注意,本文所述的方法僅適用於未加密或未嚴重損毀的 VMDK 檔案。

NAKIVO for VMware vSphere 備份

NAKIVO for VMware vSphere 備份

為 VMware vSphere 虛擬機器提供全面資料保護及快速還原選項。支援本地、異地及雲端的安全備份目標。具備防勒索軟體功能。

什麼是 VMDK 檔案?

VMDK(虛擬機器磁碟)是由 VMware 開發的一種開放式虛擬磁碟檔案格式。此格式的檔案使用 .vmdk 副檔名,並受 VMware 與 VirtualBox支援。

在 VMware ESXi 伺服器上,VMDK 通常以兩個獨立檔案的形式儲存於資料存放區中:一個是較小的虛擬磁碟描述檔,另一個則是包含原始磁碟資料的虛擬磁碟區段檔。 描述檔通常遵循命名模式 diskname.vmdk,而包含實際資料的區段檔則命名為 diskname-flat.vmdk

在 VMware 工作站中,虛擬磁碟通常以單一 diskname.vmdk 檔案(整體式稀疏格式)儲存。在此情況下,描述資訊會嵌入至儲存磁碟資料的同一檔案中。虛擬磁碟描述檔定義了磁碟的結構、幾何參數、虛擬硬體版本以及唯一識別碼。

虛擬磁碟描述符檔案

虛擬磁碟描述符以純文字形式儲存。在下方的螢幕截圖中,左側顯示的是 ESXi 格式的描述符檔案(一個 .vmdk 檔案,可使用任何文字編輯器開啟)。右側則可看到嵌入於單一 .vmdk 檔案中的描述符資料,該檔案是以 VMware 工作站格式建立的。 在此情況下,該檔案是在十六進位編輯器中開啟的。

Comparing ESXi and Workstation descriptor files

如圖所示,嵌入在單一工作站格式 .vmdk 檔案中的描述符資料,始於 0x200 偏移量(位元組位址)。將 0x200 從十六進位轉換為十進位後,結果為:0x200(十六進位)= 512(十進位)。 這表示若要從 VMDK 檔案中擷取嵌入式描述符,必須複製從第 512 位元組開始的那段資料。

注意: 您可參閱關於轉換的部落格文章 VMware 虛擬機器轉為 Hyper-V 虛擬機器 以取得有關擷取、編輯及匯入嵌入式磁碟描述符的詳細說明。

虛擬磁碟資料檔案

在下圖的螢幕截圖中,有兩個虛擬磁碟檔案在十六進位編輯器中開啟。 這兩顆磁碟上皆安裝了相同的作業系統,且第一個分割區是使用 Windows 內建的磁碟工具建立並格式化的。在螢幕截圖的左側,顯示了一個 -flat.vmdk 檔案(ESXi 格式)。在此檔案中,原始磁碟資料從偏移量 0x00000000 開始。

右側則顯示了一個 VMware 工作站格式的 VMDK 檔案。 在此情況下,相同的磁碟資料並非從檔案開頭開始,而是從偏移量 0x00150000 開始,這是因為描述符和元資料嵌入在實際磁碟內容之前。

Storing data in flat vmdk files and sparse monolithic vmdk files

在繼續開啟並掛載 VMDK 檔案之前,請務必備份您的資料,以防磁碟可能受損。

透過啟動虛擬機器開啟 VMDK 檔案的 2 種方法

首先介紹透過啟動虛擬機器來開啟 VMDK 檔案的方法。這些方法操作簡單且廣泛適用。不過,它們需要主機系統上已安裝虛擬化平台(VMware ESXi、VMware 工作站、VMware Player 或 Oracle VirtualBox)。

方法 1:即使虛擬機器上的作業系統已無法運作,仍可使用 Live DVD

此方法假設虛擬機器仍能從外部媒體開機。您無需使用實體 DVD,而是將 ISO 映像檔掛載至虛擬機器的虛擬 DVD 光碟機,並從中開機。

從 Live DVD 啟動作業系統後,您可以掛載 VMDK 檔案的分區,並將資料複製到連接至虛擬機器的 USB 隨身碟、主機,或透過網路複製到另一台系統。某些 Live DVD 發行版會自動掛載分區。

此方法類似於當安裝的作業系統無法開機時,從實體電腦中恢復檔案。它可用於從 VMware ESXi 及 VMware Workstation/Player 上的 VMDK 檔案中提取資料。

請確保 Live 作業系統支援虛擬磁碟內使用的檔案系統。例如,Windows 並未原生支援 EXT3、EXT4 或 ReiserFS 等 Linux 檔案系統。然而,基於 Linux 的 Live 發行版通常支援 NTFS 和 FAT32 等 Windows 檔案系統,因此在從無法啟動的 Windows 虛擬機器中恢復資料時,這類發行版是實用的選擇。

範例:在 ESXi 上開啟 VMDK 檔案

請考慮以下情境:一台在 ESXi 主機 上執行 Windows Server 2016 的虛擬機器無法開機,但您需要擷取儲存於其 VMDK 檔案中的檔案。該虛擬磁碟包含兩個 NTFS 分割區:一個系統(開機)分割區以及主要 C: 磁碟機。 在此範例中,將官方的 Ubuntu 18 安裝 ISO 作為 Live DVD 使用,以存取虛擬磁碟並複製所需資料。

注意: 此方法同樣適用於較新版本的產品,包括 VMware Workstation 17、ESXi 9.0、Windows Server 2025 以及 Ubuntu Linux 24.04。 雖然具體的介面元素可能略有不同,但底層的工作流程保持不變。

  1. 將 ISO 映像檔上傳至可由執行該虛擬機的主機所存取的資料存放區。
  2. 開啟 VMware vSphere Client,前往”主機與叢集”,選取您的虛擬機,然後按一下”編輯設定”。Editing VM settings
  3. 在虛擬機設定視窗中,前往”CD/DVD 光碟機”選項。若資料存放區中已有必要的 ISO 檔案,請選取”資料存放區 ISO 檔案”。 接著,按一下”瀏覽”並選取適當的 ISO 檔案。在此使用情境中,檔案名為 ubuntu-18.04.1-desktop-amd64.isoInserting a bootable ISO image into a virtual optical drive
  4. 啟動虛擬機器,從 ISO 映像檔開機,並選取”不安裝 Ubuntu 試用版”。當 Ubuntu 從 Live DVD 媒體開機完成後,開啟控制台(Terminal)。
  5. 取得 root 權限:
    sudo -i
  6. 列出可用的硬碟裝置:
    ls -al /dev/sd*

    共有兩個分割區—— /dev/sda1/dev/sda2

  7. 為每個分割區建立用作掛載點的目錄:
    mkdir /mnt/win-disk1
    mkdir /mnt/win-disk2
  8. 將虛擬磁碟的分區掛載至相應目錄:
    mount /dev/sda1 /mnt/win-disk1/
    mount /dev/sda2 /mnt/win-disk2/
  9. 接著列出已掛載分區中的檔案與目錄:
    ls -al /mnt/win-disk2/
    ls -al /mnt/win-disk1/

    Accessing files stored inside the VMDK file

    如上圖所示,掛載至 /mnt/win-disk2 的分區即是 Windows 系統中用作 C: 磁碟機的分區。

    您可以將 USB 硬碟 (HDD) 連接至 ESXi 主機,並透過 USB 直通功能將其連接到虛擬機器,藉此從已掛載的 VMDK 複製所需檔案。 此外,您也可以使用 SMB (CIFS) 共用資料夾,透過網路傳輸檔案。

    在此範例中,資料將複製到由 192.168.17.125 主機提供的 SMB 共用資料夾。共用路徑為 \192.168.17.125share,且 user10 具備寫入權限。

  10. 現在讓我們在從 Live DVD 載入的 Linux 系統上掛載 SMB (CIFS) 共用資料夾。首先,建立一個用作掛載點的目錄。
    mkdir /mnt/smb-share
  11. 接著將 SMB (CIFS) 共用資料夾掛載至此目錄:
    mount -t cifs -o user=user10 //192.168.17.125/share /mnt/smb-share
  12. 輸入使用者的密碼。
  13. 現在,您的 Linux 系統已連接到 SMB 共用資料夾,您可以透過網路將 VMDK 檔案中儲存的必要內容複製到 SMB 共用資料夾中。

    讓我們前往已掛載 SMB 共用資料夾的目錄,並將 bootmgr 檔案從虛擬磁碟的已掛載分割區(位於 ESXi 資料存放區中的 VMDK 檔案)複製到當前目錄(SMB 共用資料夾)。

    cd /mnt/smb-share
    cp /mnt/win-disk-2/bootmgr

    Copying files from the mounted VMDK file

  14. 請確認已成功複製所需檔案,並檢查您的 SMB 共用資料夾內容。
    ls -al /mnt/smb-share

如 如上圖所示,bootmgr 檔案已成功複製。這展示了當虛擬機器上的作業系統無法開機時,從 VMDK 檔案複製資料的第一種方法。此方法同樣適用於 VMware Player 和 VMware 工作站。

方法 2:將 VMDK 檔案掛載為虛擬磁碟至運作正常的虛擬機器(ESXi/工作站/Player)

此方法與前一種類似,但並非從外部媒體開機,而是將 VMDK 檔案掛載至具備正常運作作業系統的現有虛擬機器上。該 VMDK 檔案可作為額外的虛擬磁碟,新增至運行於 VMware ESXi、VMware 工作站或 VMware Player 上的虛擬機器中。

若需在 VMware Workstation 或 Player 中開啟來自 ESXi 虛擬機器的 VMDK 檔案,請將描述檔和延伸檔(vmdk 及 -flat.vmdk)一併複製到 Workstation 或 Player 安裝主機可存取的本地磁碟上。若來源虛擬機器採用 快照,請務必在複製父磁碟檔之外,一併複製相關的增量(差異)VMDK 檔案。

以下範例示範此方法:

  • 範例 1:將某台虛擬機器的 VMDK 檔案掛載至同一台 ESXi 主機上的另一台虛擬機器,以開啟該檔案。
  • 範例 2:將 ESXi 虛擬機器的 VMDK 檔案掛載至在 VMware 工作站中運行的虛擬機器,以從中擷取資料。

請確保正常運作的虛擬機器的作業系統支援所掛載 VMDK 檔案中使用的檔案系統。否則,可能無法存取該分區。

範例 1:將虛擬磁碟掛載至在 ESXi 上運行的虛擬機器

  1. 關閉您欲存取其虛擬磁碟以擷取檔案的虛擬機器。
  2. 在 ESXi 資料存放區中找到該虛擬磁碟的位置。
  3. 將虛擬磁碟複製到同一資料存放區上的另一個目錄,或複製到不同的資料存放區,以避免與磁碟鎖定相關的問題。 在此範例中,我們將開啟一個名為 Win-test2.vmdk的 VMDK 檔案,該檔案屬於名為 Win-test2 的 Windows 虛擬機器。此 ESXi 主機由 vCenter管理。若您使用的是未搭配 vCenter 的獨立 ESXi 主機,工作流程相同,僅使用者介面有所不同。
  4. 開啟 VMware vSphere Client,前往”儲存”並選取所需 VMDK 檔案的位置。 選取 VMDK 檔案,然後按一下”複製至”。

    注意: 若您使用的是未搭配 vCenter 的獨立 ESXi 主機,請在網頁瀏覽器中輸入 ESXi 主機的 IP 位址,以開啟 VMware Host Client。 接著導航至”儲存” > ” > [Datastore Name] > ” > “資料存放區瀏覽器”,選取 VMDK 檔案並按一下”複製”。選擇目標位置並確認操作。

    您也可以透過直接存取 ESXi 主控台,或透過 SSH 連線來複製檔案。

    Copying virtual disk and descriptor vmdk files

  5. 在開啟的視窗中,選取目標位置。您可以將 VMDK 檔案複製到同一資料存放區內的某個位置,或複製到不同的資料存放區。 在此範例中,檔案將複製至同一資料存放區的根目錄。 .vmdk 描述檔與 -flat.vmdk 檔案均會一併複製。Selecting destination
  6. 將 VMDK 檔案掛載至具備正常運作作業系統的健康虛擬機器。在此範例中,使用的是在同一台 ESXi 主機上執行 Windows Server 2016 的虛擬機器(WinServer2016)。虛擬機器運作期間即可掛載虛擬磁碟。

    在 vSphere Client 中,導航至”主機與叢集”,選取運作正常的虛擬機器,右鍵點擊並選擇”編輯設定”。

    Editing the settings of the healthy VM

  7. 在彈出的視窗中,點擊”新增裝置”,然後選取”現有硬碟”。Adding a virtual disk to the healthy VM in vCenter
  8. 選取您先前製作的 VMDK 檔案副本。在本範例中,選取了位於資料存放區根位置下的 Win-test2.vmdk 檔案副本。Attaching a virtual disk to the ESXi VM
  9. 若該虛擬磁碟所連接的正常運作虛擬機器尚未執行,請將其啟動。在此範例中,虛擬磁碟是在 Windows Server 2016 虛擬機器執行期間新增的(熱新增)。
  10. 在 Windows 來賓作業系統中,前往”電腦管理” > “磁碟管理”(或於命令列執行 diskmgmt.msc ),並找出已連接的虛擬磁碟。預設情況下,新磁碟處於離線狀態。 右鍵點擊該磁碟,然後按下”線上”。系統應會自動為分割區指派磁碟機代號;若未自動指派,請右鍵點擊該分割區,並點選”變更磁碟機代號與路徑”。A virtual disk is attached and a partition is mounted successfully

現在您已可對已連接的 VMDK 檔案中的檔案和目錄擁有完整的讀寫權限。請在 Windows 檔案總管中開啟已掛載的磁碟,並複製所需資料。

您也可以刪除不必要的檔案(例如與惡意軟體相關的檔案),但請謹慎操作。若 VMDK 檔案有相關的快照,修改或刪除資料可能會影響快照的一致性。

Browse vmdk file contents in Windows Explorer

範例 2:將虛擬磁碟掛載至在 VMware Workstation 或 Player 上執行的虛擬機器

此範例與前一個類似,但使用在 VMware Workstation 中執行的虛擬機器來開啟 ESXi 虛擬機器的 VMDK 檔案。 當 ESXi 資料存放區的可用空間不足以建立虛擬磁碟副本時,此方法便相當實用。

在此情況下,會將前述 Win-test2 虛擬機器的虛擬磁碟掛載至 VMware 工作站虛擬機器,以擷取其資料。

  1. 在 VMware vSphere Client 中,前往”儲存” > [Datastore name] > “檔案”,選取您的 VMDK 檔案,然後按下”下載”。

    如前所述,ESXi 虛擬磁碟由一個描述檔(.vmdk)和一個延伸區(-flat.vmdk)檔案組成。您必須將這兩個檔案都下載到安裝了 VMware Workstation 或 VMware Player 的電腦上。當您使用 HTML5 vSphere Client 從 ESXi 資料存放區下載虛擬磁碟時,這些檔案會自動打包成單一的 ZIP 壓縮檔。

    此外,您也可以在 ESXi 主機上啟用 SSH 存取,導航至資料存放區目錄,並使用 SCP 客戶端(例如 WinSCP)將這兩份磁碟檔案手動複製到您的電腦上。

    注意: 當從 VMFS 資料存放區下載 精簡配置 虛擬磁碟時,生成的 -flat.vmdk 檔案將會擴展至其完整的預配置大小,類似於厚配置磁碟。這是因為薄配置是在 VMFS 檔案系統 層級上實現的。

    Downloading vmdk and descriptor files

    現在您可以看到已下載的兩個 ESXi 虛擬磁碟檔案,它們以 ZIP 壓縮檔形式存在。VMFS 資料存放區上薄配置磁碟的大小約為 2 GB(參見上圖),而下載至工作站的同一磁碟則約為 8 GB(參見下圖)。

  2. 從壓縮檔中解壓縮這兩個檔案。 預設情況下,這些檔案會解壓縮至名為” Win-test2.vmdk“的目錄中,該名稱與壓縮檔名稱相同(不含檔案副檔名)。The downloaded zip archive
  3. 執行此步驟時,您需要一台已安裝 VMware Workstation 或 VMware Player 的電腦,且該電腦上需有一台運作正常的虛擬機器(VM),並搭載可正常運作的作業系統。在前一個範例中,使用的是執行 Windows Server 2016 的虛擬機器;在此範例中,則使用的是執行 Windows Server 2008 的虛擬機器。對於較新版本的 Windows,工作流程亦相同。

    開啟 VMware Workstation 或 VMware Player,選取您的正常運作虛擬機器,並編輯虛擬機器設定。

    Editing VM settings in VMware Workstation

  4. 在”硬體”索引標籤中,按一下”新增”按鈕。Adding a virtual disk
  5. 在”新增硬體精靈”中,選擇”硬碟”作為硬體類型。接著選擇磁碟類型(可保留預設值)。在”選取磁碟”畫面中,選擇”使用現有的虛擬磁碟”。Add hardware wizard
  6. 選取您從 ZIP 壓縮檔中解壓縮的 vmdk 檔案(請注意,檔案名稱不應包含”flat.vmdk“)。 您可以瀏覽檔案或手動輸入檔案路徑。Selecting the VMDK file

    在此範例中,使用的是 ESXi 6.5 和 VMware Workstation 15。執行 Windows Server 2008 的 VMware Workstation 虛擬機器使用硬體版本 12(虛擬機器版本 12),而其虛擬磁碟正要掛載的 ESXi 虛擬機器則使用虛擬機器版本 7。 較新版本的操作流程相同。

  7. 當嘗試在 VMware Workstation 中掛載虛擬磁碟時,會出現以下相容性錯誤訊息:

    所選的虛擬磁碟與此 Workstation 12.x 虛擬機器不相容。新增此磁碟將導致此虛擬機器與較舊的 VMware 產品不相容。

    A compatibility error message

    您可以透過編輯磁碟描述檔(對於 ESXi 虛擬機器的虛擬磁碟而言,即為輕量級 vmdk 檔案)來修正此錯誤。 請在文字編輯器中開啟您的 VMDK 檔案,並修改 Ddb.virtualHWVersion 字串中的數字。以本例而言,將 13 改為 12。

    注意: 請注意,對於 VMware Workstation 虛擬機器,虛擬磁碟描述檔是嵌入在 VMDK 檔案中的(與 ESXi 虛擬磁碟不同,後者使用獨立的描述檔)。

    Editing a virtual disk descriptor file

    編輯檔案後,虛擬磁碟便會成功新增至現有的虛擬機器。

  8. 啟動虛擬機器。
  9. 在 Windows 中開啟”磁碟管理”,將虛擬磁碟狀態設為”線上”,為分割區指派一個磁碟機代號,並瀏覽其中的檔案。A vmdk virtual disk has been attached
試用 NAKIVO Backup & Replication 適用於 VMware vSphere

試用 NAKIVO Backup & Replication 適用於 VMware vSphere

立即開始您的 15 天免費試用,體驗無代理程式、增量式的虛擬機器備份功能,並享有即時完整還原與細粒度還原選項、防勒索軟體防護等更多功能。

如何在不啟動虛擬機的情況下從 VMDK 檔案中擷取資料

無需啟動虛擬機的方法具有多項實用優勢。在某些情況下,甚至完全不需要使用虛擬化平台。相反地,您可以直接在主機作業系統上掛載 VMDK 檔案,並快速存取其內容。

方法 1:使用 VMware Workstation 在主機作業系統中掛載 VMDK 檔案

此方法需要 VMware 工作站 已安裝於 Windows 或 Linux 主機上。VMware Workstation 包含一項特點,可讓您將 VMDK 檔案直接掛載至主機作業系統。此特點支援 ESXi 格式的磁碟以及與快照相關的增量磁碟。與先前的方法相同,主機作業系統必須支援虛擬磁碟分割區所使用的檔案系統。

建立快照時,系統會產生增量(差異)虛擬磁碟。若要存取虛擬機器在特定快照時的狀態,必須同時具備父磁碟與對應的增量磁碟。在此情況下,您應將適當的增量磁碟掛載至主機作業系統。系統會自動解決對父磁碟的依賴關係。

若已存在快照,但您仍希望直接掛載父磁碟,請使用唯讀模式。 修改父磁碟可能會損毀由該虛擬機器所建立的快照或連結複本。唯讀模式可在磁碟掛載後防止寫入操作。您僅能在使用該磁碟的虛擬機器已關機,或沒有任何虛擬機器正在使用該磁碟時,才可掛載 VMDK 檔案。

以下範例示範如何從具有快照的 VMware 工作站虛擬機器中掛載 VMDK 檔案。在此情境中,Windows 安裝於單一 NTFS 分割區上。 在建立第一個快照後,C: 磁碟機的根目錄中會產生一個名為 Snapshot1.txt 的檔案;建立第二個快照後,則會產生 Snapshot2.txt。第一個範例使用 Linux,第二個則使用 Windows。此處使用的是較舊版 Windows XP 虛擬機的虛擬磁碟檔案,但相同原則也適用於其他 Windows 版本。

範例 1:在 Linux 主機上掛載 VMDK

  1. 開啟 VMware Workstation for Linux,並前往”檔案” > “掛載虛擬磁碟”。Opening VMware Workstation
  2. 點擊”掛載磁碟”。在彈出視窗中,點擊”瀏覽”並選取 VMDK 檔案。mount disk pop-up
  3. 選取在第二次虛擬機器快照後所建立的第二個增量(差異)磁碟的 VMDK 檔案。 在此類情況下,檔案名稱遵循 VM_name-000002.vmdk 的格式(例如, WinXP-test-000002.vmdk)。Selecting a vmdk file to mount
  4. 在 Linux 檔案系統上建立一個目錄,用作 VMDK 檔案的掛載點。 現在,讓我們在 Linux 控制台中建立 /mnt/vmdk/ 目錄。
    mkdir /mnt/vmdk/
  5. 為您的使用者設定適當的權限(在此範例中,使用者名為 user1,隸屬於 group1):
    chown -R user1:group1 /mnt/vmdk/
    chmod -R 0775 /mnt/vmdk/
  6. 現在,選取您建立的目錄作為目標目錄,勾選”以唯讀模式掛載”核取方塊,然後按一下”掛載”。Ready to mount a VMDK file
  7. 現在,您可以在 Linux 檔案總管中開啟 /mnt/vmdk/ 目錄,並瀏覽掛載的 VMDK 檔案中所儲存的檔案。 在此範例中,於第一次和第二次快照後所建立的 Snapshot1.txt 和 Snapshot2.txt 檔案皆可見。每個檔案皆位於獨立的增量 VMDK 磁碟上。Browse vmdk file contents in Linux
  8. 完成操作後,請勿忘記從 Linux 主機上的目錄(掛載點)卸載該 VMDK 檔案。Unmount the vmdk file

在此範例中,已成功使用 VMware Workstation 17.0 在 Ubuntu 22.04 上掛載及解除掛載 VMDK 檔案。

注意: Ubuntu 24.04 採用較新的 Linux 核心(6.8 或更新版本),這可能會影響與 VMware 專有核心模組的相容性。在某些情況下,您可能會遇到”VMware-fuseUI 沒有回應”的錯誤。

發生此問題的原因在於,在 Linux 上掛載 VMDK 檔案需仰賴一個與”使用者空間檔案系統”(FUSE)層整合的 VMware 元件。若所需的 FUSE 模組或輔助程序無法正確初始化,掛載介面可能會停止回應。

若發生相容性問題,請考慮使用受支援的內核版本或較早的 VMware 工作站版本。 請密切關注 VMware 官方文件,以獲取有關磁碟掛載支援的最新資訊。

若您偏好使用控制台介面,可透過以下指令掛載 VMDK 檔案:

vmware-mount /media/user1/vms/vm_name/vm_disk_name-000002.vmdk /mnt/vmdk

其中:

vm_name 為虛擬機器名稱(與 VM 目錄名稱相同)。 在此範例中,WinXP-test 為虛擬機器名稱。

vm_disk_name 為虛擬磁碟名稱(此範例中為WinXP-test.vmdk )。

vm_disk_name-000001.vmdk 為在建立第一個虛擬機器快照後所建立的第一個差異磁碟(WinXP-test-000001.vmdk)。

vm_disk_name-000002.vmdk 為在建立第二個快照後所建立的第二個差異磁碟(WinXP-test-000002.vmdk)。

  1. 掛載虛擬磁碟。預設情況下,虛擬磁碟將以讀寫模式掛載。 您可以在命令列中使用 -r 參數,以唯讀模式掛載磁碟。
    vmware-mount /media/user1/vms/vm_name/vm_disk_name-000002.vmdk /mnt/vmdk
  2. 列出所有已掛載的 VMDK 檔案:
    vmware-mount -L
  3. 在完成對已掛載 VMDK 檔案的操作之前,請先卸載所有虛擬磁碟:
    vmware-mount -x

範例 2:如何在 Windows 主機上掛載 VMDK

在 Windows 上掛載 VMDK 檔案的流程類似。 在 VMware 工作站中,您可以在圖形使用者介面 (GUI) 中使用”檔案”>” > “>”映射虛擬磁碟”。或者,在 Windows 資源管理器中右鍵點擊 VMDK 檔案,並從快顯選單中選擇”映射虛擬磁碟”。

在此範例中,將掛載第一個快照後建立的第一個增量(差異)磁碟的 VMDK 檔案。此類檔案遵循以下命名模式: VM_name-000001.vmdk (本範例中為 WinXP-test-000001.vmdk )。

注意: 在 Windows 作業系統上,將虛擬磁碟掛載為磁碟機的特點已於 VMware Workstation 17.0 中移除。支援此特點的最新 Windows 版 VMware Workstation 版本為 16.1.2。此特點仍存在於最新版本的 Linux 版 VMware Workstation(17.5 及後續版本)。

  1. 在 Windows 檔案總管中右鍵點擊 VMDK 檔案,然後點擊”映射虛擬磁碟”。map a vmdk file in Windows with VMware Workstation
  2. 選擇適當的參數來掛載 VMDK 檔案。建議以唯讀模式開啟磁碟,以防止快照鏈中的虛擬磁碟遭受潛在損壞。

    預設情況下,磁碟機代號設定為 Z:,若勾選對應的核取方塊,映射完成後磁碟將自動在 Windows 檔案總管中開啟。點擊”確定”繼續。

    open vmdk by mapping a virtual disk

  3. 現在,虛擬磁碟已作為磁碟 Z: 在 Windows 中掛載,您可以讀取其內容。在下方的螢幕截圖中,您可以看到在建立第一個快照後所產生的 Snapshot1.txt 檔案。由於 Snapshot2.txt 檔案是在建立第二個快照後才產生的,而目前掛載的增量磁碟對應於第一個快照,因此該檔案並未顯示。Browse vmdk file contents on mapped Windows disk
  4. 當您完成對已映射 VMDK 檔案的操作後,請勿忘記斷開磁碟連接。 右鍵點擊相應的 VMDK 檔案,並選擇”斷開虛擬磁碟”。斷開虛擬磁碟後,即可啟動使用該磁碟的虛擬機器。Disconnecting the virtual disk

方法 2:使用 7-Zip 從 VMDK 檔案中提取內容

若您需要在不執行虛擬機器的情況下開啟 VMDK 檔案,可以使用 7-Zip 從虛擬磁碟映像中提取資料。 7-Zip 是一款免費的檔案壓縮工具,可開啟並解壓縮各種壓縮檔格式及磁碟映像檔的內容。它可在 Windows 和 Linux 系統上使用。

7-Zip 可以開啟 .vmdk 以及 -flat.vmdk 格式的檔案(若描述檔遺失,亦可開啟獨立的 -flat.vmdk 檔案),這通常適用於 ESXi 格式的磁碟。然而,7-Zip 不支援開啟在虛擬機器快照後所建立的增量(差異)VMDK 檔案。

如何在 Linux 上使用 7-Zip 開啟 VMDK 檔案

  1. 在您的 Linux 機器上安裝 7-Zip 完整套件。本範例使用 Ubuntu。
    apt-get install p7zip-full
  2. 使用 7-Zip 列出 VMDK 檔案的內容
    7z l vm_name.vmdk
  3. 找出名稱中包含”boot.”的檔案。
    7z l /media/user1/vms/WinXP-test/WinXP-test.vmdk | grep boot[.]

    user1 是此 Linux 使用者的名稱,l 代表列出。

    Using 7-Zip as a vmdk extractor in Linux

  4. 現在讓我們從 VMDK 映像檔中解壓縮 (e) boot.ini 檔案:
    7z e /media/user1/vms/WinXP-test/WinXP-test.vmdk boot.ini

您也可以以類似方式從 VMDK 檔案中解壓縮其他檔案和目錄。

如何在 Windows 上使用 7-Zip 開啟 VMDK 檔案

  1. 官方網站 下載相容的 7-Zip 版本,並將應用程式安裝在您的 Windows 電腦上。為求更方便,建議使用 EXE 安裝程式。Opening a vmdk file with 7-Zip in Windows
  2. 在下方的螢幕截圖中,獨立檔案 Win-test2-flat.vmdk 的內容顯示於 7-Zip 的圖形化介面中。您可以解壓縮所需的 VMDK 內容。Browse vmdk file contents in 7-Zip

您也可以觀看這段影片,學習如何在 VMware 中開啟 VMDK 檔案並解壓縮 VMDK 資料:

如何在 Linux 中掛載 VMDK 檔案(其他方法)

Linux 提供了強大的命令列工具,讓您能直接從控制台執行進階的磁碟操作。 這些內建工具可用於掛載 VMDK 檔案,並存取儲存於虛擬磁碟上的資料。以下範例以 Ubuntu Linux 為例。

方法 1:如何使用 /dev/loop

掛載 VMDK 檔案。迴圈裝置是 Linux 中的偽裝置,可讓檔案以區塊裝置的形式被存取。它們通常用於掛載包含檔案系統的磁碟映像檔。 迴圈裝置的名稱為 /dev/loopX,其中 X 代表裝置編號。此方法適用於掛載 -flat.vmdk 檔案,即使描述檔遺失亦然。

以下範例示範如何在 Linux 中掛載 VMDK 檔案以存取其內容。此處使用的是具有單一分割區的 ESXi 格式虛擬磁碟,且描述檔不可用。 該磁碟原本安裝了 Windows XP。

  1. 請使用以下兩條指令之一,檢查您的 Linux 系統上現有的迴圈裝置數量。
    fdisk -l | grep /dev/loop
    df -h | grep /dev/loop
  2. 在此情況下,編號為 1 至 21 的裝置已經存在(/dev/loop1/dev/loop21)。由於編號 30 的迴圈裝置尚屬空閒,請建立該裝置。此裝置可與 –flat.vmdk 檔案關聯。
    losetup /dev/loop30 /vms/Win-test2-flat.vmdk
  3. 設定偏移量:
    losetup -o 32256 /dev/loop31 /dev/loop30

    此處的 32256 是針對在 Windows XP、Windows Server 2003 及更早版本中格式化的磁碟所計算的偏移量(計算方式為 63 × 512)。在此情況下,63 為分割區的起始磁區,而 512 位元組則是磁區大小。對於 Windows 7、Windows Server 2008 及更新版本,請使用偏移量 105906176。

    您可以透過以下指令檢視磁區大小及用於開機的起始磁區資訊:

    fdisk -l /dev/loop30 /vms/Win-test2-flat.vmdk

    mount vmdk files in Linux without having a hypervisor installed

    此外,對於包含多個分割區的虛擬磁碟,您也可以使用 parted 來確定每個分割區的起始與結束位置:

    parted /dev/loop30

    在 parted 控制台中,輸入以下指令:

    unit
    B
    print

    Checking VMDK file information

  4. 建立用作 VMDK 映像檔掛載點的目錄:
    mkdir /mnt/vmdk-image
  5. 掛載與 VMDK 映像檔相關聯的迴路裝置:
    mount /dev/loop31 /mnt/vmdk-image
  6. 列出已掛載映像檔的內容:
    ls -al /mnt/vmdk-image
  7. 完成後,請卸載 VMDK 映像檔並斷開迴路裝置:
    umount /mnt/vmdk-image
    losetup -d /dev/loop31

    Using a loopback pseudo-device to mount a vmdk file

方法 2:如何使用 kpartx 掛載 VMDK 檔案

kpartx 是一款可將映像檔中的分割區掛載至真實 Linux 檔案系統目錄的工具。此工具可用於為區塊裝置的分割區設定裝置映射。此方法亦支援掛載 –flat.vmdk ESXi 伺服器上使用的映像檔。

  1. 安裝 kpartx:
    apt-get install kpartx
  2. 在詳細運作模式下為 VMDK 映像檔新增分割區映射:
    kpartx -av /vms/Win-test2-flat.vmdk
  3. 將分割區掛載至 /mnt/vmdk-image 目錄:
    mount /dev/mapper/loop30p1 /mnt/vmdk-image/

    其中 loop30 為迴圈裝置的編號,p1 為映像檔內的分割區編號(磁碟映像檔中的第一個分割區)。

  4. 列出虛擬磁碟分割區的內容:
    ls -al /mnt/vmdk-image/

    Using kpartx to mount vmdk images in Linux

  5. 完成後,請卸載 VMDK 虛擬磁碟映像檔。
    umount /mnt/vmdk-image
    kpartx -d /vms/Win-test2-flat.vmdk

方法 3: 使用 QEMU 網路區塊裝置 (NBD)

此方法利用 QEMU 工具將 VMDK 呈現為標準區塊裝置 /dev/nbdN,Linux 核心即可直接掛載該裝置。 您無需安裝 VMware 工作站即可使用此方法。此操作需要 root 權限。

  1. 請先關閉虛擬機器,以避免虛擬磁碟損毀。
  2. 安裝 QEMU 公用程式套件,其中包含 qemu-nbd。
    sudo apt install qemu-utils
  3. 載入網路區塊裝置核心模組:
    sudo modprobe nbd
  4. 將 VMDK 檔案映射至網路區塊裝置,例如: /dev/nbd0。若要設定為唯讀,請使用 -r 參數。
    sudo qemu-nbd -r -c /dev/nbd0 /path/to/your/disk.vmdk

    在此範例中,指令如下:

    sudo qemu-nbd -r -c /dev/nbd0 /media/user1/data/vms/WinXP-test/WinXP-test.vmdk
  5. 識別已掛載虛擬磁碟上的分割區:
    sudo fdisk -l /dev/nbd0

    在輸出結果中,您應會看到類似 /dev/nbd0p1/dev/nbd0p2等的分割區。

  6. 建立掛載點:
    sudo mkdir -p /mnt/vmdk

    如有需要,請為特定使用者設定權限。

  7. 掛載分割區。在此範例中,分割區 1 存放資料:
    sudo mount /dev/nbd0p1 /mnt/vmdk

    mount VMDK in Linux using qemu-utils

  8. 現在您可以在 /mnt/vmdk/ 存取 VMDK 的內容。
  9. 完成後,請卸載卷並斷開 NBD 裝置:
    sudo umount /mnt/vmdk
    sudo qemu-nbd -d /dev/nbd0

方法 4:使用 guestmount 掛載 VMDK 檔案

guestmount 是一款在 Linux 上存取 VMDK 內容的可靠工具,因為它能智慧地處理磁碟結構,包括分割區和邏輯卷。它無需像舊版工具(例如 /dev/loop)那樣手動計算偏移量。您必須具備 root 權限才能使用此方法。

  1. 安裝 libguestfs-tools。此套件包含 guestmount 公用程式。
    sudo apt install libguestfs-tools
  2. 關閉您要掛載其虛擬磁碟的虛擬機器。
  3. 在您的 Linux 主機上建立一個目錄,用以存取磁碟內容:
    mkdir /mnt/vmdk

    注意: 若您希望以一般使用者(而非 root使用者)身分存取 VMDK 檔案的內容,可以進行額外的設定。

    • 編輯 FUSE 設定檔。請以 root 權限使用文字編輯器開啟 /etc/fuse.conf 檔案:sudo nano /etc/fuse.conf
    • 取消註解 #user_allow_other 這行,使其在設定檔中生效。只需刪除該行開頭的 # 字元即可。
    • 儲存變更並關閉檔案(退出文字編輯器)。
    • 若需,可將您的一般使用者加入 fuse 群組:sudo usermod -aG fuse $USER
  4. 檢查 VMDK 檔案。 在掛載之前,先查看 VMDK 內的分割區會很有幫助。請使用 virt-filesystems 工具:
    virt-filesystems -a /path/to/your/disk.vmdk

    在此情況下:

    virt-filesystems -a /media/user1/data/vms/WinXP-test/WinXP-test.vmdk

    在輸出結果中,您應該會看到分割區(/dev/sda1/dev/sda2等)及其檔案系統。

  5. 使用 guestmount 掛載 VMDK。使用 guestmount 有兩種主要方式:自動檢查或手動分割區掛載。讓我們使用手動分割區掛載 (針對特定分割區)

    若您僅需單一分割區,可直接指定:

    sudo guestmount -a /path/to/your/disk.vmdk -m /dev/sdaN --ro /mount_point/

    在本範例中,確切的指令為:

    sudo guestmount -a /media/user1/data/vms/WinXP-test/WinXP-test.vmdk -m /dev/sda1 --ro /mnt/vmdk/

    若您希望以一般使用者身分存取已掛載 VMDK 檔案的內容,並透過 Linux 圖形使用者介面存取檔案,請使用以下指令:

    sudo guestmount -a /media/user1/data/vms/WinXP-test/WinXP-test.vmdk -m /dev/sda1 --ro -o allow_other /mnt/vmdk/
  6. 現在您可以在 Linux 控制台中,如同瀏覽本機目錄一般檢視、瀏覽及複製 VMDK 中的檔案:
    ls -al /mnt/vmdk
  7. 完成後請卸載虛擬磁碟:
    sudo guestunmount /mnt/vmdk/

您亦可使用替代的 FUSE 方法:

sudo fusermount -u /mnt/vmdk/

結論

當虛擬機器發生故障或無法存取時,了解如何開啟 VMDK 檔案並從中提取資料至關重要。掌握多種存取 VMDK 內容的方法能提供更大的靈活性,因為每種方法可能更適合特定的情況。同時,為虛擬機器維護可靠的備份同樣重要,這能確保資料的可用性並簡化還原流程。

試試 NAKIVO Backup & Replication

試試 NAKIVO Backup & Replication

立即申請免費試用,全面探索本解決方案的所有資料保護功能。15 天免費試用。無任何特點或容量限制。無需提供信用卡資訊。

People also read