VMDKファイルをVMwareで開く方法とデータを抽出する方法

理解していることは、VMDKファイルを開いてVMDKファイルからコンテンツを抽出する方法は、仮想マシンに問題が発生した場合に便利です。アプリケーションのインストールの問題、OSの更新、マルウェア攻撃、誤ってデータを削除するなどの問題が発生した後、VMを起動できないことがあります。これが発生すると、VMの仮想ディスクへのアクセスが失われます。

幸いなことに、WinZip、Linux Reader、またはVMware Workstation PlayerでVMDKファイルを開くことができます。VMDK仮想ディスクファイルの内容を回復する方法について学び続けてください。これらの方法は、仮想ディスクが暗号化されていないか、または破損していない場合にのみ適用されることに注意してください。

VMDKファイルとは何ですか?

VMDKは、VMwareによって開発されたオープンなフォーマットである仮想マシンディスクファイル形式です。この仮想ディスク形式は、ファイルの拡張子が.vmdkであり、VMwareおよびVirtualBoxの仮想マシンで使用されます。ただし、ESXiサーバーに存在する仮想マシンは、わずかに異なるフォーマットの.vmdk仮想ディスクを使用します。ESXiデータストアでは、仮想ディスク記述子と仮想ディスクの生データを含む仮想ディスクの範囲は、2つの別々のファイルです。

パターンの仮想ディスク記述子名は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.

埋め込まれたディスク記述子データがWorkstation形式のモノリシックvmdkファイルに書き込まれるアドレスの0x200から、つまり最初のバイトの番号から記述します。200 HEX値をバイナリおよび10進数形式に変換すると、次のようになります:

200 HEX = 1000000000バイナリ = 512 10進数

これは、vmdkファイルから埋め込まれた記述子を抽出する場合、512番目のバイトからデータの一部を抽出する必要があることを意味します。VMware仮想ディスク記述子ファイルに関する詳細情報や、埋め込まれた仮想ディスク記述子を抽出、編集、およびインポートする方法については、VMware VMsをHyper-V VMsに変換するブログ投稿で確認できます。

仮想ディスクデータファイル

スクリーンショットの下部には、2つの仮想ディスクファイルがHEXエディタで開かれています。両方の仮想ディスクには同じオペレーティングシステムがインストールされています(最初のパーティションは、組み込みのWindowsディスクユーティリティで作成およびフォーマットされました)。スクリーンショットの左側には、flat.vmdkファイルが表示されています(ESXi形式)。この仮想ディスクの0x00000000から生データが書き込まれます-flat.vmdkファイル。スクリーンショットの右側には、Workstation形式の仮想ディスクが表示され、同じデータが0x00150000(バイト番号5376)から書き込まれていますが、これはvmdkファイルの先頭ではありません。

これで理論を理解したので、実践の時間です。続行する前に、仮想ディスクが損傷する可能性を防ぐためにデータをバックアップすることをお勧めします。ディスクの操作は、自己の責任とリスクで行ってください。

VMを起動してVMDKファイルを開く2つの方法

既存のVMを起動してVMDKファイルを開くには、VMware ESXi、VMware Workstation、VMware Player、またはOracle VirtualBoxなどのハイパーバイザーを物理コンピュータにインストールする必要があります。ライブDVDを使用するか、VMDKファイルを仮想ディスクとしてマウントすることで、レガシーメソッドを選択できます。

方法1:VMのOSがクラッシュしていてもライブDVDを使用

この方法の背後にあるアイデアは、VMを持っており、DVDディスクからブートできるということです。ISOディスクイメージは、VMの仮想DVDドライブに挿入されたDVDディスクとして使用できます。DVDメディアからオペレーティングシステムをブートした後、仮想ディスクのパーティションをマウントし、VMに接続されたUSBハードディスクまたはホストマシン、またはネットワークを介して他のマシンにファイルをコピーできます。一部のLive DVDディストリビューションは、ディスク(パーティション)を自動的にマウントします。

