VMDK ファイルを開き、マウントし、データを抽出する方法
VMDKファイルには、仮想マシンのハードディスクの内容が保存されています。OSの破損、更新の失敗、マルウェア、または設定エラーなどの理由で仮想マシンの起動に失敗した場合でも、その仮想ディスク内のデータにアクセスできる可能性があります。</p>
<p> このガイドでは、WindowsおよびLinux環境において、VMware Toolsやその他の方法を使用してVMDKファイルを開き、マウントし、データを抽出する方法について説明します。これらの方法を用いれば、仮想マシンを起動しなくてもファイルにアクセスすることができます。 なお、ここで説明する方法は、暗号化されていない、または深刻な破損がないVMDKファイルにのみ適用されることに注意してください。
VMDK ファイルとは?
VMDK(Virtual Machine Disk)は、VMware が開発したオープンな仮想ディスクファイル形式です。この形式のファイルは .vmdk という拡張子を使用し、 VMware と VirtualBoxでサポートされています。
VMware ESXi サーバーでは、VMDK は通常、データストア上に 2 つの別々のファイルとして保存されます。1 つは小さな仮想ディスク記述子ファイル、もう 1 つは生のディスクデータを含む仮想ディスクエクステントファイルです。 記述子ファイルは通常、 diskname.vmdkという命名規則に従いますが、実際のデータを含むエクステントファイルは diskname-flat.vmdkという名前が付けられます。
VMware Workstation では、仮想ディスクは多くの場合、単一の diskname.vmdk ファイル(モノリシック・スパース形式)として保存されます。この場合、記述子情報はディスクデータを格納する同じファイル内に埋め込まれています。仮想ディスク記述子は、ディスクの構造、ジオメトリ、仮想ハードウェアのバージョン、および一意の識別子を定義します。
仮想ディスク記述子ファイル
仮想ディスク記述子はプレーンテキストとして保存されます。以下のスクリーンショットの左側には、ESXi 形式の記述子ファイル(任意のテキストエディタで開くことができる .vmdk ファイル)が表示されています。右側には、VMware Workstation 形式で作成された単一の .vmdk ファイル内に埋め込まれた記述子データが表示されています。 この例では、ファイルはHEXエディタで開かれています。

図に示すように、Workstation形式の単一ファイル( .vmdk )に埋め込まれた記述子データは、オフセット0x200(バイトアドレス)から始まります。0x200を16進数から10進数に変換すると、0x200(16進数)=512(10進数)となります。 つまり、VMDKファイルから埋め込み記述子を抽出するには、バイト512から始まるデータ部分をコピーする必要があります。
注: 埋め込みディスク記述子の抽出、編集、インポートに関する詳細な手順については、変換に関するブログ記事を参照してください。 VMware仮想マシンからHyper-V仮想マシンへ
仮想ディスクデータファイル
以下のスクリーンショットでは、2つの仮想ディスクファイルがHEXエディタで開かれています。 両方のディスクには同じオペレーティングシステムがインストールされており、最初のパーティションは Windows の組み込みディスクユーティリティを使用して作成およびフォーマットされています。スクリーンショットの左側には、 -flat.vmdk ファイル(ESXi 形式)が表示されています。このファイルでは、生のディスクデータはオフセット 0x00000000 から始まります。
右側には、VMware Workstation 形式の VMDK が表示されています。 この場合、実際のディスクコンテンツの前に記述子とメタデータが埋め込まれているため、同じディスクデータはファイルの先頭ではなく、オフセット 0x00150000 から始まります。

