VMware - Arch Linux 中文维基

跳至內容

# VMware

出自 Arch Linux 中文维基

相關文章

- 分類:虛擬機管理
- /安裝 Arch Linux 為虛擬機
- Moving an existing install into (or out of) a virtual machine

翻譯狀態：

- 本文（或部分內容）譯自 VMware，最近一次同步於 2025-07-15，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

本文或本節需要翻譯。要貢獻翻譯，請訪問簡體中文翻譯團隊。

附註： need translation（在 Talk:VMware# 中討論）

本文介紹的是最新的主要 VMware 版本，即 VMware Workstation Pro 和 Player 17、16、15、14 和 12.5。

你可能也會想了解下 /安裝 Arch Linux 為虛擬機。

## 安裝

注意：自版本 14 以來，VMware 已放棄對許多 CPU 的支持，包括早期的 Intel Core i7 CPU。請檢查主機 CPU 要求，並確保 BIOS/UEFI 固件中啟用了 CPU 的虛擬化技術（AMD-V 或 VT-x）。如果較新版本不支持您的 CPU，則可以使用 vmware-workstation12AUR。

安裝 vmware-workstationAUR 和已安裝內核對應的頭文件包（例如 linux-headers包 或 linux-lts-headers包）。

然後啟動 `vmware-networks-configuration.service` 來生成 `/etc/vmware/networking` 文件。

最後，根據需要啟用以下一些服務：

- `vmware-networks.service` 用於虛擬機網絡訪問（否則您將收到錯誤 `could no connect 'ethernet 0' to virtual network` 並且您將無法使用 vmware-netcfg）
- `vmware-usbarbitrator.service` 用於將 USB 設備連接到虛擬機
- `vmware-hostd.service` 用於共享虛擬機（從版本 16 起不可用）

最後，加載 VMware 模塊：

    # modprobe -a vmw_vmci vmmon

如果加載時長時間無響應，請參考 #無法加載 vmmon 模塊。

## 用法

打開 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，您可以通過將其移動到以下位置讓虛擬機使用它：`~/vmware/虛擬機名稱`：

    $ mv bios440.rom ~/vmware/虚拟机名称/

然後將名稱添加到 `虛擬機名稱.vmx` 文件:

    ~/vmware/虛擬機名稱/虛擬機名稱.vmx

    bios440.filename = "bios440.rom"

### 在 Intel、Optimus 和 AMD 上啟用 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`。

VMware Workstation 16.2 從 OpenGL 改用到了 Vulkan，因此設置會有些不同。如果你的驅動不受支持，日誌會顯示：

    mks Vulkan Renderer: Only the AMDVLK driver is supported at this time.
    mks Vulkan Renderer: No supported Vulkan device/driver found (See mks.vk.allowUnsupportedDevices or mks.vk.forceDevice configuration options).

如果你的驅動被禁用，你得把 `mks.vk.allowUnsupportedDevices = "TRUE"` 添加到 `~/.vmware/preferences` 或者換一個支持的驅動 - 如果不確定要進行哪種操作，就看看虛擬機目錄裡的 `vmware.log`。

注意：You might need to add the `mks.gl.allowBlacklistedDrivers = "TRUE"` inside the `.vmx` file for the specific virtual machine as well, for 3D acceleration with `intel` drivers to be enabled.

### 在主機掛起/休眠之前掛起虛擬機

創建一個可執行文件：

    /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

See also Power management/Suspend and hibernate#Hooks in /usr/lib/systemd/system-sleep, suspend all virtual machines with vmrun and Support for hibernation.

### 系統提速技巧

參考性能優化。

#### 禁用透明大頁

本文或本章節可能需要合併到Improving performance。

附註： Not specific to VMware.（在 Talk:VMware 中討論）

If you notice the guest and/or the host frequently freezing when running a VM, you may want to disable transparent hugepages. To disable them for the current session, run (on the host):

    # echo never > /sys/kernel/mm/transparent_hugepage/enabled

To make the change persistent across boots, add the kernel parameter `transparent_hugepage=never`.

You can also use `madvise` instead of `never` to still allow applications that are optimized for transparent hugepages to obtain the performance benefits[1]. This does the same for vmware as above.

#### 確保直接訪問內存

默認情況下，VMware 會將虛擬機系統的內存寫入到硬碟上的文件內。如果你確定內存空間足夠，可以添加以下設置到虛擬機的 `.vmx` 文件內以確保虛機系統直接寫入到內存中：

    Virtual_machine_name.vmx

    MemTrimRate = "0"
    sched.mem.pshare.enable = "FALSE"
    prefvmx.useRecommendedLockedMemSize = "TRUE"
    mainmem.backing = "swap"