この方法は古いものですが、原則は、インストールされたオペレーティングシステムがブートできない場合に物理的なコンピューターの物理的なディスクからファイルをコピーするのと似ています。この方法は、VMware ESXiおよびVMware Player/Workstationで実行されているVMのVMDKディスクからデータを抽出するために使用できます。

Live DVDからブートしたオペレーティングシステムが、アクセスしたい仮想ディスクのパーティションのファイルシステムを認識する必要があることに注意してください。たとえば、WindowsはデフォルトではEXT3、EXT4、ReiserFSなどのLinuxファイルシステムと連携できません。Windows上で追加のツールを使用すると、この問題を解決できる場合があります。一方、現代のLinuxはNTFSやFAT32などのWindowsファイルシステムを認識するため、Windows VMでブートできない仮想ディスクに保存されているファイルをコピーするためにLinuxベースのLive DVDディスクを使用できるのです。

例:ESXiでVMDKファイルを開く

この方法を適用するための例を考えてみましょう:Windows Server 2016を搭載したVMがあるVMがあるESXiホストがあり、VMのOSが起動できないが、VMDK仮想ディスクに記録されたファイルを取得する必要があります。仮想ディスクには、ブートシステムパーティションとディスクCの2つのNTFSパーティションがあります。この例では、公式のUbuntu 18インストールISOイメージを使用しています。UbuntuのインストールメディアはLive DVDとして使用できます。

注意:このブログ投稿で考慮されている製品の新しいバージョンのワークフローは同じです。VMware Workstation 17、ESXi 8.0、Windows Server 2019、Ubuntu Linux 22.04などを使用し、この記事で説明されている動作原理を使用できます。

  1. ISOイメージを、VMが存在するESXiホストからアクセス可能なデータストアにアップロードします。
  2. VMware vSphere Clientを開き、ホストとクラスタを選択し、VMを選択して設定を編集します。

  3. VM設定ウィンドウで、CD/DVD ドライブ オプションに移動します。ESXiホストからアクセス可能なデータストアにISOファイルがある場合は、データストア ISOファイル オプションを選択します。次に、CD/DVD メディアオプションで、参照 をクリックし、データストア上の適切なISOファイルを選択します。この場合、ファイル名はubuntu-18.04.1-desktop-amd64.isoです。

  4. VMを起動し、ISOイメージからブートし、Ubuntuをインストールせずに試すを選択します。UbuntuがライブDVDメディアからブートされたら、コンソール(端末)を開きます。
  5. root権限を取得します:

    sudo -i

  6. 利用可能なハードディスクデバイスをリストアップします:

    ls -al /dev/sd*

    2つのパーティションがあります – /dev/sda1/dev/sda2

  7. それぞれのパーティションに使用するマウントポイントを作成します:

    mkdir /mnt/win-disk1

    mkdir /mnt/win-disk2

  8. /dev/sda1を/mnt/win-disk1/にマウントします。

    /dev/sda2を/mnt/win-disk2/にマウントします。

  9. それから、マウントされたパーティションのファイルとディレクトリをリストします:

    /mnt/win-disk2/のファイルとディレクトリをリストします。

    /mnt/win-disk1/のファイルとディレクトリをリストします。

    上のスクリーンショットで見るとおり、/mnt/win-disk2にマウントされたパーティションはWindowsのディスクC:として使用されています。

  10. 今、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

  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

  14. ls -al /mnt/smb-share

    上のスクリーンショットで見ると、この例で使用されたbootmgrファイルが正常にコピーされました。仮想マシンにインストールされたオペレーティングシステムが起動できない場合、VMDKファイルの内容を別の場所にコピーする最初の方法がわかりました。この方法をVMware PlayerまたはVMware Workstationで使用するロジックは同じです。

方法2: 健全なVM(ESXi/Workstation/Player)にVMDKファイルを仮想ディスクとしてマウントする

この方法は前の方法と似ていますが、この場合、VMDK仮想ディスクは機能するオペレーティングシステムを持つ既存の仮想マシンにアタッチされる必要があります。ESXiホスト、VMware Workstation、およびVMware Playerで実行されている既存のVMにVMDKファイルを追加の仮想ディスクとしてアタッチできます。

