VMware



■エミュレーション方法

基本的に I/O Trap を使用してCPU以外をエミュレーションする方式なので、
16Bitコード(リアルモード、仮想86モード)で動作する事の多いソフトウェアは
動作が遅く、安定性が低くなる。(MS-DOS、Win95、Win98)

一般的な x86 の OS ではプロテクトモードのリング0をカーネル、
リング3をユーザーとして使用していて、リング1,2 が使用されていない。
これを利用してゲストOSのリング0のアクセスをリング1に置き換えて
動作してると言われる。



■エミュレーション対象

エミュレーション対象
CPU ホストのCPU情報がそのまま使われる。(CPUID命令)。
チップセット Intel 440BX
グラフィック VMware の独自SVGA
サウンド AudioPCI (Ensoniq ES1371) もしくは設定変更で SB16。
IDE、SCSI 440BX UltraDMA33(IDE) および BusLogic(SCSI)
USBコントローラ Intel 440BX(PIIX4)
ネットワーク VMware の拡張 AMD PCNET Family PCI Ethernet Adapter
シリアル -
プリンタ -
マウス VMware の拡張マウス

VMware の独自および拡張機能のドライバは VMware Tool に含まれる。



■VMware Playerのネットワーク機能

次に、VMware Playerで利用可能なネットワークの形態についてみておこう。
VMware Playerでも、Virtual PCなどと同様に、次のようなネットワーク接続の形態が用意されている。

ネットワークの設定
接続形態 意味
ブリッジ 物理的なネットワーク・インターフェイスに直結して動作させるモード。
ホスト・コンピュータに装着した物理ネットワーク・インターフェイスと同様に、
外部と通信できる。IPアドレスはホスト・コンピュータと同様に、
外部のDHCPサーバを使って割り当てらえる。外部から見ると、
ホスト・コンピュータも仮想マシンも同じネットワークに直接接続されているように見える
NAT 仮想マシンはNAT機能を介して、ネットワークに接続される。
仮想マシンのインターフェイスには、ホスト・コンピュータのインターフェイスとは
異なるIPアドレスが割り当てられ、外部からは直接参照できない
ホスト オンリー 仮想マシン間での通信のみが可能な仮想的なネットワークに接続される。
仮想マシンのインターフェイスには、ホスト・コンピュータのインターフェイスとは
異なるIPアドレスが割り当てられ、外部からは参照できない。
ホスト・コンピュータとこの仮想ネットワーク間では通信が可能だが、
仮想マシンから外部(インターネットなど)へアクセスすることはできない

VMware Playerで利用可能なネットワーク接続の形態
各仮想マシンで利用できるネットワーク・インターフェイスには、
これらのタイプがある。デフォルトではNATタイプのインターフェイスが1つ作成され、割り当てられる。
仮想ネットワーク・インターフェイスは仮想マシンごとに最大で10個まで追加できる。
(VMware Player は3個まで。)



■VMware に任意のネットワークアダプタを認識させる

ホストマシンにネットワークアダプタが複数存在する場合の対処方。

●解決策
ホストマシンでコントロールパネルからネットワークアダプタのプロパティを開き、
VMware のブリッジ接続に使いたいアダプタ以外は、
「VMware Bridge Protocol」の項目のチェックを外す。
これで、正常に繋がるようになる。

●補足
VMWare 内に複数のアダプタがあり、「VMWare のブリッヂ」を使う場合には
最初の「ネットワークアダプタ」をブリッヂにした方が良い?
「ネットワークアダプタ2」だと接続できないケースがあるかも。

ちなみに VirtualPC は「Virtual Machine Network Services」。



■.vmx 設定変更

VMWare Player は VMWare Workstation の廉価版であり、
一部の設定がGUIから設定できないようになっているが
.vmx ファイルを編集することで VMWare Workstation 同等の
機能を実現することができる場合もある。

.vmx はテキストファイルなのでメモ帳等で編集できる。

ゲストのメモリはファイルではなく実メモリを使う
仮想マシンのメモリは .vmem という名前でファイル化される。
断片化が著しいこのファイルを、ホストOSのハードディスクではなく
メモリに展開させると、ディスクアクセスが減り、パフォーマンスが上がる。
(サスペンド完了時間はメモリサイズに比例して遅くなる。)

