如何開啟、掛載 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 主機 無法開機,但您需要取回儲存於其 VMDK 檔案中的檔案。該虛擬磁碟包含兩個 NTFS 分割區:一個系統(開機)分割區,以及主 C: 磁碟機。在此範例中,將官方 Ubuntu 18 安裝 ISO 作為 Live DVD 使用,藉此存取虛擬磁碟並複製所需資料。

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

  1. 將 ISO 映像檔上傳至可由執行該虛擬機的 ESXi 主機存取的資料存放區。
  2. 開啟 VMware vSphere Client,前往”主機與叢集”,選取您的虛擬機器,然後按一下”編輯設定”。Editing VM settings
  3. 在虛擬機器設定視窗中,前往”CD/DVD 光碟機”選項。若您在資料存放區中已有所需的 ISO 檔案,請選取”資料存放區 ISO 檔案”。接著,按一下”瀏覽”並選取適當的 ISO 檔案。檔案名稱是 ubuntu-18.04.1-desktop-amd64.iso 在此情況下。Inserting a bootable ISO image into a virtual optical drive
  4. 啟動虛擬機器,從 ISO 映像檔開機,並選擇”不安裝 Ubuntu 試用版”。待 Ubuntu 從 Live DVD 媒體開機完成後,開啟控制台(終端機)。
  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 共用資料夾所掛載的目錄,並將虛擬磁碟已掛載的分區(位於 ESXi 資料存放區中的 VMDK 檔案)中的 bootmgr 檔案複製到當前目錄(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 工作站或 Player 中開啟來自 ESXi 虛擬機器的 VMDK 檔案,請將描述檔和區段檔(vmdk 和 -flat.vmdk) 至安裝了工作站或 Player 的主機可存取的本地磁碟。如果來源虛擬機器有 快照, 請務必除了複製父磁碟檔案之外,也一併複製相關的增量(差異)VMDK 檔案。

以下範例說明了這種做法:

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

請確保正常運作的虛擬機器 (VM) 的作業系統支援所連接的 VMDK 檔案所使用的檔案系統。否則,可能無法存取這些分割區。

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

  1. 請關閉您要存取其虛擬磁碟以擷取檔案的虛擬機器。
  2. 在 ESXi 資料存放區中找到該虛擬磁碟的位置。
  3. 將虛擬磁碟複製到同一資料存放區上的另一個目錄,或複製到不同的資料存放區,以避免與磁碟鎖定相關的問題。在此範例中,我們開啟一個名為 Win-test2.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 工作站或 Player 上執行的虛擬機器

此範例與前一個類似,但使用在 VMware 工作站中運行的虛擬機器來開啟 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 的電腦,且該電腦上需有一台搭載可正常運作作業系統的健康虛擬機器。在前一個範例中,使用的是執行 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. 選取 vmdk 檔案(而非 –flat.vmdk) 您已從 ZIP 壓縮檔中解壓縮的檔案。您可以瀏覽該檔案,或手動輸入檔案路徑。Selecting the VMDK file

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

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

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

    A compatibility error message

    您可以透過編輯磁碟描述檔檔案(若為 ESXi 虛擬機器之虛擬磁碟,則為輕量級 VMDK 檔案)來修正此錯誤。請在文字編輯器中開啟您的 VMDK 檔案,並將 Ddb.virtualHWVersion 字串。在我們的例子中,13 被改為 12。

    註: 請注意,對於 VMware 工作站的虛擬機器,虛擬磁碟描述檔是嵌入在 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 工作站中於主機作業系統掛載 VMDK 檔案

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

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

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

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

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

  1. 開啟 VMware 工作站 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 檔案的掛載點。讓我們建立這個 /mnt/vmdkLinux 控制台中的 / 目錄。
    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. 現在您可以開啟 /mnt/vmdk在 Linux 檔案總管中開啟 / 目錄,並瀏覽已掛載的 VMDK 檔案中所儲存的檔案。您將看到 Snapshot1.txt 和 Snapshot2.txt 這兩份檔案,它們分別是在本範例中的第一個和第二個快照建立後所產生的。每份檔案都儲存於各自獨立的增量 VMDK 磁碟中。Browse vmdk file contents in Linux
  8. 完成操作後,請勿忘記從 Linux 主機上的目錄(掛載點)卸載 VMDK 檔案。Unmount the vmdk file

在此範例中,使用 VMware 工作站 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 目錄名稱相同)。在此範例中,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 (在此範例中)。

註: 在 VMware Workstation 17.0 針對 Windows 作業系統的版本中,已移除將虛擬磁碟掛載為磁碟機的特點。支援此特點的最新 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. 現在,此虛擬磁碟已在 Windows 中掛載為 Z: 磁碟,您可以讀取其內容。在下方的螢幕截圖中,您可以看到在建立第一個快照後所產生的 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. 讓我們提取 (e) 的 boot.ini 來自 VMDK 映像檔的檔案:
    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:如何使用 來掛載 VMDK 檔案 /dev/loop

迴圈裝置是 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

    在開啟的控制台中,輸入以下指令:

    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. 您現在可以透過以下路徑存取您的 VMDK 內容: /mnt/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 設定檔。開啟 /etc/fuse.conf 使用具備 root 權限的文字編輯器編輯該檔案: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