VMware
この記事では最新バージョンの VMware である VMware Workstation Pro と Player 16, 15, 14, 12.5 を扱います。 VMware に Arch Linux をインストールすることもできます。
目次
- 1 前提条件
- 2 インストール
- 3 設定
- 4 アプリケーションを起動する
- 5 ヒントとテクニック
- 6 トラブルシューティング
- 6.1 Kernel headers for version 4.x-xxxx were not found. If you installed them[...]
- 6.2 USB デバイスが認識されない
- 6.3 VMware にリモートでアクセスしようとすると Incorrect login/password エラー
- 6.4 ALSA 出力の問題
- 6.5 カーネルベースの仮想マシン (KVM) が実行されている
- 6.6 モジュールの問題
- 6.7 インストーラーが起動しない
- 6.8 ゲストで VMware Tools がダウンロードできない
- 6.9 Intel のマイクロコードが古いせいで起動時にセグメンテーション違反が発生する
- 6.10 時刻がおかしくなったり "[...]timeTracker_user.c:234 bugNr=148722" というエラーで VMware が起動しない
- 6.11 システムを再起動した後にゲストのネットワークが使えなくなる
- 6.12 Linux 4.9 でカーネルモジュールのビルドに失敗する
- 6.13 バージョン 12.5.4 から vmplayer/vmware の起動に失敗する
- 6.14 バージョン 12.5.3 で vmplayer/vmware が起動できない
- 6.15 vmware 12 のプロセスが起動後にすぐ終了し、GUI が起動しない
- 6.16 カーネル 4.11 以上で vmware モジュールのビルドに失敗する
- 7 アンインストール
前提条件
1. マシンの BIOS/UEFI で仮想化を有効にする。
インストール
VMware Bundle または vmware-workstationAUR パッケージを使用してインストールします。 x86_64で VMware Workstation を使用する場合は、後者が優先されます。
VMware bundle
適切な依存パッケージをインストールしてください:
- fuse2 - vmware-vmblock-fuse 用
- gtkmm - GUI 用
- linux-headers - モジュールコンパイル用
- ncurses5-compat-libsAUR -
--console
インストーラーを動かすのに必要 - libcanberra - イベントサウンド用
- pcsclite
最新の VMware Workstation Pro または Player をダウンロードしてください (若しくは、可能であれば ベータ バージョン)。
インストールを開始してください:
# sh VMware-<edition>-<version>.<release>.<architecture>.bundle
System service scripts directory
には、 /etc/init.d
を使って下さい (デフォルト)。
Package build for x86_64
VMware Workstation のバージョン 16、15、14、12、11 に対応する vmware-workstationAUR, vmware-workstation15AUR, vmware-workstation14AUR, vmware-workstation12AUR または vmware-workstation11AUR をインストールします。また、linux-headers や linux-lts-headers など、インストールしたカーネルに適したヘッダーパッケージをインストールする必要があります。
次に、必要に応じて以下のサービスを有効にします:
vmware-networks.service
ゲストネットワークへのアクセスvmware-usbarbitrator.service
USB デバイスへの接続vmware-hostd.service
仮想マシンを共有するためのサービス(バージョン16以降は利用できません)
最後に、VMware モジュールをロードします:
# modprobe -a vmw_vmci vmmon
設定
カーネルモジュール
VMware Workstation 12.5 はバージョン 4.8 までのカーネルをサポートしています。
systemd サービス
(任意) /etc/init.d/vmware
(start|stop|status|restart
) と /usr/bin/vmware-usbarbitrator
を使って直接サービスを管理するのではなく、.service
ファイルを使用することもできます (AUR の vmware-systemd-servicesAUR[リンク切れ: パッケージが存在しません] から取得することも可能、vmware-patchAUR[リンク切れ: パッケージが存在しません] にも入っています):
/etc/systemd/system/vmware.service
[Unit] Description=VMware daemon Requires=vmware-usbarbitrator.service Before=vmware-usbarbitrator.service After=network.target [Service] ExecStart=/etc/init.d/vmware start ExecStop=/etc/init.d/vmware stop PIDFile=/var/lock/subsys/vmware RemainAfterExit=yes [Install] WantedBy=multi-user.target
/etc/systemd/system/vmware-usbarbitrator.service
[Unit] Description=VMware USB Arbitrator Requires=vmware.service After=vmware.service [Service] ExecStart=/usr/bin/vmware-usbarbitrator ExecStop=/usr/bin/vmware-usbarbitrator --kill RemainAfterExit=yes [Install] WantedBy=multi-user.target
他の Workstation サーバーコンソールから VMware Workstation に接続したい場合、以下のサービスも追加してください:
/etc/systemd/system/vmware-workstation-server.service
[Unit] Description=VMware Workstation Server Requires=vmware.service After=vmware.service [Service] ExecStart=/etc/init.d/vmware-workstation-server start ExecStop=/etc/init.d/vmware-workstation-server stop PIDFile=/var/lock/subsys/vmware-workstation-server RemainAfterExit=yes [Install] WantedBy=multi-user.target
作成したら有効化することでブート時に起動できます。
Workstation Server サービス
vmware-workstation-server.service
はコマンドチェインで wssc-adminTool
を実行しますが、このバイナリファイルの名前は vmware-wssc-adminTool
に変更されています。
サービスが起動するのを防ぐには、以下のようにシンボリックリンクを作成してください:
# ln -s wssc-adminTool /usr/lib/vmware/bin/vmware-wssc-adminTool
アプリケーションを起動する
VMware Workstation Pro を開くには:
$ vmware
VMware Player の場合:
$ vmplayer
ヒントとテクニック
Workstation Pro ライセンスキーを入力する
ターミナルから
# /usr/lib/vmware/bin/vmware-vmx-debug --new-sn XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
はあなたのライセンスキーに置き換えてください。
GUI から
上記で上手くいかない場合は、次を試すことができます:
# /usr/lib/vmware/bin/vmware-enter-serial
VMware BIOS を展開する
$ objcopy /usr/lib/vmware/bin/vmware-vmx -O binary -j bios440 --set-section-flags bios440=a bios440.rom.Z $ perl -e 'use Compress::Zlib; my $v; read STDIN, $v, '$(stat -c%s "./bios440.rom.Z")'; $v = uncompress($v); print $v;' < bios440.rom.Z > bios440.rom
インストーラーを抽出する
インストーラー .bundle
の中身を確認するには:
$ sh VMware-edition-version.release.architecture.bundle --extract /tmp/vmware-bundle/
改造 BIOS を使う
展開した BIOS に変更を加えるとき、あなたの仮想マシンがその BIOS を使うようにするには BIOS を ~/vmware/<Virtual machine name>
に移動して:
$ mv bios440.rom ~/vmware/<Virtual machine name>/
ファイルの名前を <Virtual machine name>.vmx
ファイルに追記してください:
~/vmware/<Virtual machine name>/<Virtual machine name>.vmx
bios440.filename = "bios440.rom"
Intel と Optimus で 3D グラフィックを有効化
3D アクセラレーションが不安定なグラフィックドライバーはデフォルトでブラックリストに入れられています。Accelerate 3D graphics を有効化すると、ログに以下のように表示されることがあります:
Disabling 3D on this host due to presence of Mesa DRI driver. Set mks.gl.allowBlacklistedDrivers = TRUE to override.
その場合、以下のように設定してください:
~/.vmware/preferences
mks.gl.allowBlacklistedDrivers = TRUE
ホストが一時停止/休止状態になる前に仮想マシンを一時停止する
実行可能ファイル /usr/lib/systemd/system-sleep/vmware_suspend_all.sh
を作成します。
#! /bin/bash set -eu if [[ $# -ne 2 ]]; then echo "Usage: $0 <period> <action>" exit 1 fi period=$1 action=$2 echo "vmware system-sleep hook argv: ${period} ${action}" if ! command -v vmrun &>/dev/null; then echo "command not found: vmrun" fi if [[ "${period}" = "pre" ]]; then readarray -t vms < <(vmrun list | tail -n +2) echo "Number of running VMs: ${#vms[@]}" if [[ ${#vms[@]} -eq 0 ]]; then exit fi for vm in "${vms[@]}"; do echo -n "Suspending ${vm}... " vmrun suspend "${vm}" echo "done" done sleep 1 else echo "Nothing to do" fi
参照 電源管理#/usr/lib/systemd/system-sleep のフック, suspend all virtual machines with vmrun と Support for hibernation
システム高速化のトリック
こちらを参照 パフォーマンスの最大化
transparent hugepages を無効にする
VM の実行中にゲストやホストが頻繁にフリーズすることに気付いた場合は、transparent hugepages を無効にすることをお勧めします。現在のセッションでそれらを無効にするには、(ホスト上で) 次を実行します。
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
変更をブート後も永続化するには、カーネルパラメータ transparent_hugepage=never
を追加します。
never
の代わりに madvise
を使用して、transparent hugepage 用に最適化されたアプリケーションがパフォーマンス上の利点を得られるようにすることもできます hugepages/ これは、上記と同じことを vmware に対して行います。
直接 RAM アクセスを保証する
デフォルトでは、VMware は実行中のゲストシステムの RAM をディスク上のファイルに書き込みます。予備のメモリが十分にあることが確実な場合は、VM の .vmx
に以下を追加することで、ゲスト OS がそのメモリをホストの RAM に直接書き込むようにすることができます。
Virtual_machine_name.vmx
MemTrimRate = "0" sched.mem.pshare.enable = "FALSE" prefvmx.useRecommendedLockedMemSize = "TRUE" mainmem.backing = "swap"
Performance tips
To improve the performance of your virtual machine, try the following tips:
Paravirtual SCSI adapter
VMware Paravirtual SCSI (PVSCSI) adapters are high-performance storage adapters for VMware ESXi that can result in greater throughput and lower CPU utilization. PVSCSI adapters are best suited for environments, where hardware or applications drive a very high amount of I/O throughput.
The SCSI adapter type VMware Paravirtual
is available in the Virtual Machine settings.
If these settings are not in the virtual machine's configuration, the paravirtual SCSI adapter can still be enabled. Ensure that the paravirtual SCSI adapter is included in the kernel image by modifying the mkinitcpio.conf
:
/etc/mkinitcpio.conf
... MODULES=(... vmw_pvscsi) ...
Shut down the virtual machine and change the SCSI adapter: set the .vmx
to the following:
scsi0.virtualDev = "pvscsi"
Paravirtual network adapter
VMware offers multiple network adapters for the guest OS. The default adapter used is usually the e1000
adapter, which emulates an Intel 82545EM Gigabit Ethernet NIC. This Intel adapter is generally compatible with the built-in drivers across most operating systems, including Arch.
For more performance and additional features (such as multiqueue support), the VMware native vmxnet3
network adapter can be used.
Arch has the vmxnet3
kernel module available with a default install. Once enabled in mkinitcpio (or if it is auto-detected; check by running lsmod | grep vmxnet3
to see if it is loaded), shut down and change the network adapter type in the .vmx file to the following:
ethernet0.virtualDev = "vmxnet3"
After changing network adapters, the network and dhcpcd settings will need to be updated to use the new adapter name and MAC address.
# dhcpcd new_interface_name # systemctl enable dhcpcd@new_interface_name.service
The new interface name can be obtained by running ip link
.
Virtual machine settings
These settings could help improve the responsiveness of the virtual machine by reducing disk I/O, at the expense of using more host memory. Vmware's KB1008885 provides the following optimizations:
mainMem.useNamedFile = "FALSE" MemTrimRate = "0" prefvmx.useRecommendedLockedMemSize = "TRUE" MemAllowAutoScaleDown = "FALSE" sched.mem.pshare.enable = "FALSE"
- mainMem.useNamedFile: This will only work for Windows hosts and this parameter can be used if high disk activity is experienced upon shutting down the virtual machine. This will prevent VMware from creating a .vmem file. Use mainmem.backing = "swap" on Linux hosts instead.
- MemTrimRate: This setting prevents that memory which was released by the guest is released on the host also.
- prefvmx.useRecommendedLockedMemSize: Unfortunately there does not seem to exist a proper explanation for this setting; it seems to prevent the host system from swapping parts of the guest memory.
- MemAllowAutoScaleDown: Prevents VMware from adjusting the memory size of the virtual machine if it cannot allocate enough memory.
- sched.mem.pshare.enable: If several virtual machines are running simultaneously, VMware will try to locate identical pages and share these between the virtual machines. This can be very I/O intensive.
The following settings can also be set in the configuration dialog of VMware Workstation(Edit -> Preferences... -> Memory/Priority).
prefvmx.minVmMemPct = "100" mainMem.partialLazySave = "FALSE" mainMem.partialLazyRestore = "FALSE"
- prefvmx.minVmMemPct: Sets amount of RAM in percent which should be reserved by the virtual machine on the host system. If this is set to a lower value it is possible to assign the virtual machine more memory than is available in the host system. Be careful though, as in this case it will most likely lead to excessive hard drive usage. If enough RAM is on the host system, this value should be left at 100.
- mainMem.partialLazySave and mainMem.partialLazyRestore: These two parameters will prevent the virtual machine from creating partial snapshots for suspends. When these parameters are used, virtual machine suspension will take slightly longer, but there should be less hard disk activity from VMware trying to store this information.
トラブルシューティング
Kernel headers for version 4.x-xxxx were not found. If you installed them[...]
ヘッダーをインストールしてください (linux-headers)。
USB デバイスが認識されない
systemd サービスを使ってサービスを自動的に管理しない場合、毎回手動で root を使って vmware-usbarbitrator
バイナリを起動する必要があります。
起動するには:
# vmware-usbarbitrator
停止するには:
# vmware-usbarbitrator --kill
VMware にリモートでアクセスしようとすると Incorrect login/password エラー
VMware Workstation には vmware-workstation-server
サービスによって共有 VM をリモートで管理できる機能があります。しかしながら、vmware-authd
サービスの PAM 設定が間違っているために、"incorrect username/password"
エラーで失敗します。修正するには、以下のように /etc/pam.d/vmware-authd
を編集して:
/etc/pam.d/vmware-authd
#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_permit.so session required pam_unix.so
vmware
の systemd サービスを再起動してください。
これでインストールで作られた証明書を使ってサーバーにアクセスできるはずです。
ALSA 出力の問題
音質や HD 音声出力が有効にできない問題を修正するには、まず以下を実行 [1]:
$ aplay -L
ゲストから 5.1 のサラウンド音声を再生したい場合 surround51:CARD=vendor_name,DEV=num
を、音質に問題がある場合は front:CARD=vendor_name,DEV=num
を確認して、.vmx
に名前を記述してください:
~/vmware/Virtual_machine_name/Virtual_machine_name.vmx
sound.fileName="surround51:CARD=Live,DEV=0" sound.autodetect="FALSE"
OSS エミュレーションを使っている場合、無効化してください。
カーネルベースの仮想マシン (KVM) が実行されている
起動時に KVM
を無効にするために、以下のようなファイルを使うことができます:
/etc/modprobe.d/vmware.conf
blacklist kvm blacklist kvm-amd # For AMD CPUs blacklist kvm-intel # For Intel CPUs
モジュールの問題
/dev/vmmon not found
エラーの全文は:
Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module `vmmon' is loaded.
これは vmmon
VMware サービスが動作していないことを意味しています。#Systemd サービスの systemd サービスを使っている場合は(再)起動してください。
/dev/vmci not found
エラーの全文は:
Failed to open device "/dev/vmci": No such file or directory Please make sure that the kernel module 'vmci' is loaded.
以下のコマンドを実行して VMware のカーネルモジュールを再コンパイルしてみてください:
# vmware-modconfig --console --install-all
インストーラーが起動しない
.bundle
を開くとプロンプトに戻ってしまう場合、おそらく VMware インストーラーの古いバージョンまたは壊れたバージョンが存在しています。削除してください (この記事のアンインストールセクションも参照してください):
# rm -r /etc/vmware-installer/
User interface initialization failed
以下のようなエラーが表示される場合もあります:
Extracting VMware Installer...done. No protocol specified No protocol specified User interface initialization failed. Exiting. Check the log for details.
ncurses5-compat-libsAUR をインストールするか、一時的に X に root でアクセスできるようにすることで解決します:
$ xhost + $ sudo ./<vmware filename>.bundle $ xhost -
ゲストで VMware Tools がダウンロードできない
ツールを手動でダウンロードするには VMware リポジトリ を訪れてください。
"application name / version / build ID / linux / packages/" まで移動して適切な Tools をダウンロードします。
展開するには次を実行:
$ tar -xvf vmware-tools-name-version-buildID.x86_64.component.tar
VMware インストーラーを使ってインストール:
# vmware-installer --install-component=/path/vmware-tools-name-version-buildID.x86_64.component
上記で上手くいかない場合は ncurses5-compat-libsAUR をインストールしてみてください。
Intel のマイクロコードが古いせいで起動時にセグメンテーション違反が発生する
Intel のマイクロコードが最新でないと起動時に以下のようなセグメンテーション違反が発生することがあります:
/usr/bin/vmware: line 31: 4941 Segmentation fault "$BINDIR"/vmware-modconfig --appname="VMware Workstation" --icon="vmware-workstation"
マイクロコードを参照してアップデートしてください。
時刻がおかしくなったり "[...]timeTracker_user.c:234 bugNr=148722" というエラーで VMware が起動しない
VMware Linux における電源管理機能 (Intel SpeedStep や AMD PowerNow!/Cool'n'Quiet) のサポートが 不完全 で CPU 周波数が変化するのが原因です。2012年3月、linux 3.3-1 のリリースによって、最大周波数の Performance ガバナーは動的な Ondemand によって置き換わりました。ホストの CPU 周波数が変化すると、ゲストのシステムクロックが早すぎたり遅すぎたりするようになり、ゲストが全く起動できなくなることもあります。
この問題を解決するには、全体設定で、ホストで最大 CPU 周波数を指定して、Time Stamp Counter (TSC) を無効化します:
/etc/vmware/config
host.cpukHz = "X" # The maximum speed in KHz, e.g. 3GHz is "3000000". host.noTSC = "TRUE" # Keep the Guest system clock accurate even when ptsc.noTSC = "TRUE" # the time stamp counter (TSC) is slow.
システムを再起動した後にゲストのネットワークが使えなくなる
おそらく vmnet
モジュールがロードされていないのが原因です [2]。自動ロードする方法は #systemd サービスセクションを参照してください。
Linux 4.9 でカーネルモジュールのビルドに失敗する
VMware Workstation Pro 12.5.2 現在、コンパイルを通すにはモジュールのソースに修正が必要です [3]:
# cd /usr/lib/vmware/modules/source # tar xf vmmon.tar # mv vmmon.tar vmmon.old.tar # sed -i 's/uvAddr, numPages, 0, 0/uvAddr, numPages, 0/g' vmmon-only/linux/hostif.c # tar cf vmmon.tar vmmon-only # rm -r vmmon-only
# tar xf vmnet.tar # mv vmnet.tar vmnet.old.tar # sed -i 's/addr, 1, 1, 0/addr, 1, 0/g' vmnet-only/userif.c # tar cf vmnet.tar vmnet-only # rm -r vmnet-only
バージョン 12.5.4 から vmplayer/vmware の起動に失敗する
フォーラムスレッド によれば、libpng
パッケージをバージョン 1.6.28-1 にダウングレードすることで一時的に解決できます。ダウングレードしたら /etc/pacman.conf の IgnorePkg
パラメータにパッケージを追加してください。
もしくは、以下のコマンドを実行することで VMWare がシステムの zlib を使うようになります:
# cd /usr/lib/vmware/lib/libz.so.1 # mv libz.so.1 libz.so.1.old # ln -s /usr/lib/libz.so.1 .
バージョン 12.5.3 で vmplayer/vmware が起動できない
この問題は /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6
で CXXABI_1.3.8
が抜けていることが原因です。
gcc-libs か gcc-libs-multilib[リンク切れ: 置換パッケージ: gcc-libs] がインストールされているのであればライブラリは既にインストールされています。ファイルを削除することで vmplayer は gcc-libs のライブラリを使うようになります。root で以下のコマンドを実行してください:
# mv /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6 /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6.bak
また、以下のコマンドで一時的に対処することもできます:
# export VMWARE_USE_SHIPPED_LIBS='yes'
vmware 12 のプロセスが起動後にすぐ終了し、GUI が起動しない
Mageia にバグが報告されていますが、Arch ではターミナルにエラーメッセージが表示されません。/tmp/vmware-<id>
のログを見ると VMWARE_SHIPPED_LIBS_LIST is not set
, VMWARE_SYSTEM_LIBS_LIST is not set
, VMWARE_USE_SHIPPED_LIBS is not set
, VMWARE_USE_SYSTEM_LIBS is not set
が確認できます。プロセスは Unable to execute /usr/lib/vmware/bin/vmware-modconfig
で終了しています。解決するには root で以下のコマンドを実行してください:
# mv /etc/vmware/icu/icudt44l.dat /etc/vmware/icu/icudt44l.dat.bak
もしくは以下のコマンドでも一時的に回避できます:
$ export VMWARE_USE_SHIPPED_LIBS='yes'
カーネル 4.11 以上で vmware モジュールのビルドに失敗する
vmware-modconfig を実行すると以下のように表示される場合:
Failed to get gcc information.
ログで実際のエラーを確認できます:
modconfig| I125: Got gcc version "6.3.1". modconfig| I125: GCC major version 6 does not match Kernel GCC major version 7. modconfig| I125: The GCC compiler "/sbin/gcc" cannot be used for the target kernel.
チェックをスキップするには、以下のコマンドを実行してください:
# sed 's/gcc version 7/gcc version 6/' /proc/version > /tmp/version # mount --bind /tmp/version /proc/version # vmware-modconfig --console --install-all # umount /proc/version && rm /tmp/version
アンインストール
VMware をアンインストールするには製品名が必要です (vmware-workstation
または vmware-player
)。インストールされている製品を全て表示するには:
$ vmware-installer -l
次のコマンドでアンインストールしてください (--required
で確認をスキップできます):
# vmware-installer -u <product> --required
vmware
サービスを無効にして削除するのも忘れないで下さい:
# rm /etc/systemd/system/vmware.service # rm /etc/systemd/system/vmware-usbarbitrator.service
/usr/lib/modules/<kernel name>/misc/
のモジュールディレクトリにも何か残っていないか確認すると良いでしょう。