mainMem.useNamedFile = "FALSE"

未使用の物理メモリを解放しないようにする
ゲストで使っていないメモリをホストに戻さないようにすると、
ディスクI/Oが減るらしい。
メモリが大量にあるなら以下の設定をしておくといいかも。
Workstation なら[VM]-[設定]-[オプション]-[詳細]の
「メモリページのトリミングを無効にする(Disable memory page trimming)」に
チェックを入れる。Player だと

MemTrimRate = "0"

仮想マシンのメモリ確保を動的にする
仮想マシンのメモリサイズを自動調節しないようにする。

MemAllowAutoScaleDown = "FALSE"

ビデオメモリのサイズを変更する
VMware で設定されるビデオメモリを変更します。
1MB は 1048576 で計算する。
16MB に設定するには

svga.vramSize = "16777216"

HD Audio を使う
Android x86 4.3 以降を使う場合には必要らしい。
(VMware Player Ver 5.x.x 以降で使える?)

sound.virtualDev="hdaudio"

ES1371 を使う
VMware 4 から追加された Ensoniq Audio PCI を使う。

sound.virtualDev="es1371"

ES1371 を Sound BLASTER 128 PCI で認識させる
ハードウェア的には互換。PCI の VenderID あたりが違うだけ?

Sound を "Creative Sound Blaster PCI" 互換で認識させたい場合は

sound.fileName = "Creative Sound Blaster PCI"

Sound BLASTER 16 (ISAバス) を使う
VMware 3 時代の Sound Blaster 16 互換に戻したい場合は

sound.virtualDev="sb16"

音声再生バッファの調整
音飛びやレイテンシが気になる場合に変更する。
次の場合はバッファを 200ms にする。

pciSound.PlayBuffer="200"

BIOS のキー受け付け(表示時間)を長くする
時間を ms 単位で指定する。

次の場合は2秒待つ。

BIOS.BootDelay = "2000"

BIOSファイルを指定する
VMWare が使用するBIOSイメージのファイルを指定する場合は

bios440.filename = "VMwareBIOSname.ROM"

BIOS を EFI に切り替える
VMWare で EFI 対応OSを起動できるようにする。

firmware = "efi"



■ゲスト Android x86 にネットワーク接続

ゲスト側の IP アドレスを調べる。
Android の「端末エミュレータ」で
ifconfig eth0
もしくは
netcfg
と実行すれば IPアドレス が表示される。(netcfg は eth0 の値)

ホスト側から android SDK の platform-tools を使って接続する。
(android で表示された IP アドレスは 192.168.1.10 だったとする。)
SET ADBHOST=192.168.1.10
adb kill-server
adb start-server
adb tcpip 5555
adb connect 192.168.1.10
adb devices


接続が成功すれば
connected to 192.168.1.10:5555
List of devices attached
192.168.1.10:5555 device
と表示され、失敗すれば
unable to connect to 192.168.1.10:5555
と表示される。

失敗した場合には IP アドレスが間違っていないか、ping で通信が可能かを確認する。
ping 192.168.1.10
ping が通る場合にはファイアウォール設定を確認する。

IP アドレスは正しいのに ping が通らない場合にはVMware のネットワーク設定を
「NAT」から「ホストオンリー」に変更し、ゲストの android を再起動。
IPアドレスの確認からやり直す。

「ホストオンリー」だとゲストから外部へはアクセス不能だが adb は使用可能になる。



■ホスト Windows Vista で仮想環境の再生ができない

仮想環境を再生すると
「パワーオン中にエラーが発生しました: VMware Authorization Service が起動していません。」
と表示されて仮想環境が起動できない。

これは VMware Authorization Service というサービスが起動していないのが原因。

VMware のショートカットを右クリックして「管理者権限で実行」を選択して実行すると
問題を回避できる場合がある。

しかし、これを毎回行うのは面倒なので
ショートカットを右クリック→「プロパティ」→「互換性」のタブを
選択し一番下の「管理者としてこのプログラムを実行する」にチェックを入れる。
(この方法が一番手っ取り早いですが、ユニティが使えません。)



