VMware

提供: ArchWiki
2023年1月30日 (月) 16:16時点におけるKgx (トーク | 投稿記録)による版 (→‎System speedup tricks: 翻訳)
ナビゲーションに移動 検索に移動

関連記事

この記事では最新バージョンの VMware である VMware Workstation Pro と Player 16, 15, 14, 12.5 を扱います。 ​ VMware に Arch Linux をインストールすることもできます。

目次

前提条件

1. マシンの BIOS/UEFI で仮想化を有効にする。

インストール

VMware Bundle または vmware-workstationAUR パッケージを使用してインストールします。 x86_64で VMware Workstation を使用する場合は、後者が優先されます。

ノート: VMware は、バージョン 14 以降、初期の Intel Core i7 CPU を含む多くの CPU のサポートを終了しました。 ホストのプロセッサ要件を確認してください。 CPU が新しいリリースでサポートされていない場合は、vmware-workstation12 を使用できます。AUR

VMware bundle

適切な依存パッケージをインストールしてください:

最新の VMware Workstation Pro または Player をダウンロードしてください (若しくは、可能であれば ベータ バージョン)。

インストールを開始してください:

# sh VMware-<edition>-<version>.<release>.<architecture>.bundle
ヒント: その他の有用なフラグ:
  • --eulas-agreed - EULA をスキップ。
  • --console - コンソール UI を使います。
  • --custom - インストールディレクトリを /usr/local などに変更できます (変更した場合は systemd サービスvmware-usbarbitrator.service 内のパスも更新してください)。
  • -I, --ignore-errors - 致命的なエラーを無視します。
  • --set-setting=vmware-workstation serialNumber XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - インストールのシリアル番号を設定 (スクリプトでインストールするときに有用)。
  • --required - 必須の質問だけを表示 (--eulas-agreed--console と組み合わせることでサイレントインストールできます)。

System service scripts directory には、 /etc/init.d を使って下さい (デフォルト)。

ノート: インストール中に "No rc*.d style init script directories" というエラーが表示されますが、Arch は systemd に移行しているので、無視してかまいません。
ヒント: 後でターミナルからモジュールを(再)ビルドするには、次のコマンドを使って下さい:
# vmware-modconfig --console --install-all

Package build for x86_64

VMware Workstation のバージョン 16、15、14、12、11 に対応する vmware-workstationAUR, vmware-workstation15AUR, vmware-workstation14AUR, vmware-workstation12AUR または vmware-workstation11AUR をインストールします。また、linux-headerslinux-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 ファイルを使用することもできます (AURvmware-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 はあなたのライセンスキーに置き換えてください。

ノート: -debug バイナリはライセンスが間違っている場合に知らせてくれます。

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 vmrunSupport 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)
...

Regenerate the initramfs.

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

vmwaresystemd サービスを再起動してください。

これでインストールで作られた証明書を使ってサーバーにアクセスできるはずです。

ノート: 仮想マシンを起動するために libxslt が必要になるかもしれません。

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 SpeedStepAMD 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.
ヒント: 定期的に時刻を補正するには、VMware Tools の Options タブで、次のオプションを有効化してください: "Time synchronization between the virtual machine and the host operating system"

システムを再起動した後にゲストのネットワークが使えなくなる

おそらく 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.confIgnorePkg パラメータにパッケージを追加してください。

もしくは、以下のコマンドを実行することで 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.6CXXABI_1.3.8 が抜けていることが原因です。

gcc-libsgcc-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
ヒント: --console を使って、コンソールUIにします。

vmware サービスを無効にして削除するのも忘れないで下さい:

# rm /etc/systemd/system/vmware.service
# rm /etc/systemd/system/vmware-usbarbitrator.service

/usr/lib/modules/<kernel name>/misc/ のモジュールディレクトリにも何か残っていないか確認すると良いでしょう。