了解如何打開 VMDK 檔案並從中提取內容在遇到虛擬機器問題時很有用。在安裝應用程序、操作系統更新、惡意軟件攻擊、意外數據刪除等問題後,您可能會發現虛擬機器無法啟動。當發生這種情況時,您將無法訪問虛擬機器的虛擬磁盤。
幸運的是,您可以使用 WinZip、Linux Reader 或 VMware Workstation Player 打開 VMDK 檔案。繼續閱讀以了解恢復 VMDK 虛擬磁盤檔案內容的方法。請注意,這些方法僅適用於虛擬磁盤未加密或損壞的情況。
什麼是 VMDK 檔案?
VMDK 是 VMware 開發的虛擬機器磁盤檔案格式,這是一種開放格式。該虛擬磁盤格式的檔案擴展名為 .vmdk,用於 VMware 和 VirtualBox 虛擬機器。然而,存儲在 ESXi 伺服器上的虛擬機器使用稍微不同的 vmdk 虛擬磁盤格式。在 ESXi 資料存儲中,虛擬磁盤描述符和包含虛擬磁盤原始數據的虛擬磁盤範圍是兩個獨立的檔案。
虛擬磁碟描述符名稱的模式為diskname.vmdk,包含所有原始資料的虛擬磁碟擴展名稱的模式為diskname-flat.vmdk。至於VMware Workstation格式的虛擬磁碟,它們表示為單個diskname.vmdk文件(單體稀疏),其中包含嵌入式虛擬磁碟描述符的擴展數據文件。虛擬磁碟描述符定義了虛擬磁碟的結構、虛擬磁碟幾何、虛擬硬件版本和ID。
虛擬磁碟描述符文件
A virtual disk descriptor is represented as plain text. On the left side of the screenshot below, you can see a virtual disk descriptor of the ESXi format (a vmdk file that can be opened with any text editor). On the right side of the screenshot, you can see the data of the virtual disk descriptor that is embedded into a single vmdk file of the VMware Workstation format. The vmdk file can be opened in a HEX editor.
從上述第0x200地址,即第一個字節的編號,將嵌入式磁碟描述符數據寫入Workstation格式的單體vmdk文件。如果您將200 HEX值轉換為二進制和十進制格式,您將獲得:
200 HEX = 1000000000 二進制 = 512 十進制
這意味著如果您想從vmdk文件中提取嵌入式描述符,您應該提取從第512個字節開始的一部分數據。您可以在有關轉換VMware VM到Hyper-V VM的博文中找到有關VMware虛擬磁碟描述符文件的更多信息,並了解如何提取、編輯和導入嵌入式虛擬磁碟描述符。
虛擬磁碟數據文件
在 screenshot below,兩個虛擬磁碟文件在 HEX editor 中被開啟。兩個虛擬磁碟上都有相同的作業系統 (用於安裝作業系統的第一分割区是用內建的 Windows 磁碟工具創建和格式化的)。在 screenshot 的左側,展示了 –flat.vmdk 文件(ESXi 格式)。這個虛擬磁碟從 0x00000000 開始的原始數據寫入 –flat.vmdk 文件。在 screenshot 的右側,展示了 Workstation 格式的虛擬磁碟,並且同樣的數據從 0x00150000 (字節號 5376) 開始寫入,這不是 vmdk 文件的開始。
現在,在熟悉理論後,是 practical part 的时候了。在您進行下一步之前,建議您備份您的數據,以防止任何可能的虛擬磁碟損壞。您需要在負責任和風險的基礎上對您的磁碟進行操作。
2 種開啟 VMDK 文件的方法
要通過啟動 VM 來開啟 VMDK 文件,您需要在您的实体電腦上安裝像 VMware ESXi、VMware Workstation、VMware Player 或 Oracle VirtualBox 這樣的虛擬化平台。您可以選擇使用 live DVD 的傳統方法,或者將 VMDK 文件作為虛擬磁盤掛載。
方法 1:即使 VM 上的 OS 已經死亡,也使用 live DVD
這種方法的理念是您可以從 DVD 光碟引導虛擬機器(VM)。ISO 磁碟映像可用作插入到 VM 虛擬 DVD 驅動器的 DVD 光碟。從 DVD 媒體引導操作系統後,您可以掛載虛擬磁碟的分區,並將文件從虛擬磁碟複製到連接到 VM 或主機機器的 USB 硬盤,或通過網絡到任何其他機器。一些即時 DVD 發行版會自動掛載磁盤(分區)。
這是一種遺留方法,因為其原理類似於從無法引導的已安裝操作系統的物理計算機的物理磁盤複製文件。此方法可用於從運行在 VMware ESXi 和 VMware Player/Workstation 上的 VM 的 VMDK 磁盤中提取數據。
請注意,從即時 DVD 引導的操作系統必須識別您想訪問文件的虛擬磁碟的分區的文件系統。例如,Windows 默認情況下無法處理 Linux 文件系統,如 EXT3、EXT4、ReiserFS 等。在 Windows 上使用額外工具可能有助於解決此問題。反之,現代 Linux 能夠識別 Windows 文件系統,如 NTFS 和 FAT32,這就是您可以使用基於 Linux 的即時 DVD 光碟來複製存儲在無法引導的 Windows VM 使用的虛擬磁盤上的文件的原因。
示例:在 ESXi 上打開 VMDK 文件
考慮一個應用此方法的例子:您有一個在ESXi主機上運行Windows Server 2016的VM,但VM上的作業系統無法啟動,但您需要獲取記錄在VMDK虛擬磁碟上的文件。虛擬磁碟上有兩個NTFS分區:啟動系統分區和磁碟C。在此示例中使用官方的Ubuntu 18安裝ISO映像。Ubuntu安裝媒體可以用作Live DVD。
注意:本文中考慮的產品新版本的工作流程相同。您可以使用VMware Workstation 17、ESXi 8.0、Windows Server 2019、Ubuntu Linux 22.04等,並使用本文中解釋的工作原理。
- 將ISO映像上傳到ESXi主機可以訪問的數據存儲器中。
- 打開VMware vSphere Client,進入主機和集群,選擇您的VM,然後點擊編輯設置。
- 在虛擬機器設置視窗中,轉到CD/DVD 驅動器選項。如果您在 ESXi 主機可以訪問的數據存儲中有所需的 ISO 檔案,則選擇數據存儲 ISO 檔案選項。然後,對於 CD/DVD 媒體選項,點擊瀏覽並選擇數據存儲中的適當 ISO 檔案。在這種情況下,檔案名稱是ubuntu-18.04.1-desktop-amd64.iso。
- 啟動虛擬機器,從 ISO 影像啟動,並選擇試用 Ubuntu 而不安裝。一旦 Ubuntu 從 Live DVD 媒體啟動,打開控制台(終端)。
- 獲取 root 權限:
sudo -i
- 列出可用的硬碟設備:
ls -al /dev/sd*
有兩個分區 – /dev/sda1和/dev/sda2
- 創建用作每個分區掛載點的目錄:
mkdir /mnt/win-disk1
mkdir /mnt/win-disk2
- 將虛擬磁碟的分割區掛載到適當的目錄下:
mount /dev/sda1 /mnt/win-disk1/
mount /dev/sda2 /mnt/win-disk2/
- 然後列出已掛載分割區的檔案和目錄:
ls -al /mnt/win-disk2/
ls -al /mnt/win-disk1/
如上圖所示,掛載到/mnt/win-disk2的分割區是 Windows 中的 C: 磁碟。
- 現在您可以將USB硬碟驅動器(HDD)連接到ESXi主機的USB端口,並使用USB通過功能將此HDD連接到虛擬機器。這樣,您可以複製存儲在虛擬機器作為虛擬磁盤使用的VMDK文件上的必要文件。另一種方法是使用SMB(CIFS)共享,通過網絡將虛擬磁盤(即VMDK文件)的內容複製到另一個位置。
在此示例中,我們將解釋將數據複製到SMB共享。 SMB共享已在其IP地址為192.168.17.125的主機上創建,共享名稱為\\192.168.17.125\share,並且user10對此共享具有寫入權限。不要忘記,與Windows不同,Linux在連接到共享時使用右斜線。
讓我們在從活動DVD加載的Linux上掛載SMB(CIFS)共享。首先,創建一個用作掛載點的目錄。
mkdir /mnt/smb-share
- 然後將SMB(CIFS)共享掛載到此目錄:
mount -t cifs -o user=user10 //192.168.17.125/share /mnt/smb-share
- 輸入使用者的密碼。
- 現在,您的 Linux 系統已連接到 SMB 共享,您可以通過網絡將存儲在 VMDK 文件中的內容複製到 SMB 共享中。
讓我們進入已掛載 SMB 共享的目錄,並從虛擬磁盤的已掛載分區(位於 ESXi 數據存儲庫上的 VMDK 文件)將 bootmgr 文件複製到當前目錄(SMB 共享)。
cd /mnt/smb-share
cp /mnt/win-disk-2/bootmgr
- 確保必要的檔案已複製,並檢查您的SMB分享內容。
ls -al /mnt/smb-share
如上面的截圖所示,此示例中使用的bootmgr檔案已成功複製。現在您知道當虛擬機器上安裝的作業系統無法啟動時,將VMDK檔案的內容複製到另一個位置的第一種方法。在VMware Player或VMware Workstation上使用此方法的邏輯相同。
方法2:將VMDK檔案掛載為正常虛擬機的虛擬磁碟(ESXi/Workstation/Player)
此方法與前一種方法類似,但在這種情況下,VMDK虛擬磁碟應附加到具有正常運行作業系統的現有虛擬機。您可以將VMDK檔案作為附加虛擬磁碟附加到正在運行的ESXi主機、VMware Workstation和VMware Player上的現有VM中。
如果您想在 VMware Workstation 或 Player 上打开 ESXi VM 的 VMDK 文件,您應將虛擬磁碟及其描述符(vmdk 和 flat.vmdk 文件)都複製到可以讓您的電腦訪問的實體磁碟中,並安裝了 VMware Workstation 或 Player 的位置。如果 VM 上已經拍攝了快照,並且在此之後對 VM 磁碟進行了更改,請不要忘記複製增量(差異)虛擬磁碟的 VMDK 文件,以及父 VMDK 文件。
讓我們考慮兩個例子:
示例 1:如何在 ESXi 主機上使用另一個 VM 打開一個 VM 的 VMDK 虛擬磁碟(兩者都在 ESXi 主機上註冊)
示例 2:如何通過將虛擬磁碟附加到 VMware Workstation 格式的 VM 中,從 ESXi VM 的 VMDK 虛擬磁碟中提取內容
請記住,第一個(健康的)VM 上的運行操作系統必須與第二個 VM 上的虛擬磁碟所使用的文件系統兼容(要將其作為附加虛擬磁碟以提取文件的 VM 具有非可啟動操作系統)。
示例 1:將虛擬磁碟掛載到在 ESXi 上運行的 VM
- 關閉使用您想要提取文件的虛擬磁碟的 VM。
- 在 ESXi 數據存儲中找到這個虛擬磁碟。
- 將虛擬磁碟複製到相同資料存儲或其他資料存儲,以防止虛擬磁碟鎖定所造成的錯誤。在我們的例子中,我們將展示如何打開一個名為Win-test2.vmdk的VMDK文件(這是我們情況下的Win-test2 Windows虛擬機的虛擬磁碟)。ESXi主機由vCenter管理。如果您使用獨立的ESXi主機而沒有vCenter,您可以使用本示例中解釋的邏輯 – 差異僅在用戶界面中。
- 打開VMware vSphere Client,轉到存儲,並選擇所需的VMDK文件所在的資料存儲。選擇VMDK文件,並點擊複製到。
注意:如果您有一個獨立的ESXi主機並且沒有vCenter,請通過在Web瀏覽器中輸入ESXi主機的IP地址來打開VMware Host Client,然後轉到存儲 > [您的資料存儲名稱] > 資料存儲瀏覽器,選擇您的VMDK文件,並點擊複製。選擇目的地,並點擊複製按鈕以確認。請記住,虛擬磁碟在VMware vSphere Client和VMware Host Client的Web界面中顯示為VMDK文件,但一個虛擬磁碟由–flat.vmdk和vmdk文件(一個虛擬磁碟及其描述符)組成。您也可以直接在服務器上打開ESXi控制台,或通過SSH連接來複製文件。
- 在打開的窗口中,選擇目的地。您可以將VMDK文件複製到同一數據存儲的某個位置,也可以將其複製到另一個數據存儲。讓我們將VMDK文件複製到同一數據存儲的根目錄進行演示。在這種情況下,vmdk和-flat.vmdk文件都被複製了。
- 現在,您需要將VMDK虛擬磁碟附加到另一個運作正常的VM上。在這個例子中,使用同一個ESXi主機上運行Windows Server 2016的VM(VM名稱為WinServer2016)。在VM運行時,可以將虛擬磁碟附加到這個健康的VM上。在vSphere Client中,轉到主機和集群,選擇健康的VM,右鍵點擊VM,然後點擊編輯設置。
- 在彈出的窗口中,點擊新增設備,然後選擇現有的硬碟。
- 選擇您之前製作的VMDK文件的副本。在當前示例中,已選擇數據存儲的根目錄中的Win-test2.vmdk的副本。
- 如果尚未啟動VM,請啟動已附加所需虛擬磁碟的健康VM。對於正在運行的Windows Server 2016 VM,可以即時添加虛擬磁碟。
- 在客用 Windows 操作系统中,前往 電腦管理 > 磁碟管理(或在命令列中運行 diskmgmt.msc),找到您附加的虛擬磁碟。預設情況下,新附加的磁碟處於離線狀態。右鍵點擊該磁碟,然後點擊 上線。系統應自動為添加磁碟上的分區分配磁碟字母。如果尚未為分區分配磁碟字母,請右鍵點擊該分區,然後點擊 更改磁碟字母和路徑。
- 現在,您可以完全(讀寫)訪問 VMDK 虛擬磁碟的文件和目錄。只需在 Windows 資源管理器中打開掛載的磁碟,並複製所需的 VMDK 文件內容到健康的虛擬機。您也可以從附加的 VMDK 虛擬磁碟中刪除不需要的數據(例如,如果有任何由病毒創建的文件),但請小心,不要損壞掛載的 VMDK 磁碟的相關快照。
示例 2:將虛擬磁碟掛載到運行 VMware Player 或 Workstation 的虛擬機上
這個例子與之前的類似,但是使用在 VMware Workstation 上運行的虛擬機 (VM) 來打開 ESXi VM 的 VMDK 文件。當 ESXi 數據存儲庫上沒有免費的磁盤空間來複製虛擬磁盤時,可以使用這種方法。例如,將在前一個例子中提到的 Win-test2 VM 的虛擬磁盤掛載到 VMware Workstation VM 上以提取其內容。
- 在 VMware vSphere Client 中,前往 存儲 > [您的資料存儲名稱] > 文件,選擇您的 VMDK 文件並點擊 下載。
正如您記得的那樣,ESXi 格式的虛擬磁盤由 vmdk 和 flat.vmdk 文件組成。您需要將這兩個文件下載到安裝有 VMware Workstation 或 VMware Player 的計算機上。當您使用 VMware HTML5 vSphere Client 從 ESXi 資料存儲下載虛擬磁盤時,這兩個文件將被打包到一個 zip 存檔中。
作為替代方案,您可以啟用對 ESXi 主機的 SSH 訪問,轉到資料存儲目錄,並使用 SCP 客戶端(例如 WinSCP)手動將兩個虛擬磁盤文件複製到您的計算機上。
注意:當您從具有 VMFS 文件系統的 ESXi 資料存儲下載一個 薄配置 的虛擬磁盤到您的計算機時,您將獲得一個輕量級的 vmdk 文件和一個大小等於虛擬磁盤的最大配置大小的 flat.vmdk 文件(就像您下載厚配置虛擬磁盤時一樣)。這是因為薄配置可以被視為 VMFS 文件系統 的一個功能。
現在您可以看到已經以 ZIP 存檔形式下載的兩個 ESXi 格式虛擬磁盤文件。在 VMFS 資料存儲上,薄配置虛擬磁盤的大小約為 2 GB(見上面的截圖),而在工作站計算機上下載的相同磁盤的大小約為 8 GB(見下面的截圖)。
- 解壓縮存檔中的兩個檔案。預設情況下,檔案會被提取到與存檔名相同但沒有檔案副檔名的目錄Win-test2.vmdk中。
- 對於這一步驟,您應該在您的機器上擁有一個帶有 VMware Workstation 或 Player 安裝的正常運行操作系統的虛擬機器。在前一個示例中,使用運行 Windows Server 2016 的虛擬機器,而在本示例中,使用運行 Windows Server 2008 的正常運行虛擬機器。
打開 VMware Workstation 或 VMware Player,選擇您的正常運行虛擬機器,然後編輯虛擬機器設置。
- 在硬體選項卡中,點擊新增按鈕。
- 在打開的新增硬體精靈中,選擇硬碟作為硬體類型。然後,選擇一種磁碟類型(您可以保留建議值)。在選擇磁碟螢幕上,選擇使用現有的虛擬磁碟選項。
- 選擇您從ZIP存檔中提取的vmdk文件(而不是- flat.vmdk)。您可以瀏覽文件或手動輸入文件的完整路徑。
在這個例子中,使用ESXi 6.5和VMware Workstation 15。在我們的例子中,運行Windows Server 2008的VMware Workstation VM具有工作站12硬體版本(VM版本12)。我們想要附加其虛擬磁碟的ESXi VM具有VM版本7。
-
在 VMware Workstation 中出現錯誤訊息,表示從 ESXi 主機複製的虛擬磁碟與此虛擬機器不相容:
注意:請記住,對於 VMware Workstation 虛擬機器的虛擬磁碟,虛擬磁碟描述符是內建於虛擬磁碟 VMDK 檔案中的(與 ESXi 虛擬機器的虛擬磁碟不同,沒有單獨的描述符檔案)。
在編輯完檔案後,將虛擬磁碟成功添加到現有的虛擬機器中。
- 如果尚未啟動 VM,請啟動 VM。
- 在 Windows 中打開磁碟管理,將您的虛擬磁碟狀態更改為上線,將驅動器字母分配給分區並瀏覽文件。
如何在不啟動 VM 的情況下從 VMDK 檔案中提取資料
不需要配置和啟動虛擬機器的方法各有優勢。其中一些方法不需要安裝虛擬化監控程式。您可以在短時間內將 VMDK 檔案直接掛載到您的主機作業系統中。
方法1:在主機作業系統中使用 VMware Workstation 掛載 VMDK 檔案
這個方法需要在你的物理計算機上運行的 Windows 或 Linux 操作系統上安裝 VMware Workstation。VMware Workstation 提供了一個很好的功能,允許你將 VMDK 檔案掛載到你的主機操作系統上。支持 ESXi 格式的虛擬磁盤和與 VM 快照相關的增量磁盤。與本文中考慮的所有先前方法一樣,你的操作系統必須支持虛擬磁盤分區的文件系統。
如果你有虛擬機的快照,則在創建每個快照後會創建增量虛擬磁盤。如果你想要在創建其中一個快照後打開虛擬磁盤的狀態,你應該有一個父虛擬磁盤和可用的增量磁盤。在這種情況下,你應該將相應的增量虛擬磁盤掛載到你的主機操作系統上。與父虛擬磁盤相關的依賴將自動解析。
如果你有快照但希望打開父虛擬磁盤,請以只讀模式打開父虛擬磁盤。這是因為在父虛擬磁盤上進行更改可能會損壞快照或從帶有父虛擬磁盤的父虛擬機創建的鏈接克隆。只讀模式防止你在將磁盤掛載到主機操作系統後對虛擬磁盤進行寫入數據。如果使用此虛擬磁盤的虛擬機處於關閉狀態,或者如果特定虛擬機未使用此虛擬磁盤,則可以掛載 VMDK 虛擬磁盤文件。
讓我們看看如何掛載具有快照的 VMware Workstation VM 的 VMDK 虛擬磁碟。在 VM 的虛擬磁碟上有一個 NTFS 分區上安裝了 Windows。在拍攝第一個快照之後,在磁碟 C: 的根目錄中創建了Snapshot1.txt文件,類似地,在拍攝第二個快照之後,在那裡創建了Snapshot2.txt文件。第一個示例是針對 Linux 的,第二個示例是針對 Windows 的。在這個示例中使用了舊的 Windows XP VM 的虛擬磁碟文件。
示例 1:在 Linux 主機上掛載 VMDK
- 打開 VMware Workstation for Linux 並轉到文件>掛載虛擬磁碟。
- 點擊掛載磁碟,會彈出一個窗口。點擊瀏覽並選擇虛擬磁碟 VMDK 文件。
- 選擇在第二次虛擬機快照後創建的第二個差分虛擬磁碟的VMDK文件。在這種情況下,此文件的名稱顯示為VM_name-000002.vmdk(此示例中使用WinXP-test-000002.vmdk)。
- 在您的Linux文件系統上創建目錄以掛載VMDK格式的虛擬磁碟到該目錄。讓我們在Linux控制台中創建/mnt/vmdk/目錄。
mkdir /mnt/vmdk/
- 為您的用戶設置權限(在此示例中,用戶名為user1,並且是group1的成員):
chown -R user1:group1 /mnt/vmdk/
chmod -R 0775 /mnt/vmdk/
- 現在,選擇您已創建的目錄作為目標目錄,勾選“以唯讀模式掛載”選擇框,然後點擊Mount。
- 現在您可以在您的 Linux 檔案總管中打開 /mnt/vmdk/ 目錄,並瀏覽位於 VMDK 虛擬磁碟上的文件和目錄。您可以看到在此示例中創建第一和第二個快照後創建的 Snapshot1.txt 和 Snapshot2.txt 文件。這兩個文件中的每個都位於單獨的增量 VMDK 虛擬磁碟上。
- 完成虛擬磁碟內容操作後,請不要忘記從您主機 Linux 系統上的目錄(掛載點)卸載 VMDK 虛擬磁碟。
如果您更喜歡使用控制台界面,您可以使用以下命令在 Linux 主機上掛載 VMDK 磁碟映像:
vmware-mount /media/user1/vms/vm_name/vm_disk_name-000002.vmdk /mnt/vmdk
其中:
vm_name 是與此虛擬機相同的 VM 目錄名稱。在我們的示例中,WinXP-test 是 VM 名稱。
vm_disk_name 是虛擬磁碟的名稱(在此示例中使用 WinXP-test.vmdk)。
vm_disk_name-000001.vmdk是在拍攝第一個VM快照(在這種情況下為WinXP-test-000001.vmdk)後創建的第一個增量(差異)磁碟的名稱。
vm_disk_name-000002.vmdk是在拍攝第二個VM快照後相應地創建的第二個增量磁碟的名稱(在這種情況下為WinXP-test-000002.vmdk)。
- 掛載虛擬磁碟。默認情況下,虛擬磁碟以讀/寫模式掛載。您可以在命令行中使用-r鍵將磁碟掛載為唯讀模式。
vmware-mount /media/user1/vms/vm_name/vm_disk_name-000002.vmdk /mnt/vmdk
- 列出所有已掛載的VMDK虛擬磁碟:
vmware-mount -L
- 在完成使用已掛載的VMDK虛擬磁碟後,卸載所有虛擬磁碟:
vmware-mount -x
示例2:如何在Windows主機上掛載VMDK
在Windows中掛載VMDK文件的思路類似。除了VMware Workstation圖形用戶界面(GUI)中的文件>映射虛擬磁碟選項外,您還可以按照以下步驟操作。讓我們掛載在拍攝第一個VM快照後創建的第一個差分虛擬磁碟的VMDK文件。此VMDK文件的名稱格式如下:VM_name-000001.vmdk(本教程中打開的是WinXP-test-000001.vmdk)。
- 在Windows资源管理器中右键单击VMDK文件,然后单击映射虚拟磁盘。
- 选择挂载VMDK文件的参数。建议以只读模式打开VMDK文件,以防止在写入数据后对快照链中属于虚拟磁盘的任何可能造成损坏。在这种情况下,默认驱动器字母为Z:,如果选择了适当的复选框,则在映射后驱动器会自动在Windows资源管理器中打开。单击确定继续。
- 现在虚拟磁盘已作为Z:盘在Windows中挂载,您可以读取vmdk文件内容。在下面的截图中,您可以看到在第一次快照后创建的Snapshot1.txt文件。由于在第二个VM快照后创建了该文件,因此Snapshot2.txt文件丢失,而我们已经打开了与第一个VM快照相关的增量虚拟磁盘。
- 完成使用映射的 VMDK 虛擬磁碟後,不要忘記斷開該磁碟。右鍵點擊適當的 VMDK 檔案,然後點擊斷開虛擬磁碟。斷開虛擬磁碟後,您可以啟動使用此虛擬磁碟的 VM。
方法 2:使用 7-zip 從 VMDK 檔案中提取內容
如果您想知道如何在不運行虛擬機器的情況下打開 VMDK 檔案,您可以安裝 7-zip 並從虛擬磁碟映像中提取內容。 7-zip 是一個免費工具,用於對文件進行存檔和從存檔和其他映像中解壓文件。 您可以將 7zip 用作 vmdk 提取器。 這個工具可以在 Linux 和 Windows 機器上使用。
7-zip 可以打開vmdk和 –flat.vmdk檔案(如果描述符vmdk檔案丟失,此實用程序可以打開單個 –flat.vmdk檔案)- 7-zip 實際上是用於 ESXi 格式的虛擬磁碟。 7-zip 無法打開在拍攝 VM 快照後創建的增量 VMDK 檔案。
如何在 Linux 上使用 7-zip 打開 VMDK 檔案s
- 在您的 Linux 機器上安裝完整的 7-zip 套件。 此示例中使用 Ubuntu。
apt-get install p7zip-full
- 使用 7-zip 列出 vmdk 檔案的內容:
7z l vm_name.vmdk
- 讓我們找出檔案名稱中包含「boot」的檔案,例如:
7z l /media/user1/vms/WinXP-test/WinXP-test.vmdk | grep boot[.]
其中user1是我們Linux使用者的名稱,l代表列出。
- 讓我們從VMDK映像中提取(e)boot.ini檔案:
7z e /media/user1/vms/WinXP-test/WinXP-test.vmdk boot.ini
您可以以相同的方式從VMDK檔案中提取其他檔案和目錄。
如何在Windows上使用7-zip開啟VMDK檔案
- 從官方網站下載相容版本的7-zip並在您的Windows機器上安裝該應用程式。使用EXE安裝程式更方便。
- 安裝7-zip在Windows後,當您在Windows Explorer中右鍵單擊任何文件或文件夾時,將添加新的7-zip選項到上下文菜單中(請參見下面的截圖)。使用這些選項立即打開VMDK文件作為存檔或提取文件。
- 在下面的截圖中,顯示了在Windows中使用的7-zip的GUI中顯示的獨立Win-test2-flat.vmdk文件的內容。您可以提取您需要的VMDK內容。
如何在Linux中掛載VMDK文件(其他方法)
Linux最強大的功能之一是即使使用內置工具,也能在控制台中執行最高數量的操作。這些工具將幫助您掛載VMDK文件並訪問存儲在虛擬磁盤上的內容。提供的示例中使用Ubuntu Linux。
方法1:如何 掛載VMDK文件使用/dev/loop
循環設備是Linux中的虛擬設備,使文件可作為區塊設備訪問,可用於掛載包含文件系統的磁盤映像。循環設備被命名為/dev/loopX,其中X是循環設備的號碼。此方法適用於掛載-flat.vmdk文件,即使沒有虛擬磁盤描述符。
讓我們探索如何在Linux中掛載VMDK文件以訪問虛擬磁盤的文件。這是一個包含一個分區的ESXi格式虛擬磁盤,缺少描述符文件。很久以前,在該虛擬磁盤上安裝了Windows XP。
- 使用以下兩個命令之一來檢查Linux系統上現有循環設備的數量。
fdisk -l | grep /dev/loop
df -h | grep /dev/loop
- 在我們的情況下,號碼1到21的設備已經存在(/dev/loop1 – /dev/loop21)。因此,讓我們創建循環設備號碼30 – 這個號碼是空閒的。我們將將此設備與-flat.vmdk文件關聯。
losetup /dev/loop30 /vms/Win-test2-flat.vmdk
-
losetup -o 32256 /dev/loop31 /dev/loop30
32256是偏移量,對於使用Windows XP/Server 2003及舊版Windows格式化的磁盤來說,它是63*512(63是分割分區的第一個扇區的號碼,512位元組是扇區大小)。對於Windows 7/Server 2008及更新版本的Windows,請嘗試偏移量105906176。
您可以使用以下命令獲取有關扇區大小和啟動啟動的第一個扇區的信息:
fdisk -l /dev/loop30 /vms/Win-test2-flat.vmdk
作為替代方案,對於包含多個分區的虛擬磁盤,您可以使用parted來確定每個分區的開始和結束:
parted /dev/loop30
在parted控制台中,輸入以下命令:
unit
B
print
- 創建一個目錄作為 VMDK 映像的掛載點:
mkdir /mnt/vmdk-image
- 將與 VMDK 映像關聯的回環設備掛載到創建的目錄中:
mount /dev/loop31 /mnt/vmdk-image
- 列出已掛載映像的內容:
ls -al /mnt/vmdk-image
- 完成虛擬磁碟的工作後,卸載vmdk映像並斷開迴圈設備:
umount /mnt/vmdk-image
losetup -d /dev/loop31
方法2:使用kpartx掛載VMDK文件
kpartx是一個工具,可以將映像文件中的分區掛載到您真實的Linux文件系統目錄中。此工具可用於為塊設備的分區設置設備映射。此方法也適用於在ESXi服務器上使用的-flat.vmdk映像的掛載。讓我們看看如何掛載上一個例子中使用的-flat.vmdk文件。
- 安裝kpartx:
apt-get install kpartx
- 將VMDK映像的分區映射添加到詳細操作模式中:
kpartx -av /vms/Win-test2-flat.vmdk
- 將分區掛載到之前準備好的/mnt/vmdk-image目錄:
mount /dev/mapper/loop30p1 /mnt/vmdk-image/
其中loop30是循環設備的編號,p1是映像內的分區號(磁碟映像上的第一個分區)。
- 列出您已掛載的虛擬磁碟分區的內容:
ls -al /mnt/vmdk-image/
- 當您完成對VMDK映像文件的操作後,卸載VMDK虛擬磁碟映像:
umount /mnt/vmdk-image
kpartx -d /vms/Win-test2-flat.vmdk
結論
了解多種提取VMDK內容的方法能夠提供靈活性和可靠性,因為在特定情況下,每種方法都可能是最佳選擇。此外,除了這些知識之外,還最好備份您的虛擬機器。
NAKIVO Backup & Replication 可以以最佳方式备份和恢复在 VMware vSphere 上运行的虚拟机。您可以将整个虚拟机、特定虚拟磁盘或备份的单个文件恢复到自定义位置。
Source:
https://www.nakivo.com/blog/extract-content-vmdk-files-step-step-guide/