ESXi VMのVMDKファイルをVMware WorkstationまたはPlayerで開く場合は、仮想ディスクとその記述子(vmdkflat.vmdkファイル)を、VMware WorkstationまたはPlayerがインストールされたコンピュータでアクセス可能な物理ディスクにコピーする必要があります。VMのスナップショットが取得され、その後VMディスクに変更が加えられた場合は、親VMDKファイルに加えて、デルタ(差分)仮想ディスクのVMDKファイルもコピーすることを忘れないでください。

2つの例を考えてみましょう:

例1:ESXiホスト上の別のVMを使用して、1つのVMのVMDK仮想ディスクを開く方法(どちらもESXiホストに登録されています)

例2:VMware WorkstationフォーマットのVMに仮想ディスクをアタッチしてESXi VMのVMDK仮想ディスクからコンテンツを抽出する方法

第1(正常な)VM上の動作中のオペレーティングシステムは、ファイルシステムが非ブート可能なオペレーティングシステム(ファイルを抽出するために追加の仮想ディスクとしてアタッチしたいVMのVMDKファイルを持つVM)に使用されるファイルシステムと互換性がある必要があります。

例1:ESXi上で実行されているVMに仮想ディスクをマウントする

  1. ファイルを抽出したい仮想ディスクを使用するVMをオフにします。
  2. ESXiデータストアでこの仮想ディスクを見つけます。
  3. 同じデータストア内の別のディレクトリまたは別のデータストアに仮想ディスクをコピーして、仮想ディスクのロックによるエラーを防止します。この例では、Win-test2.vmdkという名前のVMDKファイルを開く方法を示します(これは私たちの場合のWin-test2 Windows仮想マシンの仮想ディスクです)。ESXiホストはvCenterによって管理されています。vCenterなしでスタンドアロンのESXiホストを使用する場合は、この例で説明されているロジックを使用できます。違いはユーザーインターフェースのみです。
  4. VMware vSphere Clientを開き、Storageに移動し、必要なVMDKファイルが存在するデータストアを選択します。VMDKファイルを選択してコピーをクリックします。

    注意:スタンドアロンのESXiホストを使用しており、vCenterがない場合は、WebブラウザにESXiホストのIPアドレスを入力してVMware Host Clientを開き、Storage > [データストア名] > データストアブラウザに移動し、VMDKファイルを選択してコピーします。宛先を選択し、コピーボタンを押して確認します。仮想ディスクは、VMware vSphere ClientおよびVMware Host ClientのWebインターフェイスではVMDKファイルとして表示されますが、仮想ディスクはflat.vmdkファイルとvmdkファイル(仮想ディスクとその記述子)で構成されています。ファイルをコピーするためにサーバー上で直接ESXiコンソールを開くか、SSH経由で接続しても構いません。

  5. 開いたウィンドウで、宛先を選択します。このデモンストレーションでは、VMDKファイルを同じデータストアのルートディレクトリにコピーします。この場合、vmdkファイルと-flat.vmdkファイルの両方がコピーされます。

  6. 今、別の健全な VM に VMDK 仮想ディスクをアタッチする必要があります。この例では、同じ ESXi ホスト上で Windows Server 2016 を実行している VM(VM 名はWinServer2016)が使用されています。VM が実行中でも、この健全な VM に仮想ディスクをアタッチできます。vSphere Client で、ホストとクラスタに移動し、健全な VM を選択し、VM を右クリックして設定の編集をクリックします。

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

  8. 以前に作成した VMDK ファイルのコピーを選択します。この例では、データストアのルートディレクトリにあるWin-test2.vmdkのコピーが選択されています。

  9. まだ起動されていない場合は、興味のある仮想ディスクをアタッチした健全な VM を起動します。実行中の Windows Server 2016 VM に対して仮想ディスクが追加されます。
  10. ゲストWindows OSで、コンピューターの管理>ディスクの管理に移動してください(またはコマンドラインでdiskmgmt.mscを実行します)そして、アタッチされた仮想ディスクを見つけます。デフォルトでは、新しくアタッチされたディスクはオフラインです。ディスクを右クリックし、オンラインをクリックしてください。追加されたディスクのパーティションには自動的にディスクレターが割り当てられます。パーティションにディスクレターが割り当てられていない場合は、パーティションを右クリックし、ドライブ レターとパスの変更をクリックしてください。

  11. これで、VMDK仮想ディスクのファイルとディレクトリに完全な(読み取り/書き込み)アクセスが可能です。単にWindows Explorerでマウントされたディスクを開いて、健全なVMにマウントされたVMDKファイルの必要なコンテンツをコピーしてください。また、不要なデータをアタッチされたVMDK仮想ディスクから削除することもできます(たとえば、ウイルスによって作成されたファイルなど)、ただし、関連するスナップショットがマウントされたVMDKディスクに対して存在する場合は慎重にして、仮想ディスクを損傷しないようにしてください。