VMDK ファイルを開いたりマウントしたりする前に、ディスクの破損を防ぐため、データのバックアップが確実に取られていることを確認してください。
仮想マシンを起動して VMDK ファイルを開く 2 つの方法
まず、仮想マシンを起動して VMDK ファイルを開く方法から見ていきましょう。これらの方法は簡単で、広く適用可能です。ただし、ホストシステムにハイパーバイザー(VMware ESXi、VMware Workstation、VMware Player、または Oracle VirtualBox)がインストールされている必要があります。
方法 1:VM上のOSが動作しなくなってもLive DVDを使用する
この方法は、仮想マシンが外部メディアからまだ起動できることを前提としています。物理的なDVDの代わりに、ISOイメージをVMの仮想DVDドライブにマウントして、そこから起動することもできます。
Live DVDからオペレーティングシステムを起動した後、VMDKファイルのパーティションをマウントし、VMに接続されたUSBドライブ、ホストマシン、またはネットワーク経由で別のシステムにデータをコピーできます。一部のLive DVDディストリビューションでは、パーティションが自動的にマウントされます。
このアプローチは、インストール済みのオペレーティングシステムが起動に失敗した際に、物理コンピュータからファイルを復旧させる方法と似ています。VMware ESXiおよびVMware Workstation/Player上のVMDKファイルからデータを抽出するために使用できます。
ライブOSが、仮想ディスク内で使用されているファイルシステムに対応していることを確認してください。たとえば、WindowsはEXT3、EXT4、ReiserFSなどのLinuxファイルシステムをネイティブではサポートしていません。一方、Linuxベースのライブディストリビューションは通常、NTFSやFAT32などのWindowsファイルシステムに対応しているため、起動できないWindows仮想マシンからデータを復旧する際に実用的な選択肢となります。
例:ESXi での VMDK ファイルの開く方法
次のようなシナリオを考えてみましょう。 ESXiホスト 上で Windows Server 2016 を実行している仮想マシンが起動に失敗しましたが、その VMDK ファイルに保存されているファイルを取り出す必要があります。この仮想ディスクには、システム(ブート)パーティションとプライマリ C: ドライブの 2 つの NTFS パーティションが含まれています。 この例では、公式の Ubuntu 18 インストール ISO をライブ DVD として使用し、仮想ディスクにアクセスして必要なデータをコピーします。
注: この方法は、VMware Workstation 17、ESXi 9.0、Windows Server 2025、Ubuntu Linux 24.04 を含む、より新しい製品バージョンにも適用されます。 具体的なインターフェースの要素は若干異なる場合がありますが、基本的なワークフローは同じです。
- VM を実行している ESXi ホストからアクセス可能なデータストアに ISO イメージをアップロードします。
- VMware vSphere Client を開き、”ホストとクラスタ”に移動して、対象の VM を選択し、”設定の編集”をクリックします。