■VMware Authorization Service が起動しない

McAfee SecurityCenter(InternetSecurity)が入っていると、
ファイアウォールによって「VMware Authorization Service」が
ブロックされ VMware の仮想環境が起動できなかったりする。
(管理者権限で実行すれば一応、動いたりもする。)

対策としてはセキュリティ設定で VMware に割り当てられている
IPアドレスのアクセス許可を行うか、プログラムのブロックを解除する。

●設定変更の手順
「ホーム」→「インターネットとネットワーク」→「設定」

ファイアウォールの項目の「詳細設定」を選択する。

「プログラムの許可機能」で「VMware Authorization Service」の
ブロック設定を変更するか、
「信用IPと禁止IP」でVMwareに割り当てられているIPアドレスを
信用IPに設定する。


http://www.chokanji.com/ckv/supportdata/security/mcafee-iss2010.html



■VMware Command Line Tools(vmw)のvmshrinkで縮小

一度大きくなった .vmdk はゲストOSでいくらファイルを削除してもサイズは元に戻らない。
小さくするには空き領域を一度0で埋めてから最適化する必要がある。

VMware Tools にはそのための「仮想ディスク圧縮」機能があるが、
LinuxのX無し環境ではゲストから vmware-toolbox が使えない。
そういう場合は vmshrink を使えばいい。

仮想環境の中に vmshrink.exe をコピーして
スナップショットを全て消した状態でダブルクリックすればOK

※infoseek の無料サービス終了で消滅。(図書館よりDL)
http://web.archive.org/web/20071221123525/http://chitchat.at.infoseek.co.jp/vmware/vmtools.html



■ホスト Windows 2000 で自動起動しない場合の対策

Windows 2000 Server(SP4) で起動した場合に VMware Server(1.0.4)がOS起動時に実行されない。
サービスの起動順序に問題があるみたいなので対応した内容を記しておく。

VMware Authorization Service が停止しているので手動で開始すると、
VMware Serverも使える様になる。
サービスを開始するには管理者権限が必要。

・VMware Server が 2回目以降使えない対策

下記の内容で起動時のサービス起動を改善する。
------------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMAuthdService]
"DependOnService"=hex(7):76,00,6d,00,78,00,38,00,36,00,00,00,77,00,6d,00,69,00,\
00,00,00,00
で直ったようです。元々「vmx86」だったところを「vmx86 wmi」に変更した形です。

こちらのレジストリ設定を参考にさせていただいたところ、問題は解決しました。
"DependOnService"というエントリ名からしてWMI が事前に動いている必要があったんでしょうね。



■ゲストのメディア交換

メディアの交換はウインドウのメニューから
「仮想マシン」→「取り外し可能デバイス」→「フロッピー」→切断。
メディアを入れ替える。
「仮想マシン」→「取り外し可能デバイス」→「フロッピー」→接続。
とする必要がある。



■ゲスト Windows95 で CDドライブを認識しない

インストールディスクから起動すると CDドライブを認識するが、
インストール中にファイルをコピーして HDD から起動し直すと
CDドライブを認識しなくなる。

これは Windows95 がネイティブで IDE を正しく認識できない為?

対策としてはパーティションの容量確保とフォーマットが終わった時点で
インストールディスクのDOS用のCDドライバを HDD にコピーしておく。

再起動がかかった時点で AUTOEXEC.BAT と CONFIG.SYS にドライバを記述すると
Windows95 が CDドライブを認識できるようになる。

LINK Windows95 install (英語)



■ゲスト Windows98SE がインストールできない

インストール中に CAB ファイル(ディスクアクセス)のエラーが発生して失敗する場合は、
インストール・ディスクの「セットアップが起動しないCD-ROMサポート」で起動し、

(CDドライブ):\>setup /c

と実行すれば良い。
(ただし、インストール時間が長くなる。)



■DOS の config.sys 設定

DEVICE=C:\DOS\POWER.EXE
CPUが空回りしてホストのCPU占有率が上がるのを防ぐ。

DEVICE=C:\DOS\JDISP.SYS /HS=LC
オプションを追加しないと画面が真っ暗になる。




Back