### 性能提示

要提升虛擬機的性能，可以參考下列技巧：

#### 准虛擬化 SCSI 適配器

VMware 准虛擬化 SCSI（PVSCSI）適配器是用於 VMware ESXi 的高性能存儲適配器，可以達到更高的吞吐量和更低 CPU 占用。PVSCSI 適配器適用於需要高 I/O 吞吐量的軟硬體環境。

SCSI 適配器類型 `VMware Paravirtual` 可在虛擬機設置中應用。

如果在虛擬機設置中沒有這些選項，也還是可以啟用准虛擬化 SCSI 適配器。首先，通過修改 `mkinitcpio.conf` 確保准虛擬化 SCSI 適配器包含在內核鏡像中：

    /etc/mkinitcpio.conf

    ...
    MODULES=(... vmw_pvscsi)
    ...

重新生成 initramfs。

關閉虛擬機，並修改 SCSI 適配器：修改 `.vmx` 中的對應項為如下：

    scsi0.virtualDev = "pvscsi"

#### 准虛擬化網絡適配器

VMware 為客戶機系統提供了多種網絡適配器。默認適配器通常為 `e1000`，它會模擬一張 Intel 82545EM 千兆以太網卡。該 Intel 網卡通常兼容包括 Arch 在內的多數作業系統的內置驅動。

為了獲得更高性能和更多特性（例如多隊列支持），可以使用 VMware 原生的 `vmxnet3` 網絡適配器。

Arch 的默認安裝方式已包含了 `vmxnet3` 內核模塊。通過 mkinitcpio 啟用（或者自動檢測啟用；可通過執行 `lsmod | grep vmxnet3` 檢查是否已加載模塊）後，關機並按如下步驟在 .vmx 中修改網絡適配器類型：

    ethernet0.virtualDev = "vmxnet3"

在修改網絡適配器後，需要修改網絡和 dhcpcd 設置以使用新網卡名稱和 MAC 地址。

    # dhcpcd new_interface_name
    # systemctl enable dhcpcd@new_interface_name.service

可通過執行 `ip link` 來獲取新的網卡名稱。

#### 虛擬機設置

下列設置以主機內存占用為代價降低硬碟 I/O,可以提升虛擬機響應度。Vmware 的 KB1008885 提供了下列優化設置：

    mainMem.useNamedFile = "FALSE"
    MemTrimRate = "0"
    prefvmx.useRecommendedLockedMemSize = "TRUE"
    MemAllowAutoScaleDown = "FALSE"
    sched.mem.pshare.enable = "FALSE"

- mainMem.useNamedFile：僅適用於 Windows 主機，適用於關閉虛擬機時出現高硬碟占用率的情況，該選項會阻止 VMware 創建 .vmem 文件。在 Linux 主機上請使用 mainmem.backing = "swap"。
- MemTrimRate：該選項阻止虛擬機釋放的內存同時被主機釋放掉。
- prefvmx.useRecommendedLockedMemSize：該選項似乎沒有具體功能解釋；其作用似乎為防止主機交換虛擬機的部分內存。
- MemAllowAutoScaleDown：防止 VMware 在無法分配足夠內存的情況下調整虛擬機的內存大小。
- sched.mem.pshare.enable：如果同時運行了多個虛擬機，VMware 會試圖在多個虛擬機間尋找並共享相同的內存頁。可能產生高 I/O 負載。

也可以在 VMware workstation 的配置窗口內添加如下設置（Edit -> Preferences... -> Memory/Priority）：

    prefvmx.minVmMemPct = "100"
    mainMem.partialLazySave = "FALSE"
    mainMem.partialLazyRestore = "FALSE"

- prefvmx.minVmMemPct：在主機上為虛擬機預留的內存大小百分比。更低的值會允許為虛擬機分配比主機系統可用大小更多的內存。但請注意，該情況很可能會導致高硬碟占用率。如果主機上的內存足夠，建議保留該值為 100。
- mainMem.partialLazySave 和 mainMem.partialLazyRestore：這兩個選項會防止虛擬機在掛起時創建部分快照。在使用這兩個選項時，虛擬機掛起耗時會稍微增加，但會降低 VMware 存儲這些數據產生的磁碟占用率。

## 解難答疑

### Kernel headers for version x.y-zzzz were not found. If you installed them[...]

安裝你使用內核所對應的 headers，如 linux包 對應linux-headers包