- VM の設定ウィンドウで、”CD/DVD ドライブ”オプションに移動します。必要な ISO ファイルがデータストアにある場合は、”データストアの ISO ファイル”を選択します。 次に、”参照”をクリックし、適切なISOファイルを選択します。この例では、ファイル名は
ubuntu-18.04.1-desktop-amd64.isoです。
- VMを起動し、ISOイメージからブートして、”インストールせずにUbuntuを試す”を選択します。Live DVDメディアからUbuntuが起動したら、コンソール(ターミナル)を開きます。
- root権限を取得します:
sudo -i - 利用可能なハードディスクデバイスを一覧表示します:
ls -al /dev/sd*2つのパーティションがあります –
/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: ドライブとして使用されるパーティションです。ESXi ホストに USB ハードディスクドライブ (HDD) を接続し、USB パススルーを使用して仮想マシンに接続することで、マウントされた VMDK から必要なファイルをコピーできます。 あるいは、SMB(CIFS)共有を使用して、ネットワーク経由でファイルを転送することもできます。
この例では、192.168.17.125でホストされているSMB共有にデータがコピーされます。共有パスは\192.168.17.125shareで、ユーザーuser10には書き込み権限があります。
- ライブ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 ファイルのコピーは正常に完了しました。これは、VM 上のオペレーティングシステムが起動できない場合に、VMDK ファイルからデータをコピーする最初の方法を示しています。この方法は、VMware Player および VMware Workstation でも同様に利用できます。
方法 2:正常に動作している仮想マシン(ESXi/Workstation/Player)に VMDK ファイルを仮想ディスクとしてマウントする
この方法は前の方法と似ていますが、外部メディアから起動する代わりに、正常に動作しているオペレーティングシステムを持つ既存の仮想マシンに VMDK ファイルを接続します。VMDK は、VMware ESXi、VMware Workstation、または VMware Player 上で実行されている仮想マシンに、追加の仮想ディスクとして追加できます。
VMware Workstation または Player 上で ESXi 仮想マシンから VMDK ファイルを開く必要がある場合は、記述子ファイルとエクステントファイル(vmdk および -flat.vmdk)の両方を、Workstation または Player がインストールされているホストからアクセス可能なローカルディスクにコピーしてください。ソース仮想マシンに スナップショットがある場合は、親ディスクファイルに加えて、関連するデルタ(差分)VMDK ファイルも必ずコピーしてください。
以下の例はこのアプローチを示しています:
- 例 1:同じ ESXi ホスト上の別の VM に VMDK ファイルをアタッチして、その VM の VMDK ファイルを開きます。
- 例 2:VMware Workstation で実行中の VM に ESXi VM の VMDK ファイルをアタッチして、データを抽出します。
正常に動作している VM のオペレーティングシステムが、アタッチされた VMDK ファイルで使用されているファイルシステムをサポートしていることを確認してください。そうでない場合、パーティションにアクセスできない可能性があります。
例 1: ESXi 上で実行中の VM に仮想ディスクをマウントする
- ファイルを抽出するためにアクセスしたい仮想ディスクを持つ VM の電源を切ります。
- ESXi データストア内でその仮想ディスクを探します。
- ディスクのロックに関連する問題を回避するため、仮想ディスクを同じデータストア内の別のディレクトリ、または別のデータストアにコピーします。 この例では、Win-test2 Windows VM に属する”
Win-test2.vmdk“という名前の VMDK ファイルを開きます。ESXi ホストは” vCenter“によって管理されています。vCenter を使用しないスタンドアロンの ESXi ホストを使用している場合でも、ワークフローは同じで、ユーザー インターフェイスだけが異なります。 - VMware vSphere Client を開き、[ストレージ] に移動して、必要な VMDK ファイルがあるデータストアを選択します。 VMDK ファイルを選択し、”コピー先”をクリックします。
注: vCenter を使用しないスタンドアロンの ESXi ホストを使用している場合は、Web ブラウザに ESXi ホストの IP アドレスを入力して、VMware Host Client を開きます。 次に、[Storage] > [Datastore Name] > [Datastore Browser] に移動し、VMDK ファイルを選択して [Copy] をクリックします。コピー先を選択し、操作を確認します。
ESXi コンソールに直接アクセスするか、SSH 経由で接続してファイルをコピーすることもできます。

- 開いたウィンドウで、コピー先を選択します。VMDK ファイルは、同じデータストア内の場所または別のデータストアにコピーできます。 この例では、ファイルを同じデータストアのルートディレクトリにコピーします。
.vmdk記述子ファイルと-flat.vmdkファイルの両方がコピーされます。
- VMDK ファイルを、正常に動作しているオペレーティングシステムを搭載した正常な VM にアタッチします。この例では、同じ ESXi ホスト上で Windows Server 2016 を実行している VM (WinServer2016) を使用します。仮想ディスクは、VM の実行中にアタッチできます。
vSphere Client で、[ホストとクラスター] に移動し、正常な VM を選択して右クリックし、[設定の編集] をクリックします。

- 表示されるウィンドウで、[新しいデバイスの追加] をクリックし、[既存のハードディスク] を選択します。