例2:VMware PlayerまたはWorkstationで実行されているVMに仮想ディスクをマウントする

この例は前のものに似ていますが、VMware Workstationで実行されているVMを使用して、ESXi VMのVMDKファイルを開きます。たとえば、ESXiデータストアに仮想ディスクをコピーするための空きディスク容量がない場合に、この方法を使用できます。前の例で言及されたWin-test2 VMの仮想ディスクは、そのコンテンツを抽出するためにVMware Workstation VMにマウントされます。

  1. VMware vSphereクライアントで、ストレージ>[データストア名]>ファイルに移動し、VMDKファイルを選択してダウンロードします。

    思い出しているように、ESXi形式の仮想ディスクはvmdkflat.vmdkファイルから構成されています。VMware WorkstationやVMware Playerがインストールされたマシンに両方のファイルをダウンロードする必要があります。VMware HTML5 vSphereクライアントでESXiデータストアから仮想ディスクをダウンロードすると、これらの2つのファイルが1つのZIPアーカイブにパックされます。

    代替手段として、ESXiホストへのSSHアクセスを有効にし、データストアディレクトリに移動し、SCPクライアント(例:WinSCP)を使用して両方の仮想ディスクファイルを手動でコンピュータにコピーできます。

    注意:ESXiデータストアからVMFSファイルシステムを持つthin provisioned仮想ディスクをコンピュータにダウンロードすると、軽量なvmdkファイルと、仮想ディスクの最大プロビジョニングサイズと同じサイズのflat.vmdkファイルが得られます(厚いプロビジョニングされた仮想ディスクをダウンロードするときと同じように)。これは、thin provisioningがVMFSファイルシステムの機能と見なされるためです。

    今、ESXi形式の仮想ディスクの2つのファイルがZIPアーカイブにダウンロードされたことがわかります。VMFSデータストア上のthin provisioned仮想ディスクのサイズは約2GBです(上のスクリーンショットを参照)、同じディスクをワークステーションマシンにダウンロードした場合のサイズは約8GBです(下のスクリーンショットを参照)。

  2. アーカイブから2つのファイルを解凍します。 デフォルトでは、ファイルはWin-test2.vmdkディレクトリに解凍されます。このディレクトリ名は、拡張子を除いたアーカイブ名と同じです。

  3. このステップでは、VMware WorkstationまたはPlayerがインストールされたマシンで機能するオペレーティングシステムを持つ健全なVMを持っている必要があります。前の例では、Windows Server 2016を実行しているVMが使用されましたが、この例ではWindows Server 2008を実行している健全なVMが使用されています。

    VMware WorkstationまたはVMware Playerを開き、健全なVMを選択して仮想マシンの設定を編集します。

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

  5. ハードウェア ウィザードを追加する。開いたら、ハードウェアの種類としてハード ディスクを選択します。次に、ディスクの種類を選択します(推奨値のままで構いません)。ディスクを選択画面で、既存の仮想ディスクを使用オプションを選択します。

  6. vmdkファイル(-flat.vmdkではありません)を選択してください。ZIP アーカイブから抽出したファイルを参照するか、ファイルの完全なパスを手動で入力できます。

    この例では、ESXi 6.5 および VMware Workstation 15 を使用しています。例では Windows Server 2008 を実行している VMware Workstation VM は、Workstation 12 ハードウェア バージョン(VM バージョン 12)を持っています。接続したい ESXi VM の仮想ディスクの VM バージョンは 7 です。

  7. VMware Workstationで、ESXiホストからコピーした仮想ディスクがこの仮想マシンと互換性がないというエラーメッセージが表示されます。

    注意: VMware Workstationの仮想マシンの仮想ディスクでは、仮想ディスクのVMDKファイルに仮想ディスク記述子が組み込まれています(ESXi仮想マシンの仮想ディスクの場合とは異なり、別個の記述子ファイルはありません)。

    ファイルを編集した後、仮想ディスクは既存のVMに正常に追加されます。

  8. まだ電源が入っていない場合、VMを起動してください。
  9. Windowsのディスク管理を開き、仮想ディスクの状態をオンラインに変更し、パーティションにドライブレターを割り当て、ファイルをブラウズします。