注意：較常見的錯誤有：更新內核及頭文件後，重啟一次才能啟動到與頭文件版本一致的新內核。

### 無法加載 vmmon 模塊

根據 VMware 社區中的描述，需要禁用安全啟動才能加載 `vmmon` 模塊。

### 遠程連接 VMware 時提示登錄憑據錯誤

可以通過 `vmware-workstation-server` 服務遠程管理 VMware Workstation 已共享的虛擬機，但是，`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 服務。

你現在可以使用安裝過程提供的憑據連接到伺服器了。

注意：啟動虛擬機可能需要安裝 libxslt包。

### ALSA 輸出問題

要修復音頻質量問題或啟用正確的 HD 音頻輸出，首先執行：

    $ 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

提示：如果加入黑名單後 `kvm` 模塊還會加載，且你使用的設備帶有 Intel 集成顯卡（i915，i965），那有可能需要同時在內核命令行選項中將 `kvmgt` 模塊添加到黑名單。詳細信息請查閱內核模塊#使用內核命令行_2。

### 在 HiDPI 顯示器上，VMware 應用 UI 上的圖標及間距沒有正確縮放

參閱 HiDPI#VMware。

### Wayland 問題

#### GNOME 下鍵盤捕獲無效

VMWare Player/Workstation 17.5（及更舊版本）中存在問題：具體信息

要允許用戶界面捕獲鍵盤：

    $ gsettings set org.gnome.mutter.wayland xwayland-allow-grabs "true"
    $ gsettings set org.gnome.mutter.wayland xwayland-grab-access-rules "['vmplayer','vmware-vmx','mksSandbox']"

另外，也可以在 Windows 下使用以下快捷鍵：

- 使用 `Super+Alt+Tab` 取代 `Alt+Tab` 以切換任務
- 使用 `Ctrl+Esc` 顯示開始菜單

### 模塊問題

#### 找不到 /dev/vmmon

完整報錯如下：

    Could not open /dev/vmmon: No such file or directory.
    Please make sure that the kernel module 'vmmon' is loaded.

這表示至少 `vmmon` 模塊沒有被加載。可參考#安裝一節啟用自動加載相關的服務。

另一種可能是由 5.18 版本內核以及 11 代和更新 Intel 處理器的間接分支跟蹤功能導致。

在這種情況下，將 `ibt=off` 添加到你的內核參數中。具體信息請參考 [2]。

#### 找不到 /dev/vmci

完整報錯如下：

    Failed to open device "/dev/vmci": No such file or directory
    Please make sure that the kernel module 'vmci' is loaded.

首先嘗試手動加載內核：

    # modprobe -a vmw_vmci

也可以試試重新編譯 VMware 內核模塊：

    # vmware-modconfig --console --install-all

### 無法啟動 VMware

#### CPUIDEarly 模塊上電失敗

版本 14 比 12 有更嚴格的 CPU 需求。如果你嘗試在不兼容的 CPU 上啟動虛擬機，會出現如下報錯：

     This host does not support virtualizing real mode.
     The Intel "VMX Unrestricted Guest" feature is necessary to run this virtual machine on an Intel processor.

解決方法為卸載版本 14，並重新安裝版本 12（vmware-workstation12AUR）。

如果 VMware 平時可用，但忽然出現該錯誤，那有可能是在暖/軟啟動或系統掛起後導致的。請嘗試進行一次冷啟動（關機並重新開機）。

#### 舊 Intel 微碼導致的分段錯誤

舊 Intel 微碼可能會在啟動時導致如下分段報錯：

    /usr/bin/vmware: line 31: 4941 Segmentation fault "$BINDIR"/vmware-modconfig --appname="VMware Workstation" --icon="vmware-workstation"

微碼更新方法請參考微碼一文。

#### vmplayer/vmware 版本 14 啟動失敗

在 `librsvg` 版本 2:2.44.0 及以上的系統中，`/tmp/vmware-<id>` 位置下的日誌文件會顯示數條如下報錯：

    appLoader| I125+ undefined symbol

一種臨時處理方法為將 `librsvg` 降級到更早版本；更好的方法為強制 VMware 使用其自帶的 `librsvg`：

    # export LD_LIBRARY_PATH=/lib/vmware/lib/librsvg-2.so.2:$LD_LIBRARY_PATH

VMware 同時提供了一個 `VMWARE_USE_SHIPPED_LIBS` 變量：

    $ env VMWARE_USE_SHIPPED_LIBS=1 vmware

#### 從 12.5.4 版本開始無法啟動 vmplayer/vmware

參考 [3]，臨時解決方法為將 `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 至 12.5.5 版本的 vmplayer/vmware