- 事前に作成しておいた VMDK ファイルのコピーを選択します。この例では、データストアのルートディレクトリにある
Win-test2.vmdkのコピーが選択されました。
- 仮想ディスクがアタッチされている正常なVMがまだ実行されていない場合は、そのVMの電源を入れます。この例では、Windows Server 2016 VMの実行中に仮想ディスクが追加されます(ホット追加)。
- ゲストのWindows OSで、”コンピュータの管理” > “ディスクの管理”(またはコマンドラインで
diskmgmt.mscを実行)を開き、アタッチされた仮想ディスクを探します。デフォルトでは、新しいディスクはオフラインになっています。 ディスクを右クリックし、”オンライン”を選択します。パーティションには自動的にドライブ文字が割り当てられます。割り当てられていない場合は、パーティションを右クリックし、”ドライブ文字とパスの変更”をクリックします。
これで、接続された VMDK ファイル上のファイルやディレクトリに対して、完全な読み取り/書き込みアクセスが可能になります。Windows エクスプローラーでマウントされたディスクを開き、必要なデータをコピーします。
不要なファイル(マルウェア関連のファイルなど)を削除することもできますが、慎重に行ってください。VMDK ファイルにスナップショットが関連付けられている場合、データの変更や削除によってスナップショットの整合性に影響が出る可能性があります。

例 2: VMware Workstation または Player で実行中の仮想マシンに仮想ディスクをマウントする
この例は前の例と似ていますが、VMware Workstation で実行中の仮想マシンを使用して、ESXi 仮想マシンの VMDK ファイルを開きます。 この方法は、ESXiデータストアに仮想ディスクのコピーを作成するための空き容量が不足している場合に役立ちます。
この場合、前述のWin-test2 VMの仮想ディスクをVMware WorkstationのVMにマウントし、そのデータを抽出します。
- VMware vSphere Clientで、[ストレージ] > [Datastore name] > [ファイル] の順に選択し、対象のVMDKファイルを選択して[ダウンロード]をクリックします。
前述の通り、ESXiの仮想ディスクは、ディスクリプタ(
.vmdk)ファイルとエクステント(-flat.vmdk)ファイルで構成されています。VMware WorkstationまたはVMware Playerがインストールされているマシンに、両方のファイルをダウンロードする必要があります。HTML5 vSphere Clientを使用してESXiデータストアから仮想ディスクをダウンロードする場合、これらのファイルは自動的に1つのZIPアーカイブにまとめられます。あるいは、ESXiホストでSSHアクセスを有効にし、データストアディレクトリに移動して、 WinSCPなどのSCPクライアントを使用して、両方のディスクファイルをコンピュータに手動でコピーすることもできます。
注: シンプロビジョニング VMFSデータストアから仮想ディスクをダウンロードすると、結果として得られる
-flat.vmdkファイルは、シックプロビジョニングされたディスクと同様に、完全にプロビジョニングされたサイズまで拡張されます。これは、シンプロビジョニングが VMFSファイルシステム レベルで実装されているためです。
これで、ZIPアーカイブとしてダウンロードされた2つのESXi仮想ディスクファイルを確認できます。VMFSデータストア上のシンプロビジョニングされたディスクのサイズは約2 GB(上のスクリーンショットを参照)ですが、ワークステーションにダウンロードされた同じディスクのサイズは約8 GBです(下のスクリーンショットを参照)。
- アーカイブから2つのファイルを抽出します。 デフォルトでは、これらは”
Win-test2.vmdk“という名前のディレクトリに解凍されます。これは、ファイル拡張子を除いたアーカイブ名と一致しています。
- この手順では、VMware Workstation または VMware Player がインストールされたマシン上で、OS が正常に動作している VM が必要です。前の例では Windows Server 2016 を実行している VM を使用しましたが、この例では Windows Server 2008 を実行している VM を使用します。新しいバージョンの Windows でもワークフローは同じです。
VMware Workstation または VMware Player を開き、正常に動作している仮想マシンを選択して、仮想マシンの設定を編集します。

- [ハードウェア] タブで、[追加] ボタンをクリックします。

- [ハードウェアの追加ウィザード] で、ハードウェアの種類として [ハードディスク] を選択します。次に、ディスクの種類を選択します(推奨値のままにしておいても構いません)。[ディスクの選択] 画面で、[既存の仮想ディスクを使用する] を選択します。

