ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux虚拟机VMware Tools安装全攻略:open-vm-tools与tar包避坑指南

Linux虚拟机VMware Tools安装全攻略:open-vm-tools与tar包避坑指南 很多人在Linux虚拟机里装VMware Tools第一步就卡住了要么VMware 17.6以后压根找不到linux.iso要么安装脚本跑一半提示“继续运行脚本未能在虚拟机中成功运行”要么折腾了半天复制粘贴还是失灵。这个操作看起来简单实际上涉及驱动模块编译、内核头文件匹配、服务自启等多个环节任何一个地方不对都能磨掉一下午。这篇文章我用实际折腾过的路线重新梳理一遍把该避的坑提前标出来。不管你是用Ubuntu桌面版、Kali学习笔记玩家还是服务器上用CentOS做运维又或者在搞嵌入式Linux交叉编译环境都可以按下面两条路径对号入座优先用发行版自带的open-vm-tools实在不行再走传统tar包安装。搞懂这两条路绝大多数问题都能自己解决。1. 装之前先搞明白VMware Tools到底解决什么问题1.1 它不只是“显卡驱动”是虚拟化增强套件很多人以为VMware Tools就是个显卡驱动装上之后屏幕分辨率能自动适配而已。实际上它是一整套虚拟化增强套件核心模块和功能大致是这么几块显示驱动模块vmxnet、xorg驱动相关负责分辨率自适应、2D/3D加速以及窗口大小随VMware窗口自动调整。内存气球模块vmmemctl让虚拟机在高负载时可以把不活跃的内存归还给宿主机实现内存动态回收避免宿主机因为内存不足变得卡顿。共享文件夹模块vmhgfs这是VMware里设置“共享文件夹”后Linux内部能真正挂载宿主机目录的前提。拖拽复制与剪贴板模块负责宿主机和虚拟机之间直接拖文件、双向复制粘贴文本。时间同步服务定时校准虚拟机系统时间和宿主机一致避免休眠恢复后时间漂移。我刚入门时也以为要紧盯“VMware Tools”这个名字后来才发现它其实不需要用户感知太多东西。装上以后最直观的体感就是屏幕终于不局促了、鼠标进出虚拟机不再被锁住、宿主机和虚拟机之间复制代码再也不用靠中间跳板机。1.2 两种安装路线的选择逻辑针对Linux发行版实际存在两条完全不同的安装途径方案来源适用场景维护方式open-vm-toolsLinux发行版官方软件源绝大多数现代发行版Ubuntu/CentOS/Debian/Kali等随系统包管理器更新内核升级后自动重建模块VMware官方tar包VMware提供的VMwareTools-x.x.x.tar.gz旧版发行版、定制系统、无软件源环境手动安装、手动重编模块选型逻辑其实很简单只要你的发行版是近十年内的能用open-vm-tools就优先用它。它的最大优势是跟系统深度集成内核一旦升级包管理器会自动帮你重编内核模块而官方tar包装完之后每次大版本内核升级几乎都要重跑一遍安装脚本非常痛苦。1.3 为什么VMware 17.6之后很多人一上来就报错最近逛论坛时高频看到一句话“VMware Tools is no longer shipped with VMware Workstation for this guest operating system”。这个提示并不是错误而是VMware 17.6系列开始的行为变化VMware Workstation对Linux guest不再随程序打包完整的linux.iso工具镜像转而全面依赖发行版软件源里的open-vm-tools。所以新版本里你在VM菜单里点“安装VMware Tools”可能弹出的提示是让你去系统里执行包管理器命令。很多人不知道这一点还在网上拼命找“linux.iso 下载”或者直接下载老版本的VMware Tools包硬装结果装上之后和内核模块不匹配反而弄出一堆问题。理解了这条背景你就知道接下来的主路线该怎么走了。2. 安装前的环境准备避免90%的坑2.1 先确认发行版、内核版本和桌面环境开始安装以前先在虚拟机里执行几个命令把系统底细摸清楚。这一步花不了两分钟但能让你后续少踩一大半坑。# 查看发行版信息 cat /etc/os-release # 查看内核版本 uname -r # 查看桌面环境有输出就是装了桌面版 echo $XDG_CURRENT_DESKTOP是否需要图形界面决定了你要不要多装一个包。纯Server环境只需要命令行工具装open-vm-tools本体即可Ubuntu桌面版或Kali默认桌面环境还需要安装desktop增强包否则复制粘贴和拖拽功能依然用不了。内核版本信息也重要后面编译模块或者排查报错时系统会明确告诉你“当前运行的是5.15.0-x-generic但headers找不到”你只有先知道自己内核版本才能对症下药。2.2 检查虚拟机上是不是已经有Tools在运行很多机器出厂模板里其实已经预装了open-vm-tools尤其是云镜像和OpenStack镜像转化来的虚拟机。装之前可以先检查一遍避免重复安装# Debian / Ubuntu 系 dpkg -l | grep open-vm # RHEL / CentOS 系 rpm -qa | grep open-vm如果已经装过但是功能不生效可以直接跳到文章后面排查部分。如果没装过再进行下面的步骤。还可以顺手看一眼当前已加载的内核模块lsmod | grep vmw如果像vmw_balloon、vmxnet3这些模块已经有输出说明工具箱已经工作了一部分后面只需要补服务和桌面组件。2.3 提前装好编译所需的内核头文件和工具链如果走open-vm-tools路线大部分发行版是不需要手动装内核头文件的包管理器会帮你处理依赖。但如果你准备走tar包路线或者遇到了内核模块编译失败就必须提前安装对应版本的linux-headers和gcc、make等工具链。以Ubuntu 22.04/24.04为例sudo apt update sudo apt install -y build-essential linux-headers-$(uname -r) dkmsRHEL系的命令是sudo dnf install -y gcc make kernel-devel kernel-headers dkms perl我个人的习惯是只要是准备在虚拟机上长期做开发就直接把dkms一起装上。dkms的全称是Dynamic Kernel Module Support它的作用是以后系统内核升级时自动帮你重新编译所有登记在册的外部内核模块。装上它就不会出现“今天还能用内核一更新共享文件夹就挂了”的情况。2.4 磁盘空间、网络和虚拟光驱的检查清单安装脚本跑失败有时候不是软件问题而是环境变量太简陋导致的。至少留出1GB以上空闲空间因为编译内核模块时临时文件不少。然后确认虚拟机网络能正常连通尤其走apt/dnf方式装包时软件源必须能访问。另外tar包安装前还需要确认VMware菜单里的“CD/DVD (SATA)”光驱状态正常。VMware安装工具时会把linux.iso镜像挂载到虚拟光驱如果光驱被其他ISO占用了菜单操作后虚拟机里看不到设备这就是很多人“挂载了却看不到文件”的原因之一。建议进入虚拟机设置把CD/DVD设置为“使用ISO镜像文件”选择一个已知路径然后在VM菜单中选择连接或安装Tools让VMware自动完成挂载。3. 首选方案用open-vm-tools两分钟装完3.1 不同发行版的安装命令如果你是主流发行版这是效率最高的一条路。命令就几行关键是别把桌面增强包漏掉。Debian / Ubuntu / Kali 系列sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktopRHEL / CentOS / Fedora 系列sudo dnf install -y open-vm-tools open-vm-tools-desktopSUSE / openSUSE 系列sudo zypper install open-vm-tools open-vm-tools-desktop如果是国内一些Linux发行版只要基于Debian或RHEL体系包名基本一致。注意有的精简版系统软件源里没有桌面增强包如果apt提示找不到open-vm-tools-desktop就说明当前仓库没有收录可以先只装本体然后手动验证功能是否缺失。3.2 为什么桌面版还要装open-vm-tools-desktopopen-vm-tools本体提供的服务主要是驱动、时间同步、内存回收这些底层能力它并不包含X11桌面集成所需的一堆用户态组件。而open-vm-tools-desktop这个包会补齐以下能力Xorg下的显示驱动配置让分辨率自适应真正生效。剪贴板双向同步也就是宿主机和虚拟机之间CtrlC/CtrlV文本互通。文件拖拽功能。Unity模式老版本相关的D-Bus接口。如果你只装了本体虚拟机里看着服务也都正常但复制粘贴就是没反应多半就是少了desktop包。之前有个朋友在Kali上只装了open-vm-tools折腾半天后来补装open-vm-tools-desktop注销重新登录就全部正常了。3.3 启动服务、开机自启和验证手段包管理器装完后服务通常会自动启动但还是建议手动执行一遍确认状态sudo systemctl enable --now vmtoolsd sudo systemctl status vmtoolsd在服务状态里能看到active (running)就说明服务层没问题了。关掉重开一次虚拟机看屏幕上是不是能自动撑满VMware窗口如果能那基本就完成了一个完整闭环。想进一步确认内核模块是否正常工作可以用vmware-toolbox-cmd查看信息# 查看Tools版本号 vmware-toolbox-cmd -v # 查看宿主机时间 vmware-toolbox-cmd stat hosttime # 查看内存气球状态 vmware-toolbox-cmd stat balloon3.4 几个值得收藏的vmware-toolbox命令很多人不知道open-vm-tools里其实藏着一些日常很好用的命令。除了上面那几条下面这几个我经常在自动化脚本里用命令用途vmware-toolbox-cmd stat raw显示宿主机和虚拟机的负载信息汇总vmware-toolbox-cmd disk shrink /尝试对根分区进行磁盘瘦身vmware-toolbox-cmd device list查看已连接的虚拟设备列表vmware-rpctool “info-get guestinfo.ip”读取guestinfo里的IP地址适合自动化场景不过要提醒一句disk shrink操作对快照和LVM逻辑卷支持有限如果虚拟机有多个快照建议先把快照清理干净再瘦身否则容易把磁盘搞出问题。4. 传统tar包安装老系统的无奈之选4.1 哪些场景必须走tar包路线虽然open-vm-tools是主流但下面几类场景还得靠官方tar包发行版太老软件源里根本没有open-vm-tools包。离线内网环境无法用包管理器从远程源下载安装。定制化系统开发者希望使用VMware官方推荐的内核模块版本。某些特殊的国产Linux发行版软件源未收录open-vm-tools。在这些情况下你不得不手动挂载linux.iso用vmware-install.pl完成安装。整体步骤不难但要特别注意每一步的交互问答不能一路回车无脑默认。4.2 从虚拟机菜单挂载linux.iso到解压在VMware Workstation菜单栏点击“虚拟机”-“安装VMware Tools”。如果老版本VMware弹出了工具镜像系统里会多出一个光驱设备。接着在Linux终端里操作# 查看光驱设备名 lsblk # 通常光驱是 /dev/cdrom直接挂载 sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom # 查看镜像里的文件 ls /mnt/cdrom镜像是VMwareTools-x.x.x-xxxxxxx.tar.gz的一个压缩包。把它拷贝到/tmp或者其他可写目录然后解压cd /tmp tar zxpf /mnt/cdrom/VMwareTools-*.tar.gz ls vmware-tools-distrib这里有个细节值得说一下不要直接从/mnt/cdrom下运行安装脚本因为光驱文件系统和系统分区在安装过程中可能由于重新挂载而变得不可用导致脚本执行到一半找不到自己的安装源。先把tar包拷到本地磁盘再解压运行是最稳妥的做法。4.3 vmware-install.pl全程怎么回答解压后进入vmware-tools-distrib目录然后执行cd vmware-tools-distrib sudo ./vmware-install.pl脚本会问一堆问题最保险的回答方式是这样的询问是否继续安装输入yes回车。询问文件安装路径直接回车使用默认路径。询问是否需要安装共享文件夹支持vmhgfs选择yes。询问是否需要开启X11组件如果有桌面环境就选yes。询问是否自动重新启动X服务选no避免会话被突然打断。询问是否需要编译内核模块选择yes。整个编译过程视机器性能而定通常几分钟内完成。看到“Enjoy your VMware virtual machine!”之类的提示基本就装完了。偶尔会看到“The configuration of VMware Tools is complete for this guest operating system”的提示这时可以顺手执行一下vmware-toolbox把时间同步等选项打开。4.4 顺手解决Linux解压文件乱码的小问题很多人解压Windows传过来的zip包时文件名会变成乱码比如“├”开头的一堆乱码。这通常不是VMware Tools的问题而是zip包用了Windows的GBK编码而Linux dpkg工具链默认按UTF-8解码。遇到这种时候用unzip的-O参数指定编码方式sudo apt install unzip unzip -O gbk 中文压缩包.zip如果系统里unzip版本太老不支持-O参数可以考虑用Python的zipfile写个小命令或者换用7z工具sudo apt install p7zip-full 7z x 中文压缩包.zip再说回正题如果在tar包解压过程中看到的是乱码多半是locale环境变量没设置好可以执行export LANGC.UTF-8后再解压。不过官方tar包路径基本都是ASCII字符正常情况下不会乱码。5. 常见报错与排查实录5.1 “继续运行脚本未能在虚拟机中成功运行”到底卡在哪这句话应该是这个标题下最让人头疼的一个提示。它不是一个具体的错误信息而是安装流程结束后VMware尝试在guest内执行额外的配置脚本时没有等到预期的成功结果。排查思路按优先级排序先看虚拟机里是否有网络连接。脚本运行阶段可能需要和宿主机通信如果网络没配好配置会卡在握手阶段。看perl是否已安装。vmware-install.pl脚本本身是perl写的很多精简版系统并未预装perl脚本根本执行不了。看磁盘空间。内核模块编译时空间不足会在没有任何明显Error提示的情况下直接退出。看服务的systemd单元是否被禁用。如果以前装过又卸载过残留的配置文件会导致新安装无法正常注册服务。排查时建议先手动在虚拟机里执行sudo journalctl -u vmtoolsd --no-pager -n 50如果有报错就按报错处理。如果journal里一片空白就看脚本本身是不是perl缺失导致没能成功注册服务。5.2 内核模块编译失败headers、GCC、版本错位“Your kernel was built with a different compiler”这种报错我见过太多次了。它背后的逻辑是你当前内核编译时使用的GCC版本和现在的GCC大版本不一致Linux内核模块对编译器版本很敏感不一致时强行编译轻则模块加载失败重则系统panic。遇到这种情况优先确认你是否装了和当前内核完全匹配的linux-headers包。Ubuntu上如果uname -r是5.15.0-91-generic就要确保apt里安装了linux-headers-5.15.0-91-generic而不是随便装个generic版本就完事。执行以下命令验证ls /usr/src/linux-headers-$(uname -r)如果目录不存在就说明headers没装对。装好headers后再看GCC版本gcc --version如果系统里同时存在多个版本可以通过设置CC环境变量指定版本或者用系统的编译器切换工具。不过对新手来说最常见的解法其实就是换一条路——不要继续跟tar包的编译错误死磕直接改用open-vm-tools让包管理器自动匹配内核和工具链省心太多了。5.3 装完屏幕还是800x600、复制粘贴还是失效这种情况通常发生在桌面版Linux上安装过程没报错服务也active但体验没到位。我排查时一般按这个顺序确认是否安装了desktop增强包没有就补上。注销当前桌面会话重新登录很多X11相关配置要在会话重启后才生效。确认X服务没有使用VNC或Wayland的孤立会话。如果用Waylandopen-vm-tools对剪贴板拖拽的支持会比X11弱很多建议切回Xorg会话。执行sudo vmware-toolbox-cmd stat hostinfo看看vmware-toolbox是否真正连接上了宿主机端。另外Kali这类基于Debian但定制了桌面环境的系统有时还需要安装xserver-xorg-video-vmware这个驱动包否则即使vmtoolsd运行分辨率依然只能靠通用的modesetting驱动扛着。5.4 报错速查表现象最可能的原因解决办法找不到linux.isoVMware 17.6不再预置改用open-vm-tools安装脚本无法启动perl缺失安装perl开放执行权限找不到kernel headers未装对应版本安装linux-headers-$(uname -r)模块编译报编译器版本冲突GCC版本不一致指定版本或用包管理器安装服务active但鼠标仍被锁桌面未注销重登重启会话或重启虚拟机复制粘贴失效缺desktop包安装open-vm-tools-desktop共享文件夹看不到未编译vmhgfs或没挂载确认模块加载手工mount6. 验证与日常维护装完不等于一劳永逸6.1 怎么确认所有功能真的生效安装完成后别急着点“完成”。我习惯做三轮验证第一轮是分辨率自适应把VMware窗口拉大再缩小看虚拟机桌面是否跟着缩放。第二轮是复制粘贴在宿主机里复制一段文本切到虚拟机里CtrlV确认能粘贴出去再从虚拟机复制文本粘贴回宿主机。第三轮是共享文件夹如果设置了共享目录在虚拟机里执行mount -t vmhgfs .host:/ /mnt/hgfs然后确认能看到里面文件。对于纯命令行服务器重点验证时间同步和内存回收即可可以执行date查看当前时间再在宿主机上调整几分钟后等一两个周期确认虚拟机能自动跟上。6.2 日常维护中的几个实际经验第一个经验内核升级后最好主动检查一遍服务状态。即使有dkms自动重编模块偶尔也会因为个别模块依赖不满足而静默失败。升级内核后重启如果发现拖拽、复制粘贴失效先执行vmware-toolbox-cmd -v确认tools还能响应再systemctl status vmtoolsd看服务状态。第二个经验虚拟机的快照操作前如果Tools正在读写共享文件夹建议先短暂卸载vmhgfs避免文件系统不一致。快照完成后重新挂载即可。这个操作不是必须的但长期折腾下来它能帮你少碰到几次共享目录里的“幽灵文件”。第三个经验如果你在短时间内快照回滚比较频繁虚拟机里Tools服务的缓存状态可能会和宿主机对不上。这时不用大动干戈重装直接重启vmtoolsd服务或者重启虚拟机一般就能恢复。6.3 对VMware 17.6以上版本用户的额外提醒在17.6及之后的新版本里不要再执着于从VMware菜单安装linux.iso。官方已经把维护重心完全转移到open-vm-tools。如果虚拟机里出现了“VMware Tools is no longer shipped with VMware Workstation for this guest operating system”的提示最好的回应就是执行包管理器安装命令然后忽略这个提示。它不影响虚拟机使用只是提醒你换一种安装来源。另外如果你从老版本VMware导出的虚拟机迁移到新版本建议在迁移后执行一次干净的tools重装流程先卸载旧tar包安装的tools再安装open-vm-tools最后重启。混合状态下偶尔会出现vmtoolsd进程重复启动或模块版本不一致虽然不致命但排查起来很耗时间。最后分享一个小技巧如果你经常要在一批Linux虚拟机上部署可以把安装命令写成一行用脚本批量执行。比如Ubuntu系可以这么写sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop sudo systemctl enable --now vmtoolsdRHEL系则对应sudo dnf install -y open-vm-tools open-vm-tools-desktop sudo systemctl enable --now vmtoolsd这样不管开多少台机器都可以做到一套命令拉齐配置。再配合我前面提到的检查清单和报错速查表基本能覆盖Linux虚拟机上VMware Tools安装的绝大部分场景。我在实际折腾中的体会是这个任务80%的问题都在于装错了路线。现代发行版优先走open-vm-tools基本上十五分钟以内就能全部搞定只有碰到老系统、离线环境或特殊定制需求时才需要回到tar包手动安装。双路线都掌握以后你就不再会被“继续运行脚本”这种提示吓住了把这套逻辑固化下来后续不管是Kali还是CentOS还是国产发行版都只是命令层面的小差异原理是完全相通的。
返回列表