似乎是 `/usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6` 文件缺少 `CXXABI_1.3.8` 導致的問題。

如果系統安裝了 gcc-libs包，那就已有了該庫文件。因此，可以嘗試將其移除，然後 vmplayer 會轉而使用 gcc-libs 提供的文件。以根用戶權限執行：

    # 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 後進程閃退，未能加載圖形界面

Registered bug at Mageia, but it seems that there are no error messages shown in terminal with arch. When inspecting the logs, which are in `/tmp/vmware-<id>`, there are `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` issues. Process simply terminates with `Unable to execute /usr/lib/vmware/bin/vmware-modconfig.` after vmware or vmplayer is executed. Solution is the same, as root do:

    # mv /etc/vmware/icu/icudt44l.dat /etc/vmware/icu/icudt44l.dat.bak

Also there is a workaround:

    # export VMWARE_USE_SHIPPED_LIBS='yes'

Despite setting the VMWARE_USE_SHIPPED_LIBS variable, VMWare may still fail to find certain libraries. An example is the libfontconfig.so.1 library. Check vmware logs in the tmp directory to see which libraries are still not found. Copy them to the appropriate path with libraries existing on the system:

    # cp /usr/lib/libfontconfig.so.1 /usr/lib/vmware/lib/libfontconfig.so.1/

Instead of copying all these files manually, you may want to try exporting an additional setting:

    # export VMWARE_USE_SYSTEM_LIBS='yes'

On systems with fontconfig version 2.13.0 and above, it may be needed to force VMware to use the shipped libfontconfig file instead of the newer system file. In such case, it is also necessary to provide a shared object library file `libexpat.so.0` for the shipped fontconfig. This applies for at least VMware version 12.5.9. As root do:

    # ln -s /usr/lib/libexpat.so /usr/lib/vmware/lib/libfontconfig.so.1/libexpat.so.0
    # export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libfontconfig.so.1:$LD_LIBRARY_PATH

### 虛擬機問題

#### 無法為客戶機下載 VMware Tools

可以通過訪問 VMware 存儲庫[失效連結 2025-04-06 ⓘ]手動下載工具：

訪問 "application name / version / build ID / linux / packages/" 路徑並下載對應的工具。

使用如下命令解壓：

    $ 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。

#### 虛擬機的系統時間錯誤或無法啟動："[...]timeTracker_user.c:234 bugNr=148722"

這一章節正在考慮移除。

原因: `ondemand` is no longer the default governor, does this still apply to the `schedutil` governor? (在 Talk:VMware 討論)

This is due to incomplete[失效連結 2024-10-12 ⓘ] support of power management features (Intel SpeedStep and AMD PowerNow!/Cool'n'Quiet) in VMware Linux that vary the CPU frequency. In March 2012, with the release of linux 3.3-1 the maximum frequency Performance governor was replaced with the dynamic Ondemand. When the host CPU frequency changes, the Guest system clock runs too quickly or too slowly, but may also render the whole Guest unbootable.

To prevent this, the maximum host CPU frequency can be specified, and Time Stamp Counter (TSC) disabled, in the global configuration:

    /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.

提示：To periodically correct the time (once per minute), in the Options tab of VMware Tools, enable: "Time synchronization between the virtual machine and the host operating system".

#### 系統重啟後客戶機丟失網絡連接

該問題很可能由 `vmnet` 未被加載導致 [4]。可參考#安裝一節啟用自動加載相關的服務。

#### 滑鼠問題

##### 超出 5 個後的滑鼠按鍵無法使用

如果你滑鼠的拇指或其它額外按鈕無法正常工作，可以設置客戶機使用高級滑鼠。

##### 客戶機上的滑鼠滾輪表現怪異

This is related to the current Xorg keyboard layout on Host system. Keep primary layout (e.g., English) selected on Host while working on Guest.

#### 嵌套虛擬機沒有 IP 地址及網絡連接

該問題與混雜模式有關。根據標準 Linux 實踐，該模式僅能由根用戶啟用。為了繞過該限制，需要修改對應網絡設備的權限。

對單個用戶組給予權限：

    # chgrp group /dev/vmnetX

    # chmod g+rw /dev/vmnetX

對所有用戶給予權限：

    # chmod a+rw /dev/vmnetX

分類：​

- 虛擬機管理
- 包含失效連結的頁面
- 使用「模板:Remove」標記的章節

隱藏分類：​

- 使用「模板:Translateme」標記的頁面或章節
- 使用「模板:合併」標記的頁面或章節

VMware
新增話題