- ZIP アーカイブから抽出した vmdk ファイル(
flat.vmdkではないもの)を選択します。 ファイルを参照するか、ファイルパスを手動で入力できます。
この例では、ESXi 6.5 および VMware Workstation 15 を使用しています。Windows Server 2008 を実行している VMware Workstation の仮想マシンはハードウェアバージョン 12(VM バージョン 12)を使用していますが、仮想ディスクが接続される ESXi 仮想マシンは VM バージョン 7 を使用しています。 新しいバージョンでも手順は同じです。
- VMware Workstation で仮想ディスクをアタッチしようとすると、次の互換性エラーメッセージが表示されます。
選択した仮想ディスクは、この Workstation 12.x 仮想マシンと互換性がありません。このディスクを追加すると、この仮想マシンは以前の VMware 製品と互換性がなくなります。

このエラーは、ディスク記述子ファイル(ESXi VM の仮想ディスクの場合は軽量 vmdk ファイル)を編集することで修正できます。 テキストエディタで VMDK ファイルを開き、
Ddb.virtualHWVersionという文字列内の数値を変更します。この例では、13 を 12 に変更します。注: VMware Workstation の仮想マシンでは、仮想ディスク記述子が VMDK ファイル内に埋め込まれていることに注意してください(ESXi 仮想ディスクは別の記述子ファイルを使用します)。

ファイルを編集すると、仮想ディスクが既存の仮想マシンに正常に追加されます。
- 仮想マシンの電源を入れます。
- Windowsの”ディスクの管理”を開き、仮想ディスクの状態を”オンライン”に変更し、パーティションにドライブ文字を割り当てて、ファイルを参照します。

仮想マシンを起動せずにVMDKファイルからデータを抽出する方法
仮想マシンを起動する必要がない方法には、いくつかの実用的な利点があります。場合によっては、ハイパーバイザーがまったく不要になることもあります。その代わりに、ホストOS上でVMDKファイルを直接マウントし、その内容に素早くアクセスすることができます。
方法 1: VMware Workstation を使用してホスト OS に VMDK ファイルをマウントする
この方法では、Windows または Linux ホストに VMware Workstation がインストールされている必要があります。VMware Workstation には、VMDK ファイルをホスト OS に直接マウントできる機能が含まれています。ESXi 形式のディスクや、スナップショットに関連付けられたデルタディスクがサポートされています。前述の方法と同様に、ホスト OS は仮想ディスクパーティションで使用されているファイルシステムをサポートしている必要があります。
スナップショットが作成されると、デルタ(差分)仮想ディスクが生成されます。特定のスナップショット時点での仮想マシンの状態にアクセスするには、親ディスクと対応するデルタディスクの両方が利用可能である必要があります。この場合、適切なデルタディスクをホスト OS にマウントする必要があります。親ディスクへの依存関係は自動的に解決されます。
スナップショットが存在するが、親ディスクを直接マウントしたい場合は、読み取り専用モードを使用してください。 親ディスクを変更すると、そのVMから作成されたスナップショットやリンクドクローンが破損する可能性があります。読み取り専用モードでは、ディスクのマウント後に書き込み操作が行えないようになっています。VMDKファイルは、そのファイルを使用しているVMの電源がオフになっている場合、またはそのディスクをアクティブに使用しているVMがない場合にのみマウントできます。
次の例は、スナップショットを持つVMware WorkstationのVMからVMDKファイルをマウントする方法を示しています。このシナリオでは、Windowsが単一のNTFSパーティションにインストールされています。 最初のスナップショット作成後、ドライブ C: のルートディレクトリに”Snapshot1.txt”というファイルが作成されました。2 回目のスナップショット作成後には、”Snapshot2.txt”が作成されました。1 つ目の例では Linux を、2 つ目の例では Windows を使用しています。古い Windows XP VM の仮想ディスクファイルを使用していますが、他の Windows バージョンにも同じ原理が適用されます。
例 1: Linux ホストでの VMDK のマウント
- VMware Workstation for Linux を開き、[ファイル] メニューを選択します。 > [仮想ディスクのマウント] を選択します。