VMを起動せずにVMDKファイルからデータを抽出する方法

仮想マシンを設定したり、電源を入れる必要がない方法にはそれぞれの利点があります。これらの方法のいくつかはハイパーバイザーをインストールする必要がありません。短時間でVMDKファイルをホストオペレーティングシステムに直接マウントすることができます。

方法1: VMware WorkstationでホストOSにVMDKファイルをマウントする

この方法には、物理コンピューターで動作するWindowsまたはLinuxオペレーティングシステムにVMware Workstationをインストールする必要があります。VMware Workstationには、VMDKファイルをホストオペレーティングシステムにマウントする機能があります。ESXi形式の仮想ディスクやVMスナップショットに関連するデルタディスクもサポートされています。このブログ投稿で考慮されたすべての以前の方法と同様に、オペレーティングシステムは仮想ディスクパーティションのファイルシステムをサポートする必要があります。

仮想マシンのスナップショットがある場合、デルタ仮想ディスクは各スナップショットの作成後に作成されます。もう一方のスナップショットを撮った直後の仮想ディスクの状態を開く場合は、親仮想ディスクとデルタディスクが利用可能である必要があります。この場合、適切なデルタ仮想ディスクをホストオペレーティングシステムにマウントする必要があります。親仮想ディスクに関連する依存関係は自動的に解決されます。

スナップショットがある場合でも親仮想ディスクを開きたい場合は、親仮想ディスクを読み取り専用モードで開きます。これは、親仮想ディスクに変更を加えると、スナップショットや親仮想ディスクから作成されたリンクされたクローンが損傷する可能性があるためです。読み取り専用モードでは、仮想ディスクをホストOSにマウントした後にデータを書き込むことができなくなります。この仮想ディスクを使用するVMがオフになっている場合や、特定のVMがこの仮想ディスクを使用していない場合に、VMDK仮想ディスクファイルをマウントできます。

VMware WorkstationのVMのVMDK仮想ディスクをマウントする方法を見てみましょう。スナップショットが存在する場合も考慮します。VMの仮想ディスクには、1つのNTFSパーティションにWindowsがインストールされています。最初のスナップショットを取った後、ディスクC:のルートディレクトリにSnapshot1.txtファイルが作成され、同様に、2番目のスナップショットを取った後、そこにSnapshot2.txtファイルが作成されます。最初の例はLinux用で、2番目の例はWindows用です。この例では、古いWindows XP VMの仮想ディスクファイルを使用しています。

