seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

MacのVMWare Fusion4で物理ディスクを使う方法

目的

VMWare Fusion 4では、仮想マシンに仮想ディスクvmdkを追加するとき、物理ディスクやパーティションを指定するオプションがない。


しかし、VMWare Fusionのウリの一つである、Boot Campパーティションからの仮想マシンの起動などの機能をみると、Fusion自身は物理ディスクを使う機能がサポートされていることが想像できる。


そして、調べたところ、どうやらコマンドラインからならば、vmdkを物理ディスクとして使うことができるらしい、ことが分かった。


近日中に、パーティションを切り直す予定であるため、ついでにVMWare Fusionで確保したパーティションを物理ディスクとして使用できるかためしてみたところ、どうやら、うまくいったぽいので備忘録として残すこととする。

準備するもの

コマンドの在処

VMWare Fusion 4には、「/Applications/VMware\ Fusion.app/Contents/Library/」の下に、*.vmdkファイルを扱うための各種コマンドラインユーテリティがあるようだ。

なので、別途、特別なソフトの入手は不要である。

現在のパーティションの確認

当然、物理ディスクとして割り当てる空きのパーティションがなければならない。


パーティションの確認は、OS X標準コマンド「diskutil」でも確認できる。

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            640.7 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:       Microsoft Basic Data MSDOS                   158.9 GB   disk0s4
   5:                  Apple_HFS Macintosh MountainLion  199.6 GB   disk0s5

パーティションGUIの「ディスクユーテリティ」を使ってリサイズして空いたところにMSDOS用のパーティションをつくるなどして用意したものである。
(Mac OS Xから、NTFSを作ることはできないので、一旦、FATで作る)


GUIのディスクユーテリティでは不可視になっているリカバリパーティションなどがあることもわかる。


今回は、この、disk0s4のMSDOSとラベルをつけたパーティションを使う。


※ disk0s4に作ったのは、Boot Campは4番目以内にパーティションがなければ機能しない、という制約があり、おそらくVMWare Fusionでも同様ではないか、と推測されたため。
※ disk0s5以降で動くかどうかは確認していない。参考文献に示したページでは「外部のflashdrive/storageを物理ディスクとして使えるよ!」という紹介記事なので、他の増設ディスクを使うことは可能だと思われる。

仮想マシンの作成

Windows 7 x64仮想マシンの設定を作成する.

Boot Campを使っているならば、VMWare Fusion 4の本来の機能で物理ディスクを使えるのだから、わざわざWindows7で試す必要もないのだけれど、とりあえず実験ということで。

  • Windows7 x64
  • 仮想ディスク
    • IDEタイプとする.
    • 2GB分割なしで小さめに作成する. (どのみち、使わずに消すので。)
  • あとの設定はお好みで


以下のようなファイルができたものとする。

-rw-r--r--  1 seraphy  staff    18534  8 13 23:48 Windows 7 x64.plist
-rw-r--r--  1 seraphy  staff  2686976  8 13 23:48 Windows 7 x64.vmdk
-rw-r--r--  1 seraphy  staff        0  8 13 23:47 Windows 7 x64.vmsd
-rwxr-xr-x  1 seraphy  staff     2068  8 13 23:47 Windows 7 x64.vmx
-rw-r--r--  1 seraphy  staff      268  8 13 23:47 Windows 7 x64.vmxf
割当可能な物理ディスクの確認

VMWare Fusion 4付属の「vmware-rawdiskCreator」ツールをつかって、割当可能な物理ディスクを確認する。

$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-rawdiskCreator print /dev/disk0
Nr      Start       Size Type Id Sytem                   
-- ---------- ---------- ---- -- ------------------------
 1          1     409639 BIOS EE Unknown
 2     409640 1251335856 BIOS AF HFS+
 3 1251745496    1269536 BIOS AB Unknown
 4 1253015552  310388736 BIOS  B Win95 FAT32

4番目のパーティションが、今回のターゲットとなるパーティションである。

物理ディスクを作成する.

前述のコマンドのオプション「create」にし、ディスクとパーティションを指定することで、その物理パーティションに対するvmdkファイルができあがる。(IDEタイプを指定している.)

SERAPHY-IMAC5:Windows 7 x64.vmwarevm seraphy$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-rawdiskCreator create /dev/disk0 4 physical_disk0s4 ide
SERAPHY-IMAC5:Windows 7 x64.vmwarevm seraphy$ ls -l
total 5376
-rw-r--r--  1 seraphy  staff    18534  8 13 23:48 Windows 7 x64.plist
-rw-r--r--  1 seraphy  staff  2686976  8 13 23:48 Windows 7 x64.vmdk
-rw-r--r--  1 seraphy  staff        0  8 13 23:47 Windows 7 x64.vmsd
-rwxr-xr-x  1 seraphy  staff     2068  8 13 23:47 Windows 7 x64.vmx
-rw-r--r--  1 seraphy  staff      268  8 13 23:47 Windows 7 x64.vmxf
-rw-------  1 seraphy  staff    32256  8 13 23:49 physical_disk0s4-pt.vmdk
-rw-------  1 seraphy  staff      882  8 13 23:49 physical_disk0s4.vmdk