- [ディスクのマウント] をクリックします。ポップアップウィンドウで [参照] をクリックし、VMDK ファイルを選択します。

- 2 回目の VM スナップショット後に作成された 2 番目のデルタ(差分)ディスクの VMDK ファイルを選択します。 このような場合、ファイル名は”
VM_name-000002.vmdk“という形式になります(例:WinXP-test-000002.vmdk)。
- VMDK ファイルのマウントポイントとして使用するディレクトリを、Linux ファイルシステム上に作成します。 Linux コンソールで、
/mnt/vmdk/ ディレクトリを作成しましょう。mkdir /mnt/vmdk/ - ユーザーに適した権限を設定します(この例では、ユーザー名は user1、グループは group1 に属しています)。
chown -R user1:group1 /mnt/vmdk/ chmod -R 0775 /mnt/vmdk/ - 次に、作成したディレクトリをターゲットディレクトリとして選択し、”読み取り専用モードでマウント”チェックボックスをオンにして、”マウント”をクリックします。

- これで、Linux ファイルエクスプローラーで
/mnt/vmdk/ ディレクトリを開き、マウントされた VMDK ファイルに保存されているファイルを閲覧できます。 この例では、1回目と2回目のスナップショット作成後に生成された”Snapshot1.txt”および”Snapshot2.txt”というファイルが表示されています。各ファイルは、別々のデルタVMDKディスク上に存在します。
- 操作終了後は、Linuxホスト上のディレクトリ(マウントポイント)からVMDKファイルをアンマウントすることを忘れないでください。

この例では、VMware Workstation 17.0 を使用して Ubuntu 22.04 上で VMDK ファイルのマウントおよびアンマウントに成功しました。
注: Ubuntu 24.04 では新しい Linux カーネル(6.8 以降)が使用されており、VMware 独自のカーネルモジュールとの互換性に影響を与える可能性があります。場合によっては、”VMware-fuseUI が応答していません”というエラーが発生することがあります。
これは、Linux 上で VMDK ファイルをマウントする際、Userspace ファイルシステム (FUSE) レイヤーと統合する VMware コンポーネントに依存しているためです。必要な FUSE モジュールまたはヘルパープロセスの初期化が正常に行われない場合、マウントインターフェースが応答しなくなる可能性があります。
互換性の問題が発生した場合は、サポートされているカーネルバージョンまたは以前の VMware Workstation リリースの使用をご検討ください。 ディスクマウントのサポートに関する最新情報については、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 は、最初のVMスナップショット(WinXP-test-000001.vmdk)の後に作成された最初のデルタ(差分)ディスクです。
vm_disk_name-000002.vmdk は、2番目のスナップショット(WinXP-test-000002.vmdk)の後に作成された2番目のデルタディスクです。
- 仮想ディスクをマウントします。デフォルトでは、仮想ディスクは読み書きモードでマウントされます。 コマンドラインで -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) の [ファイル] > [仮想ディスクのマップ] を使用できます。あるいは、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 以降)に搭載されています。
- Windows エクスプローラーで VMDK ファイルを右クリックし、[仮想ディスクのマッピング] をクリックします。

- VMDK ファイルをマウントするための適切なパラメータを選択します。スナップショットチェーン内の仮想ディスクが破損するのを防ぐため、ディスクを読み取り専用モードで開くことをお勧めします。
デフォルトではドライブ文字が Z: に設定されており、対応するチェックボックスが選択されている場合、マッピング後に Windows エクスプローラーでディスクが自動的に開かれます。[OK] をクリックして続行します。