Example 1: LinuxホストでのVMDKのマウント

  1. Linux用のVMware Workstationを開き、ファイル> 仮想ディスクのマウントに移動します。

  2. ディスクのマウントをクリックし、ポップアップウィンドウが開きます。 参照をクリックし、仮想ディスクVMDKファイルを選択します。

  3. 2 番目の VM スナップショットを取得した後に作成された 2 番目の差分仮想ディスクの VMDK ファイルを選択しましょう。このファイルの名前は、このような場合には VM_name-000002.vmdk と表示されます(この例では WinXP-test-000002.vmdk が使用されています)。

  4. VMDK 形式の仮想ディスクをそのディレクトリにマウントするための Linux ファイルシステムにディレクトリを作成しましょう。Linux コンソールで /mnt/vmdk/ ディレクトリを作成しましょう。

    mkdir /mnt/vmdk/

  5. ユーザーのアクセス権を設定します(この例ではユーザー名は user1 で、group1 のメンバーです):

    chown -R user1:group1 /mnt/vmdk/

    chmod -R 0775 /mnt/vmdk/

  6. 今、作成したディレクトリを対象ディレクトリとして選択し、「読み取り専用でマウント」チェックボックスを確認し、「マウント」をクリックします。

  7. 今、Linuxファイルエクスプローラーで/mnt/vmdk/ディレクトリを開いて、VMDK仮想ディスクにあるファイルとディレクトリを閲覧できます。この例では、最初と2番目のスナップショットを作成した後に作成されたSnapshot1.txtSnapshot2.txtファイルが見えます。これら2つのファイルは、それぞれ別のデルタVMDK仮想ディスクにあります。

  8. 仮想ディスクの内容を操作した後は、ホストLinuxシステム上のディレクトリ(マウントポイント)からVMDK仮想ディスクをアンマウントするのを忘れないでください。

コンソールインターフェースを使用する場合は、次のコマンドでLinuxホストでVMDKディスクイメージをマウントできます:

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

Where:

vm_nameはこの場合、VMディレクトリ名と同じ仮想マシンの名前です。この例ではWinXP-testです。

vm_disk_nameは仮想ディスクの名前です(この例ではWinXP-test.vmdkが使用されています)。

vm_disk_name-000001.vmdkは、最初のVMスナップショット(WinXP-test-000001.vmdk in この場合)を取ると作成される初期デルタ(差分)ディスクの名前です。

vm_disk_name-000002.vmdkは、2番目のVMスナップショットを取ると作成される2番目のデルタディスクの名前です(WinXP-test-000002.vmdk in この場合)。

  1. 仮想ディスクをマウントします。デフォルトでは、仮想ディスクは読み書きモードでマウントされます。コマンドラインで-rキーを使用して、読み取り専用モードでディスクをマウントすることもできます。

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

  2. すべてのマウントされたVMDK仮想ディスクをリストアップ:

    vmware-mount -L

  3. 仮想ディスクの作業を終了する前に、すべての仮想ディスクをアンマウントします:

    vmware-mount -x

例2:WindowsホストでVMDKをマウントする方法

WindowsでVMDKファイルをマウントする考え方は、GUIのファイル > 仮想ディスクをマップオプション以外に、次の手順に従うこともできます。1回目のVMスナップショットのVFWディスクの差分VMDKファイルをマウントする例を示します。1回目のVMスナップショット後に作成されるVMDKファイルの名前は、VM_name-000001.vmdkWinXP-test-000001.vmdkは、このチュートリアルで開きます)の形式を持っています。

  1. 右クリックして、Windows ExplorerでVMDKファイルを選択し、仮想ディスクのマップをクリックします。

  2. VMDKファイルをマウントするためのパラメータを選択します。データ書き込み後にスナップショットチェーンに属する仮想ディスクが損傷する可能性を防ぐため、読み取り専用モードでVMDKファイルを開くことをお勧めします。この場合、デフォルトのドライブレターはZ:です。適切なチェックボックスが選択されている場合、ドライブはWindows Explorerで自動的に開きます。続行するにはOKをクリックします。

  3. 今、仮想ディスクはWindowsのディスクZ:としてマウントされ、vmdkファイルの内容を読むことができます。以下のスクリーンショットでは、最初のスナップショットを取った後に作成されたSnapshot1.txtファイルが表示されます。2番目のVMスナップショットを取った後に作成されたSnapshot2.txtファイルがありません。最初のVMスナップショットに関連するデルタ仮想ディスクを開いています。

  4. VMDK 仮想ディスクのマッピング作業が完了したら、ディスクを切断することを忘れないでください。適切な VMDK ファイルを右クリックし、仮想ディスクの切断をクリックします。仮想ディスクを切断した後は、この仮想ディスクを使用する VM を起動できます。

方法 2: 7-zip を使用して VMDK ファイルからコンテンツを抽出する