ウィザードによって作成した「Windows 7 x64.vmdk」は不要なので削除する。

VMXファイルの編集

仮想マシンの定義ファイル「Windows 7 x64.vmx」ファイルをテキストエディタで編集し、先ほど作成したvmdkファイルを使うように書き換える。

ide0:0.fileName = "physical_disk0s4.vmdk"
起動してWindows7をインストールする

VMWare Fusion4を実行し、仮想マシンを起動すれば、disk0s4パーティション仮想マシンのディスクとしてマウントして仮想マシンが立ち上がる。


インストーラでインストール先のディスクを選択するように指示されるが、関係ないパーティションは無視して先に指定したパーティションを選択する。

(前述の方法で物理ディスクを作成すると、disk0s4以外のdisk0の他のパーティションについても見えてしまうようだ。)


先に作ったパーティションMSDOS(FAT)にしていたので、そのままではWindows7でインストールできない。一旦フォーマットし直してNTFSにする。


あとは淡々とインストールする。

仮想マシンをシャットダウンしてみる


インストールが完了後、仮想マシンをシャットダウンすると物理ディスクとして使われていたパーティションが、デスクトップの管理下に戻って来る。


NTFSフォーマットなので、読み込み専用として、そのままディスクの中身を確認することができる。


パーティションのフォーマットをかえると、パーティションテーブルが変わるため「スタートアップ復旧」処理が必要です。
※ 初回、パーティションFAT32で作成してWindowsインストーラNTFSに変更した場合、初回、かならずパーティションテーブルが変更されて、次回の仮想マシンのパワーON時にエラーになってしまうようです。
(回避方法は不明。でも復旧は可能。)

物理ディスクのパーティションテーブルが変更されると起動しなくなる…

物理ディスクを示すvmdkファイルを作成すると、

  • *.vmdk
  • *-pt.vmdk

の二つが作成される。


この「〜pt.vmdk」は、どうやらパーティションテーブルのコピーのようである。

仮想マシンからディスクのパーティションテーブルを排他的に使う事はできないので、仮想マシン作成時のパーティションテーブルをコピーしているのであろう、と推測。

(物理ディスクにおける*.vmdkの中身はテキスト形式のフォーマット情報のようである。)


※ このあたりの情報は、No Such Blog or Diaryさんの「物理ディスク上のパーティションを個別にVMwareのディスクとして使うのを手動でやろうか」で詳しく解析されておられて大変参考になりました。
http://emoken.net/blog2/item_2523.html


この物理ディスクのパーティションのレイアウトを変更すると、pt.vmdkファイルの情報が一致しなくなるためか、VMWare Fusion 4は、この物理ディスクを使用不可にしてしまい、仮想マシンを立ち上げることができなくなってしまう。
(これはBoot Campを物理ディスクとしている場合でも同じようである。ただし、こちらはVMWare Fusionが自動的にリカバリ処理するようである。)


仮想マシンを立ち上げようとすると、こんな感じのエラーが通知される。

ディスク ????.vmdk を開くことができないか、または一部のスナップショットがこのディスクに従属しています。

ディスクの内容が変更されたわけではないので、再度、vmware-rawdiskCreatorを使ってvmdkを作り直せば、パーティションそのものは、再度使えるようになる。


しかし、おそらくパーティションテーブルに関連するブートまわりの問題で、仮想マシンのパワーON時、Windows7のあるパーティションを見つけられずにWindowsを起動できなくなっている可能性が高い。

この場合、インストールディスクから立ち上げて「修復」のリンクから、「スタートアップ修復」を選択する。
スタートアップ修復を実施することで、このブートまわりを修復できる可能性が高い。


下のほうに「コンピュータを修復する」というリンクがある。

ふだん、見慣れない画面なので戸惑ってしまう。


この時点ではWIndows7パーティションが見えないこともあるようだが、「スタートアップ修復」をすれば、パーティションテーブルが変更されたことによるブートまわりのトラブルは解決できるようである。


以後、パーティションテーブルが変わるような変更をしないかぎりは、そのまま使い続けることができる。

感想

物理ディスクをVMWare Fusion 4で使う手順は、だいたい把握できたと思う。