- これで、仮想ディスクが Windows 上でディスク Z: としてマウントされ、その内容を読み取ることができます。以下のスクリーンショットでは、最初のスナップショットを撮影した後に作成された Snapshot1.txt ファイルを確認できます。Snapshot2.txt ファイルは、2 回目のスナップショット後に作成されたものであり、マウントされているデルタディスクは最初のスナップショットに対応しているため、表示されていません。

- マッピングされた VMDK ファイルでの作業が終了したら、ディスクの切断を忘れないでください。 該当する VMDK ファイルを右クリックし、[仮想ディスクの切断] を選択します。仮想ディスクを切断した後、そのディスクを使用している VM の電源を入れることができます。

方法 2: 7-Zip を使用して VMDK ファイルから内容を抽出する
仮想マシンを実行せずに VMDK ファイルを開く必要がある場合は、7-Zip を使用して仮想ディスクイメージからデータを抽出できます。 7-Zipは、さまざまなアーカイブ形式やディスクイメージを開いて内容を抽出できる無料のファイルアーカイバです。WindowsおよびLinuxシステムの両方で使用できます。
7-Zipは、 .vmdk および -flat.vmdk ファイル(記述子ファイルがない場合は、スタンドアロンの -flat.vmdk ファイルを含む)を開くことができます。これは通常、ESXi形式のディスクに適用されます。ただし、7-Zipは、VMのスナップショット後に作成されたデルタ(差分)VMDKファイルの開封には対応していません。
Linux で 7-Zip を使用して VMDK ファイルを開く方法
- 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イメージから
boot.iniファイルを抽出(e)してみましょう:7z e /media/user1/vms/WinXP-test/WinXP-test.vmdk boot.ini
同様に、VMDKファイルから他のファイルやディレクトリも抽出できます。
Windowsで7-Zipを使用してVMDKファイルを開く方法
- 公式サイト から互換性のあるバージョンの7-Zipをダウンロードし、Windowsマシンにアプリケーションをインストールします。利便性を高めるには、EXEインストーラーを使用してください。

