ARTICLE DETAIL

资讯详情

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

Ubuntu 22.04虚拟机增强:open-vm-tools安装与共享文件夹自动挂载全攻略

Ubuntu 22.04虚拟机增强:open-vm-tools安装与共享文件夹自动挂载全攻略 用VMware跑Ubuntu 22.04很多人一上来就被VMware Tools折磨得够呛。不是镜像加载失败就是装完提示“继续运行脚本未能在虚拟机中成功运行”再不然就是共享文件夹挂载不上、权限不对。其实早在Ubuntu 18.04开始官方仓库就用 open-vm-tools 替代了传统VMware Tools我们这次就围绕 open-vm-tools 在 Ubuntu 22.04 上的完整落地把共享文件夹和开机自动挂载一次讲透。不管你是刚把Ubuntu塞进VMware、被共享文件夹整到头大的新手还是想在Server版上精简运行的进阶用户这篇实操笔记都能让你少踩几个坑。1. 为什么放弃VMware Tools改用open-vm-tools1.1 VMware Tools的老大难问题老玩家应该都有印象早年间在VMware Workstation里装完Linux虚拟机第一件事就是点虚拟机菜单里的“安装VMware Tools”。系统会自动挂载一个linux.iso镜像里面放着tar.gz压缩包解压后运行./vmware-install.pl然后一路回车。这套流程看着简单实际上一言难尽。最大的坑是版本匹配问题。VMware Tools是跟着Workstation版本走的一旦Ubuntu升级内核VMware Tools的内核模块可能就对应不上轻则VMCI、vmxnet3这类模块失效重则根本编译不过去。Ubuntu每几个月就升一次内核你就得跟着重装一次VMware Tools反复折腾毫无体验可言。第二个坑是闭源VMware Tools的安装脚本太“脏”它会往系统里写一大堆路径卸载时残留很多想清理干净得手动删目录。最让人无语的第三个坑是VMware Workstation较新版本已经明确不再为很多Linux发行版配送VMware Tools你点菜单安装它直接提示“VMware Tools is no longer shipped with VMware Workstation for this guest operating system”官方把这条路堵死了。既然官方都不维护了趁早换思路才是正解。1.2 open-vm-tools到底是什么open-vm-tools其实就是VMware官方团队维护的开源版本源码托管在GitHub上功能上跟闭源的VMware Tools基本对齐。它被打包进了各大主流Linux发行版的官方软件源Ubuntu、Debian、CentOS都有直接apt install就能装完全不需要去VMware官网下载ISO镜像。这个转变带来的好处非常明显。第一内核适配交给发行版解决。Ubuntu更新内核时open-vm-tools的配套模块会同步更新到软件源里你只需要apt upgrade就能保持匹配不用手动编译。第二安装卸载干净利落一个apt命令搞定不会留下乱七八糟的残留。第三open-vm-tools做了功能拆分按需安装即可open-vm-tools核心包包含vmtoolsd守护进程、vmware-toolbox-cmd命令行工具提供基础的虚拟机增强服务。open-vm-tools-desktop桌面增强包给带图形界面的Ubuntu用提供分辨率自适应、宿主机与虚拟机之间的复制粘贴、拖拽文件等能力。open-vm-tools-devel开发包包含头文件一般用户用不上。如果你跑的是带GNOME桌面的Ubuntu 22.04核心包和桌面增强包都装上如果是纯命令行的Server版装核心包就够了别多装没用的。1.3 官方默认方案的变化还有一点很多人不知道新版VMware Workstation对某些客户机操作系统连菜单里的“安装VMware Tools”按钮都变灰了或者直接提示改用open-vm-tools。这不是VMware偷懒而是Linux生态里open-vm-tools已经成了事实标准。Ubuntu官方文档和软件源里根本找不到闭源VMware Tools的踪影系统装完默认就带有open-vm-tools的一部分组件。所以思路必须转变过来在VMware里跑Linux我们要的不是一个叫“VMware Tools”的商品软件而是“VMware虚拟机增强功能”open-vm-tools是唯一正确解。下面这张表可以直观对比对比维度闭源VMware Toolsopen-vm-tools获取方式虚拟机菜单加载ISOapt、yum等软件源内核适配随Workstation版本常有滞后随发行版内核同步更新安装体验交互式脚本易报错一行命令搞定卸载清理残留多手动清dpkg/apt干净卸载维护状态新系统基本不再支持持续维护社区活跃桌面增强支持需额外安装desktop包2. 安装open-vm-tools在线和离线两种方案2.1 在线安装有网络环境先更新软件源索引sudo apt update然后安装核心包和桌面增强包sudo apt install -y open-vm-tools open-vm-tools-desktop这里有一个细节如果你装的是Ubuntu Server无图形界面就不要装open-vm-tools-desktop没必要。装完以后确认服务状态systemctl status open-vm-tools正常情况下能看到vmtoolsd服务处于active (running)状态。如果服务没起来手动启动sudo systemctl enable --now open-vm-tools为什么很多教程里装完还是不能用大多数情况是没重启或者没检查服务状态。open-vm-tools在安装过程中会启动vmtoolsd守护进程但某些内核模块比如vmw_vmci、vmxnet3需要加载完成后才完全生效最稳妥的做法是装完reboot一次虚拟机。我习惯重启后再验证一次服务状态这一步能省掉后面90%的排查时间。2.2 离线安装无网络环境企业内网、隔离环境里没有apt源这种场景很常见。离线安装的思路是在一台能联网的同版本Ubuntu机器上把open-vm-tools及相关依赖全部下载成deb包拷贝过去安装。有网的机器上执行sudo apt install --download-only -y open-vm-tools open-vm-tools-desktop下载的文件会存放在/var/cache/apt/archives目录下把这个目录里的所有deb文件打包拷走sudo cp -r /var/cache/apt/archives /tmp/open-vm-tools-debs tar czf open-vm-tools-debs.tar.gz -C /tmp open-vm-tools-debs目标机器上解压后用dpkg安装sudo dpkg -i /tmp/open-vm-tools-debs/*.deb如果dpkg报依赖错误再执行一遍sudo apt -f install -y修复。注意离线安装要求目标机器的Ubuntu版本和下载deb的机器一致最好是同一个版本、同一个架构amd64对amd64arm64对arm64不然依赖很容易出问题。2.3 安装后的验证装完别急着配共享文件夹先验证一下基本功能vmware-toolbox-cmd -v这条命令会输出open-vm-tools的版本号。再执行vmware-toolbox-cmd stat hosttime如果能返回宿主机的时间说明vmtoolsd进程跟宿主机通信正常。复制粘贴、拖拽如果没生效确认一下你是桌面版且安装了open-vm-tools-desktop并且重启过虚拟机。常常有人问为什么/usr/bin下面没有vmware-toolbox-cmd多半是只装了open-vm-tools的核心依赖包没装完整或者软件源有问题重新执行一次sudo apt install -y open-vm-tools再看看。3. 共享文件夹配置与权限处理3.1 VMware端共享文件夹设置在配共享文件夹之前先确认虚拟机设置里的选项。打开VMware Workstation选中虚拟机 - 右键设置 - 选项Options - 共享文件夹Shared Folders - 选择“总是启用”Always enabled - 添加一个共享目录。建议勾选“启用此共享”Enable this share。需要注意VMware Workstation较新版本里共享文件夹功能依赖open-vm-tools内的vmhgfs-fuse模块。顺序上最好先装好open-vm-tools再设置共享文件夹最后启动虚拟机。如果先设置共享再装工具也不是不行只是装完工具后共享文件夹不会自动出现需要手动挂载或重启虚拟机。3.2 客户机内的挂载方法在Ubuntu 22.04中open-vm-tools通过FUSE用户空间文件系统把共享文件夹挂载到/mnt/hgfs目录。刚装完工具、配置好共享后理论上会自动挂载出现但实际体验经常不尽如人意。手动挂载的方法sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000,gid1000其中.host:/表示宿主机所有的共享根目录也可以单独挂载某一个共享比如.host:/myshare。uid和gid填成你的普通用户ID避免挂载后没有写权限。查看挂载结果df -h | grep hgfs ls /mnt/hgfs如果你在VMware里配置了多个共享目录可以用vmware-hgfsclient查看宿主机共享了哪些目录vmware-hgfsclient这个命令在排查问题时非常有用能快速确认VMware端设置是否真的生效了。3.3 权限问题的根治方案“Ubuntu共享文件夹权限不够”是高频搜索词也是新手最头疼的问题。默认情况下vmhgfs-fuse挂载的共享目录归属于root用户普通用户只能看不能写。要根治安装时就要注意把用户加入fuse组sudo usermod -aG fuse $USER然后重新登录一次再执行挂载命令。另外挂载参数里加上allow_other和uid/gid能让普通用户拥有完整读写权限。FUSE挂载的权限控制由挂载参数决定不是简单的chmod/chown就能改的因为底层是FUSE文件系统宿主机文件权限和后端协议会叠加生效。实际配置时我习惯用最稳的写法sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o defaults,allow_other,uid$(id -u),gid$(id -g)用$(id -u)和$(id -g)自动提取当前用户的UID和GID省得每次手填。这样在/mnt/hgfs下操作共享文件就像操作本地目录一样顺畅。如果你在共享目录里创建文件却发现宿主机看不到先检查/mnt/hgfs下是否有你自己创建的子目录以及宿主机共享目录的权限设置是否允许写入。4. 开机自动挂载的完整配置4.1 /etc/fstab方案推荐开机自动挂载最直接的方式是写进/etc/fstab。在文件末尾追加一行.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0然后执行sudo mount -a验证语法确认无报错再重启。fstab的优点是一次配置永久生效Ubuntu启动时会自动挂载。这里要特别强调fstab写错会导致系统启动卡住或进入emergency mode所以每改完fstab必须先sudo mount -a测试。如果测试报错立刻改回来。我见过不少新手直接把uid写成用户名比如uidzhangsan这是不对的fstab的uid/gid只认数字不认名字。用id命令查id输出里的uid1000(yourname) gid1000(yourname)对应填进fstab。如果你的用户名对应的uid刚好是1000那上面的配置行可以直接用如果不是1000一定要改成实际值。4.2 systemd服务方案备选如果你对fstab不放心或者想加启动延迟等待可以用systemd服务。在/etc/systemd/system/下新建一个挂载服务文件比如vmhgfs-mount.service[Unit] DescriptionMount VMware Shared Folders Afternetwork-online.target Wantsnetwork-online.target [Service] Typeoneshot RemainAfterExityes ExecStart/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o defaults,allow_other,uid1000,gid1000 ExecStop/usr/bin/fusermount -u /mnt/hgfs [Install] WantedBymulti-user.target然后sudo systemctl daemon-reload sudo systemctl enable --now vmhgfs-mount.servicesystemd方案的优点是可以灵活控制启动顺序还可以在ExecStartPre里加前置检查脚本甚至判断共享目录是否存在再挂载。缺点是写起来比fstab麻烦一点但对某些特殊环境更可靠。4.3 两种方案怎么选我的建议很直接单机使用、追求省心选fstab需要处理复杂依赖、或fstab挂载时机太早导致失败选systemd。绝大多数VMware Ubuntu场景fstab完全够用。需要特别说明的是vmhgfs-fuse的挂载不依赖网络所以fstab里不需要加_netdev选项。这点跟CIFS/SMB挂载不一样——如果共享目录是通过SMB协议挂载的Windows共享才需要_netdev防止网络未就绪时挂载失败。有些人在“linux开机自启cifs没有自动挂载”这类问题里折腾半天就是因为把VMware共享和SMB共享的挂载方式搞混了。5. 常见问题排查与避坑实录5.1 “VMware Tools继续运行脚本未能在虚拟机中成功运行”这可能是VMware用户最熟悉的一条报错。以前安装闭源VMware Tools时虚拟机快照或挂起状态下经常会弹这个提示。它本质上是VMware Tools的安装脚本没有全部执行完导致服务状态异常。换用open-vm-tools后这个报错基本绝迹因为它不依赖那个perl安装脚本。如果你在旧环境里碰到正确的处理方式是把原来的VMware Tools清理干净再切换到open-vm-tools。清理命令sudo apt remove --purge open-vm-tools open-vm-tools-desktop sudo rm -rf /usr/lib/vmware-tools sudo reboot注意如果你以前装过闭源VMware Tools残留的内核模块可能仍会加载必要时用lsmod | grep vmw查看当前加载的模块把不需要的模块从/etc/modules或/lib/modules中处理掉。5.2 共享文件夹找不到/mnt/hgfs装完open-vm-tools、设置了共享文件夹却连/mnt/hgfs这个目录都看不到。先确认内核模块和FUSE工具是否就绪lsmod | grep vmhgfs如果没有输出说明vmhgfs-fuse模块没有加载。尝试sudo modprobe vmhgfs-fuse如果modprobe失败检查你是否安装了fuse相关包sudo apt install -y fuse这里有个Ubuntu 22.04特有的坑系统默认用的是fuse3而vmhgfs-fuse很多时候依赖的是fuse2需要额外安装libfuse2。很多人在22.04上挂载失败就是缺了libfuse2这个兼容层。建议在装open-vm-tools的同时顺手把libfuse2装上sudo apt install -y libfuse2 fuse装完再试modprobe vmhgfs-fuse和手动挂载。5.3 开机后共享文件夹未挂载如果你用fstab配置了自动挂载开机后df -h里却看不到hgfs。先手动挂载一次sudo mount -a若报错看具体输出。最常见的原因fstab里的uid写错了、/mnt/hgfs目录不存在、或者挂载选项里的逗号被中文逗号替换了。是的中文逗号这个坑真实存在从网页复制fstab配置行时全角逗号经常混进去导致解析失败。检查方法cat -A /etc/fstab | grep hgfs正常行的行尾是$如果看到M-oM-;M-?之类的乱码说明夹带了中文符号删掉重写。还有一个隐藏点不同版本的open-vm-tools挂载工具路径可能不一样有的是/usr/bin/vmhgfs-fuse有的是/usr/sbin/vmhgfs-fuse。写fstab时用which vmhgfs-fuse先确认一下路径写成绝对路径更稳妥。5.4 复制粘贴和屏幕自适应失效装了open-vm-tools-desktop后复制粘贴仍然不灵。这时检查两件事第一虚拟机的“客户机隔离”选项里是否勾选了“启用复制粘贴”第二桌面环境是否运行了vmtoolsd。用ps -ef | grep vmtoolsd若没有进程说明服务没跑起来执行systemctl start open-vm-tools。重点提醒一下Ubuntu 22.04默认登录的是Wayland会话而open-vm-tools在Wayland下的拖拽和剪贴板支持是有局限的很多增强功能会失效。解决方案是在登录界面点击用户后右下角齿轮选“Ubuntu on Xorg”X11会话兼容性会好很多。这是我反复踩过的大坑如果你的宿主机和虚拟机之间复制粘贴老失灵九成是Wayland的锅。5.5 其他高频问题速查现象排查思路虚拟机黑屏无法启动检查fstab是否写错进恢复模式改回共享文件中文名乱码挂载参数加iocharsetutf8拖拽文件没反应确认安装了desktop包且处于X11会话挂载后看不到宿主机文件更新检查VMware端共享目录是否勾选“启用此共享”报权限不足但uid/gid正确检查宿主机目录NTFS/EXT4权限配置内核升级后共享失效重启虚拟机并执行sudo modprobe vmhgfs-fuse6. 写在最后的一点经验最后再分享一个细节我每次配置完都会顺手把这两条命令记进笔记——vmware-toolbox-cmd stat hosttime验证服务通信df -h | grep hgfs验证挂载状态。排查问题时这两条命令能帮你快速定位是“服务没起来”还是“挂载没生效”省掉大量瞎折腾的时间。还有一个习惯供参考不要为了省事把/mnt/hgfs直接挂到/home下也不要用root身份在共享目录里乱建文件宿主机和虚拟机两边权限模型不一样搞得权限混乱最后难受的是自己。共享目录尽量保持单一层级目录名用英文字母和数字避免中文路径带来的编码问题。说白了在VMware里跑Ubuntu思路转变比技术操作更重要别再惦记那个闭源VMware Tools了open-vm-tools在Ubuntu 22.04上就是官方钦定的正解按这篇文章的流程走一遍共享文件夹和开机自动挂载一次搞定。
返回列表