正直なところ、仮想ディスクと物理ディスクのパフォーマンス差が、どれほどのものか、よく分からない。

物理ディスクにすれば昔は確かに速かったと思うが、いまはどうなんだろうか。



物理ディスクは扱いが面倒なのも確かであり、扱いやすさという点でのメリットは皆無だ。

速度のために物理ディスクを検討するならば本当に速くなるのか実測する必要があるだろう。



物理ディスクと、仮想ディスクでのベンチマーク (8/14追記)

物理ディスクを使うメリットが本当にあるのか気になったので、ためしに仮想ディスクを使う仮想マシンもたてて比較してみた。


今回、比較に使用したソフトは、CrystalDiskMark。(時々、お世話になっております。)


マシンは昨年の秋に買ったiMac

  • iMac 21インチ Mid 2011モデル
  • 2.7GHz Core i5, 16GB Memory
  • Mac OS X 10.7 Lion
  • HDDは、WDC WD1001FALS-403AA0 (1TB) 7200回転
disk0s4パーティションを物理ディスクとして

IDE接続のエミュレート

-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   100.179 MB/s
          Sequential Write :    90.465 MB/s
         Random Read 512KB :    37.226 MB/s
        Random Write 512KB :    61.430 MB/s
    Random Read 4KB (QD=1) :     0.490 MB/s [   119.7 IOPS]
   Random Write 4KB (QD=1) :     1.022 MB/s [   249.6 IOPS]
   Random Read 4KB (QD=32) :     0.636 MB/s [   155.3 IOPS]
  Random Write 4KB (QD=32) :     1.025 MB/s [   250.4 IOPS]

  Test : 1000 MB [C: 17.6% (26.1/148.0 GB)] (x5)
  Date : 2012/08/14 22:17:19
    OS : Windows 7 Ultimate Edition SP1 [6.1 Build 7601] (x64)

そこそこの速度で動いていればいいや、という考えなので、あまりHDDの速度に詳しくないのだが、
たぶん、このHDDの、それなりのパフォーマンスだと思われる。
(オーバーヘッドが著しく大きい、ということはなさそう。)


試しにSCSIエミュレートでの物理ディスクアクセスも試してみたが、若干、パフォーマンスが低下するようだ。

IDE接続のほうが良いようである。



ネイティブなHDDの実速度に近いパフォーマンスで動かす事は、たしかにできそうな感じである。


Windows7の起動速度も、同程度のPCと比較して妥当な速さだと思う。


仮想ディスク(30GB固定容量・2GB分割・全容量事前割当済み)
-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 x64 (C) 2007-2010 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :  1899.907 MB/s
          Sequential Write :  1517.720 MB/s
         Random Read 512KB :  1694.633 MB/s
        Random Write 512KB :  1513.931 MB/s
    Random Read 4KB (QD=1) :    54.086 MB/s [ 13204.7 IOPS]
   Random Write 4KB (QD=1) :    51.828 MB/s [ 12653.3 IOPS]
   Random Read 4KB (QD=32) :    79.504 MB/s [ 19410.3 IOPS]
  Random Write 4KB (QD=32) :    78.149 MB/s [ 19079.4 IOPS]

  Test : 1000 MB [C: 45.9% (13.7/29.9 GB)] (x5)
  Date : 2012/08/14 22:51:15
    OS : Windows 7 Ultimate Edition SP1 [6.1 Build 7601] (x64)

なんか、嘘っぽい値がでた。


HDDのベンチマークなのに、CPU負荷がかなりかかっていて4コアともに、かなり活発な状況に。

おそらく、このマシンは16GBメモリ積んでいるので、ベンチマーク用の1GBのディスク領域は、全部キャッシュに乗っかってしまってディスクが動いていないんじゃないかと思われる。
(実際、アクティビティモニタの「ディスクの動作」を見ていても、グラフがときどき跳ねるが、ほとんど0%付近で寝ているので、まちがいなくHDDが動いていない...。)


それでも、実際にキャッシュに乗っかるような使い方をするのであれば、この嘘くさいスピードも真ということになるだろうか。

使い方によっては物理ディスクよりも高いパフォーマンスがでるかもしれない。

(とはいえ、Windows7の起動は、体感的にはちょっと遅いような気がする。)


正直、UbuntuとかをFusion4の仮想ディスクの仮想マシンで使っていて、HDDが遅くてイライラとか、そうゆうことはないので、小さめの仮想マシンとして使うなら、べつに仮想ディスクでもいいのかもしれんなぁ...。


ちょっと悩ましい。


以上、メモ終了.

参考文献・元ネタ

ダメもとで検索したら、ズバリの記事を見つけたのが、今回の実験のきっかけです。
良い情報をありがとうございました。