- 以下のスクリーンショットでは、スタンドアロンファイル
Win-test2-flat.vmdkの内容が 7-Zip の GUI に表示されています。必要な VMDK の内容を抽出できます。
また、この動画をご覧になれば、VMware で VMDK ファイルを開き、VMDK データを抽出する方法をご確認いただけます:
Linux で VMDK ファイルをマウントする方法(その他の方法)
Linux には、コンソールから直接高度なディスク操作を実行できる強力なコマンドラインツールが用意されています。 これらの組み込みユーティリティを使用すると、VMDKファイルをマウントし、仮想ディスクに保存されているデータにアクセスできます。以下の例では、Ubuntu Linuxを使用しています。
方法1: /dev/loop
を使用してVMDKファイルをマウントする方法 ループデバイスは、Linuxにおける疑似デバイスであり、ファイルをブロックデバイスとしてアクセスできるようにします。これらは、ファイルシステムを含むディスクイメージをマウントするために一般的に使用されます。 ループデバイスの名前は /dev/loopXの形式で、X はデバイス番号を表します。この方法は、記述子ファイルが存在しない場合でも、 -flat.vmdk ファイルをマウントするのに適しています。
以下の例では、Linux で VMDK ファイルをマウントしてその内容にアクセスする方法を示します。この例では、単一のパーティションを持つ ESXi 形式の仮想ディスクを使用しており、記述子ファイルは利用できません。 このディスクには、もともとWindows XPがインストールされていました。
- 以下の2つのコマンドのいずれかを使用して、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、Windows Server 2003 およびそれ以前のバージョンでフォーマットされたディスクの場合、63 × 512 として計算されたオフセットです。この場合、63 はパーティションの開始セクタ、512 バイトはセクタサイズです。Windows 7、Windows Server 2008 およびそれ以降のバージョンでは、オフセットとして 105906176 を使用してください。
セクターサイズおよびブート開始に使用される最初のセクターに関する情報は、次のコマンドで確認できます:
fdisk -l /dev/loop30 /vms/Win-test2-flat.vmdk
あるいは、複数のパーティションを含む仮想ディスクの場合、parted を使用して各パーティションの開始位置と終了位置を特定することもできます:
parted /dev/loop30parted コンソールで、次のコマンドを入力します:
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ファイルシステムのディレクトリにマウントできるツールです。このツールを使用すると、ブロックデバイスのパーティションに対するデバイスマッピングを設定できます。この方法では、flat.vmdk ESXiサーバーで使用されるイメージのマウントも可能です。
- 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仮想ディスクイメージをアンマウントします。
umount /mnt/vmdk-image kpartx -d /vms/Win-test2-flat.vmdk
方法3: QEMU ネットワークブロックデバイス (NBD) の使用
この方法では、QEMU ユーティリティを使用して VMDK を標準のブロックデバイスとして公開します /dev/nbdN。これにより、Linux カーネルがそれをネイティブにマウントできるようになります。 この方法を使用するために VMware Workstation をインストールする必要はありません。root 権限が必要です。
- 仮想ディスクの破損を防ぐため、仮想マシンをシャットダウンしてください。
- qemu-nbd を含む QEMU ユーティリティパッケージをインストールします。
sudo apt install qemu-utils - ネットワークブロックデバイスカーネルモジュールをロードします:
sudo modprobe nbd - 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 - マウントされた仮想ディスク上のパーティションを特定します:
sudo fdisk -l /dev/nbd0出力には、
/dev/nbd0p1、/dev/nbd0p2などのパーティションが表示されます。 - マウントポイントを作成します:
sudo mkdir -p /mnt/vmdk必要に応じて、特定のユーザーに対する権限を設定します。
- パーティションをマウントします。この例では、パーティション 1 にデータが格納されています:
sudo mount /dev/nbd0p1 /mnt/vmdk
- これで、
/mnt/vmdk/ から VMDK の内容にアクセスできるようになります。 - 完了したら、ボリュームをアンマウントし、NBDデバイスを切断します:
sudo umount /mnt/vmdk sudo qemu-nbd -d /dev/nbd0
方法 4: guestmount を使用して VMDK ファイルをマウントする
guestmount は、パーティションや論理ボリュームを含むディスク構造を適切に処理するため、Linux 上で VMDK の内容にアクセスするための信頼性の高いツールです。 /dev/loopなどの古いツールで必要とされる手動でのオフセット計算は不要です。この方法を使用するには、root 権限が必要です。
- libguestfs-tools をインストールします。このパッケージには guestmount ユーティリティが含まれています。
sudo apt install libguestfs-tools - マウントしたい仮想ディスクを持つ VM をシャットダウンします。
- 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
- FUSEの設定ファイルを編集します。root権限でテキストエディタを使用して、
- 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など)とそのファイルシステムが表示されます。 - guestmount を使用して VMDK をマウントします。guestmount には、”自動検査”と”手動パーティションマウント”の 2 つの主な使用方法があります。ここでは、手動パーティションマウントを使用してみましょう (特定のパーティションに対して)
単一のパーティションのみが必要な場合は、直接指定できます:
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/ - これで、Linuxコンソール上で、あたかもローカルディレクトリであるかのように、VMDK内のファイルを表示、移動、コピーできるようになります:
ls -al /mnt/vmdk - 作業が完了したら、仮想ディスクをアンマウントします:
sudo guestunmount /mnt/vmdk/
別の方法として、FUSE を使用することもできます:
sudo fusermount -u /mnt/vmdk/
まとめ
仮想マシンが故障したり、アクセスできなくなったりした場合、VMDK ファイルを開いてデータを抽出する方法を理解しておくことは不可欠です。VMDK の内容にアクセスする方法を複数知っておくことで、状況に応じて最適なアプローチを選択できるため、柔軟性が高まります。同時に、データの可用性を確保し、復旧を容易にするためには、仮想マシンの信頼性の高いバックアップを維持することも同様に重要です。