仮想マシンを実行せずに VMDK ファイルを開く方法をお探しの場合は、7-zip をインストールして仮想ディスク イメージからコンテンツを抽出できます。7-zip はファイルをアーカイブし、アーカイブからファイルを解凍するための無料ツールです。7-zip を vmdk 抽出ツールとして使用できます。このツールは Linux および Windows マシンで使用できます。

7-zip は vmdk および –flat.vmdk ファイルを開くことができます(このユーティリティは記述子 vmdk ファイルが欠落している場合、単一の –flat.vmdk ファイルを開くことができます)– 7-zip は実際には ESXi フォーマットの仮想ディスク用です。7-zip は VM スナップショットを取得した後に作成されたデルタ VMDK ファイルを開くことはできません。

VMDK ファイルを開く方法7-zip を使用した Linux 上の方法

  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はリストを示します。

  4. boot.iniファイルをVMDKイメージから抽出しましょう:

    7z e /media/user1/vms/WinXP-test/WinXP-test.vmdk boot.ini

    同じ方法で他のファイルやディレクトリをVMDKファイルから抽出できます。

VMDKファイルを開く方法7-zipを使用してWindows上で

  1. 公式ウェブサイトから互換性のある7-zipのバージョンをダウンロードし、アプリケーションをWindowsマシンにインストールします。より便利なEXEインストーラーを使用してください。
  2. Windowsに7-Zipをインストールした後、Windowsエクスプローラーでファイルやフォルダーを右クリックすると、新しい7-Zipオプションがコンテキストメニューに追加されます(以下のスクリーンショットを参照)。これらのオプションを使用して、VMDKファイルをアーカイブとして開いたり、ファイルを抽出したりできます。

  3. 以下のスクリーンショットでは、Windowsで使用されている7-ZipのGUIで独立したWin-test2-flat.vmdkファイルの内容が表示されています。必要なVMDKの内容を抽出できます。

LinuxでVMDKファイルをマウントする方法(その他の方法)

Linuxの最も強力な機能の1つは、組み込みのツールでもコンソールで最高の数の操作を実行できることです。これらのツールを使用して、VMDKファイルをマウントし、仮想ディスクに保存されているコンテンツにアクセスできます。提供された例ではUbuntu Linuxが使用されています。

方法1: VMDKファイルを/dev/loopを使用してマウントする

ループデバイスは、Linuxの疑似デバイスであり、ファイルをブロックデバイスとしてアクセス可能にし、ファイルシステムを含むディスクイメージをマウントするために使用できます。ループデバイスは/dev/loopXという名前であり、Xはループデバイスの番号です。この方法は、仮想ディスク記述子がなくても、flat.vmdkファイルをマウントするのに適しています。

例として、LinuxでVMDKファイルをマウントして仮想ディスクのファイルにアクセスする方法を探ってみましょう。ディスクイメージには、1つのパーティションが含まれる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/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

  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

方法 2: kpartx を使用して VMDK ファイルをマウントする方法

Kpartx は、イメージファイル内のパーティションを実際の Linux ファイルシステムのディレクトリにマウントできるツールです。このツールは、ブロックデバイスのパーティションのデバイスマッピングを設定するために使用できます。この方法は、ESXi サーバーで使用される –flat.vmdk イメージをマウントする場合にも適用されます。前の例で使用されている –flat.vmdk ファイルをマウントする方法を見てみましょう。

  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/

  5. VMDKイメージのファイル操作が完了したら、VMDK仮想ディスクイメージをアンマウントします:

    umount /mnt/vmdk-image

    kpartx -d /vms/Win-test2-flat.vmdk

結論

VMDKコンテンツを抽出する複数の方法を知っていることは、柔軟性と信頼性を与えます。各方法は特定の状況で最良のオプションになる可能性があります。さらに、その知識に加えてVMのバックアップを持っている方がさらに良いです。

NAKIVO Backup & Replicationは、VMware vSphereで実行されているVMを最良の方法でバックアップおよび復元できます。バックアップからVM全体、特定の仮想ディスク、またはファイルをカスタムロケーションに復元できます。

Source:
https://www.nakivo.com/blog/extract-content-vmdk-files-step-step-guide/