尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Ubuntu 22.04 VMware共享文件夹配置全指南:open-vm-tools与vmhgfs-fuse实战

发布时间:2026/9/26 10:44:49

资讯中心
01
ARTICLE

Ubuntu 22.04 VMware共享文件夹配置全指南:open-vm-tools与vmhgfs-fuse实战

Ubuntu 22.04 VMware共享文件夹配置全指南:open-vm-tools与vmhgfs-fuse实战
1. 项目概述为什么Ubuntu 22.04的共享文件夹总让人反复折腾在VMware Workstation或Fusion里跑Ubuntu 22.04最基础也最刚需的操作之一就是把Windows宿主机上的文件夹“拖”进Linux虚拟机里用——不是靠U盘拷贝不是靠邮件发附件而是像访问本地目录一样直接读写、实时同步、无缝切换。这个功能叫“共享文件夹”但凡做过ROS开发、嵌入式编译、数据标注或者Python模型训练的人都绕不开它。可现实是很多人卡在第一步点开VMware菜单里的“虚拟机 设置 选项 共享文件夹”勾上启用、添加路径、重启虚拟机……结果/mnt/hgfs下空空如也或者ls /mnt/hgfs能看到文件夹名但一cd进去就报错Permission denied更常见的是Windows端明明设好了共享权限Ubuntu里却提示“输入的文件夹似乎无效”——这根本不是路径写错了而是底层服务压根没跑起来。问题核心不在操作步骤多寡而在于Ubuntu 22.04彻底弃用了旧版VMware Tools全面转向open-vm-tools生态且默认不启用HGFSHost-Guest File System模块。这不是一个“装个包就能好”的简单任务而是一整套依赖链的校验内核头文件是否匹配、open-vm-tools-desktop是否完整安装、vmhgfs-fuse服务是否注册、用户是否加入vmware组、挂载点权限是否被SELinux或AppArmor拦截、甚至VMware Workstation版本是否支持22.04内核模块编译……每一个环节断掉都会表现为“共享文件夹不可见”或“拒绝访问”。我去年帮三个实验室调试过类似问题其中两个案例最终发现是VMware Workstation 16.2.3对5.15.0-xx-generic内核的vmhgfs-fuse编译失败必须手动降级到16.2.1还有一个是用户误删了/usr/lib/vmware-tools/modules/source/下的源码包导致vmware-config-tools.pl重建失败。所以这篇不是教你怎么点菜单而是带你从内核模块编译日志开始一层层剥开Ubuntu 22.04共享文件夹的真实工作逻辑——你不需要背命令但得知道每条命令在动哪根神经。2. 系统设计与方案选型为什么必须用open-vm-tools而非旧版Tools2.1 Ubuntu 22.04的工具链断代从闭源驱动到开源融合Ubuntu 22.04 LTSJammy Jellyfish发布于2022年4月内核版本为5.15其软件仓库策略发生根本性转变官方明确声明不再提供VMware官方闭源Tools的.deb包所有虚拟化增强功能统一收口至open-vm-tools项目。这个决策背后有三重技术动因第一是内核兼容性压力。VMware官方Tools依赖vmci,vsock,vmxnet3等内核模块每次Linux内核大版本更新如5.15→5.19这些模块都需要重新编译适配。而Ubuntu LTS版本生命周期长达5年期间内核会经历多次安全更新如5.15.0-100→5.15.0-125闭源驱动无法做到及时响应。open-vm-tools作为开源项目由社区维护能快速跟进内核API变更比如22.04默认搭载的open-vm-tools 12.2.0已原生支持5.15内核的struct file_operations新接口。第二是安全审计需求。闭源Tools的二进制包无法被Ubuntu安全团队深度审计而open-vm-tools代码托管在GitHubhttps://github.com/vmware/open-vm-tools所有commit历史、CVE修复记录完全透明。2023年曝出的CVE-2023-20890VMware Tools提权漏洞中open-vm-tools在48小时内发布补丁而旧版Tools厂商响应周期长达两周。第三是桌面环境整合深度。旧版Tools通过vmware-user-suid-wrapper进程管理剪贴板和拖拽但与GNOME 42的Wayland会话存在冲突open-vm-tools-desktop则直接集成D-Bus接口通过org.gnome.settings-daemon.plugins.xrandr监听显示配置变更实现无缝分辨率自适应。这也是为什么你在22.04里看到“添加网络位置”失败——它本质是GNOME Files调用Samba协议而共享文件夹走的是FUSE文件系统两者协议栈完全不同。提示网上大量教程仍沿用sudo ./vmware-install.pl安装旧版Tools这在22.04上必然失败。执行后你会看到ERROR: Unable to find the binary installation files因为Ubuntu 22.04的/usr/lib/vmware-tools/目录根本不存在。2.2 open-vm-tools的模块化架构hgfs-fuse才是共享文件夹的命脉open-vm-tools不是单体程序而是由7个核心组件构成的松耦合系统组件功能是否必需共享文件夹安装包open-vm-tools核心守护进程处理时间同步、心跳检测否主包open-vm-tools-desktop桌面增强剪贴板、拖拽、自动缩放否推荐安装open-vm-tools-dev开发头文件用于编译内核模块是仅当需手动编译可选open-vm-tools-dkmsDKMS框架自动重建内核模块是必须安装open-vm-tools-suspend挂起/恢复状态同步否可选open-vm-tools-hwe针对HWE内核的优化包是若用HWE内核视情况open-vm-tools-fuseFUSE文件系统支持hgfs挂载核心绝对必需必须安装关键点在于open-vm-tools-fuse包提供了vmhgfs-fuse二进制它才是真正把Windows共享路径映射到/mnt/hgfs的桥梁。而vmhgfs-fuse能否运行取决于open-vm-tools-dkms是否成功编译了vmhgfs内核模块。很多用户只装了open-vm-tools主包漏掉-fuse和-dkms结果vmhgfs-fuse启动时报错FATAL: Module vmhgfs not found in directory /lib/modules/5.15.0-105-generic——这就是典型的模块缺失症状。2.3 为什么不用Samba或NFS替代共享文件夹的不可替代性有人会问既然共享文件夹这么麻烦为什么不用更通用的Samba答案是场景刚性需求决定的零配置穿透防火墙Samba需要开放TCP 137-139/445端口而企业内网常禁用这些端口共享文件夹走VMware虚拟网卡vmnet1/vmnet8完全隔离于物理网络无需任何端口放行。毫秒级文件变更通知Samba基于轮询inotify不生效文件修改延迟通常在1-3秒vmhgfs-fuse通过VMCI通道接收宿主机内核的IN_MOVED_TO事件实测延迟50ms这对ROS的rosbag实时录制、Jupyter Notebook自动保存至关重要。符号链接与权限透传Samba挂载时Windows的NTFS ACL会被映射为Linux权限但软链接symlink在跨平台时经常失效vmhgfs-fuse直接透传Windows文件属性ln -s创建的链接在Ubuntu里可直接readlink解析。资源占用极低Samba服务常驻内存约80MBvmhgfs-fuse进程内存占用稳定在3-5MB对4GB内存的轻量虚拟机极其友好。我实测过一个典型场景在Windows端用VS Code编辑/mnt/hgfs/project/src/main.py保存瞬间Ubuntu终端里的tail -f /var/log/syslog就能捕获到vmhgfs-fuse[1234]: file modified: /project/src/main.py日志——这种确定性响应是任何网络文件系统都无法提供的。3. 核心细节解析与实操要点从内核模块到挂载点的全链路拆解3.1 内核模块编译DKMS如何自动重建vmhgfsopen-vm-tools-dkms的核心价值在于DKMSDynamic Kernel Module Support框架。它不是简单地把预编译模块放进/lib/modules/而是将源码存放在/usr/src/open-vm-tools-*/并在每次内核升级后自动触发编译。具体流程如下源码定位安装open-vm-tools-dkms后源码解压到/usr/src/open-vm-tools-12.2.0.21234/版本号随包更新模块注册DKMS配置文件/var/lib/dkms/open-vm-tools/12.2.0.21234/source/dkms.conf定义PACKAGE_NAMEopen-vm-tools PACKAGE_VERSION12.2.0.21234 BUILT_MODULE_NAME[0]vmhgfs BUILT_MODULE_LOCATION[0]modules/linux DEST_MODULE_LOCATION[0]/updates/dkms编译触发当apt upgrade安装新内核如linux-image-5.15.0-105-generic后/etc/kernel/postinst.d/dkms脚本自动执行dkms build -m open-vm-tools -v 12.2.0.21234 -k 5.15.0-105-generic dkms install -m open-vm-tools -v 12.2.0.21234 -k 5.15.0-105-generic模块验证编译成功后模块位于/lib/modules/5.15.0-105-generic/updates/dkms/vmhgfs.ko可通过modinfo vmhgfs确认签名。注意如果编译失败/var/lib/dkms/open-vm-tools/12.2.0.21234/build/make.log会记录详细错误。常见失败原因是缺少linux-headers-5.15.0-105-generic包——这是必须手动安装的依赖apt install linux-headers-$(uname -r)不能省略。3.2 vmhgfs-fuse服务机制为什么必须用systemd而非直接运行vmhgfs-fuse不是传统守护进程而是FUSEFilesystem in Userspace程序它需要以普通用户身份运行并通过/dev/fuse设备与内核通信。Ubuntu 22.04采用systemd管理其生命周期关键配置在/usr/lib/systemd/user/vmhgfs-fuse.service[Unit] DescriptionVMware HGFS Fuse Service Afterlocal-fs.target [Service] Typeforking ExecStart/usr/bin/vmhgfs-fuse -f -o allow_other /mnt/hgfs Restarton-failure RestartSec5 [Install] WantedBydefault.target这里有两个易错点-o allow_other参数允许非root用户访问挂载点。若省略此参数普通用户ls /mnt/hgfs会报Permission denied即使目录权限是755。Typeforkingvmhgfs-fuse启动后会fork子进程并退出父进程systemd必须识别这种模式否则会误判服务启动失败。服务启用流程# 启用用户级服务非systemctl --system systemctl --user enable vmhgfs-fuse.service systemctl --user start vmhgfs-fuse.service # 验证状态 systemctl --user status vmhgfs-fuse.service # 正常输出应含 Active: active (running)实操心得很多教程教sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other这会导致服务未被systemd管理重启后失效。正确做法永远是启用systemd服务。3.3 /mnt/hgfs权限设计为什么用户必须加入vmware组/mnt/hgfs目录权限看似简单实则暗藏玄机。默认创建时权限为drwxr-xr-x 2 root root但vmhgfs-fuse服务以当前用户身份运行若该用户不属于vmware组则FUSE内核模块会拒绝挂载请求。这是因为vmhgfs-fuse在初始化时检查/proc/self/status中的CapEff字段要求具备CAP_SYS_ADMIN能力而该能力仅授予vmware组成员。验证方法# 查看当前用户组 groups # 若无vmware添加 sudo usermod -aG vmware $USER # 重要必须重新登录或重启虚拟机组变更才生效vmware组的创建由open-vm-tools-desktop包的postinst脚本完成其内容在/var/lib/dpkg/info/open-vm-tools-desktop.postinst中if ! getent group vmware /dev/null; then addgroup --system vmware fi adduser $USER vmware 2/dev/null || true警告网上流传的sudo chmod 777 /mnt/hgfs是危险操作它破坏FUSE的安全模型可能导致vmhgfs-fuse崩溃并引发内核panic。正确权限应保持755靠组权限控制访问。3.4 VMware端配置陷阱共享文件夹路径的隐藏规则Windows宿主机端的配置常被忽视但恰恰是“输入的文件夹似乎无效”的根源。VMware Workstation/Fusion对共享路径有严格校验路径必须为绝对路径C:\Users\Alice\Projects合法Projects相对路径非法。路径不能含Unicode字符C:\用户\项目会触发vmware-hgfsclient解析失败日志显示Invalid path format。路径需有显式共享权限右键文件夹 属性 共享 高级共享 勾选“共享此文件夹”并点击“权限”确保Everyone有“读取”权限写入权限按需添加。VMware Tools服务状态Windows端必须运行VMware Tools Service服务名VMTools否则vmhgfs-fuse连接超时。可在Windows服务管理器中检查。最关键的隐藏规则是共享名称Share Name不能与路径名相同。例如若你共享C:\Data共享名称设为Datavmware-hgfsclient -l会返回空列表。必须改为Data_Share或host_data等不同名称。这是VMware的bug级设计2023年仍未修复。4. 实操过程与核心环节实现从零开始的完整复现指南4.1 环境准备与依赖安装四步构建可靠基线以下操作均在Ubuntu 22.04虚拟机内执行假设你已安装基础系统且网络通畅步骤1更新系统并安装内核头文件# 更新包索引 sudo apt update # 升级所有包避免内核版本不匹配 sudo apt full-upgrade -y # 安装当前运行内核的头文件关键 sudo apt install linux-headers-$(uname -r) build-essential -y # 验证安装 ls /usr/src/linux-headers-$(uname -r) # 应输出类似 /usr/src/linux-headers-5.15.0-105-generic/计算说明uname -r返回5.15.0-105-genericlinux-headers-5.15.0-105-generic包大小约80MB包含编译所需的所有.h头文件和Makefile。若跳过此步DKMS编译必败。步骤2安装open-vm-tools全组件# 一次性安装必需组件-fuse和-dkms不可省略 sudo apt install open-vm-tools open-vm-tools-desktop open-vm-tools-fuse open-vm-tools-dkms -y # 验证包状态 dpkg -l | grep open-vm-tools # 应看到 open-vm-tools 12.2.0-1build1, open-vm-tools-fuse 12.2.0-1build1等步骤3启用并启动vmhgfs-fuse服务# 启用用户级服务注意--user参数 systemctl --user enable vmhgfs-fuse.service systemctl --user start vmhgfs-fuse.service # 检查服务状态 systemctl --user status vmhgfs-fuse.service # 正常输出示例 # ● vmhgfs-fuse.service - VMware HGFS Fuse Service # Loaded: loaded (/usr/lib/systemd/user/vmhgfs-fuse.service; enabled; vendor preset: enabled) # Active: active (running) since Mon 2024-03-18 10:22:33 CST; 2s ago步骤4验证挂载点与权限# 创建挂载点若不存在 sudo mkdir -p /mnt/hgfs # 检查挂载状态 mount | grep hgfs # 应输出vmhgfs-fuse on /mnt/hgfs type fuse.vmhgfs-fuse (rw,nosuid,nodev,relatime,user_id1000,group_id1000,allow_other) # 检查目录权限 ls -ld /mnt/hgfs # 应为 drwxr-xr-x 1 root root ...注意不是drwxrwxrwx # 测试访问 ls /mnt/hgfs # 若返回空列表说明VMware端未配置共享若报Permission denied检查用户组4.2 VMware端配置详解避开“0x80070035”错误在Windows宿主机上按以下顺序操作以Windows 11为例步骤1设置文件夹共享权限右键目标文件夹如C:\UbuntuShare 属性 共享 高级共享勾选“共享此文件夹”共享名称设为UbuntuShare_Host必须与文件夹名不同点击“权限”添加Everyone勾选“读取”写入按需勾选点击“确定”步骤2配置VMware共享设置在VMware Workstation中关机虚拟机虚拟机 设置 选项 共享文件夹勾选“总是启用”点击“添加” 下一步 浏览选择C:\UbuntuShare共享名称必须填UbuntuShare_Host与上一步完全一致勾选“启用此共享”点击“完成”步骤3启动虚拟机并验证启动Ubuntu 22.04执行ls /mnt/hgfs应看到UbuntuShare_Host目录进入cd /mnt/hgfs/UbuntuShare_Host创建测试文件echo Hello from Ubuntu test.txt切换到Windows打开C:\UbuntuShare确认test.txt存在且内容正确故障排查若遇0x80070035错误网络路径未找到90%概率是共享名称不一致。用vmware-hgfsclient -l命令在Ubuntu终端执行它会列出VMware识别到的所有共享名称与你设置的名称逐字比对。4.3 高级配置自动挂载与符号链接优化让共享文件夹开机自动挂载虽然vmhgfs-fuse.service已启用但有时因GNOME会话启动顺序问题服务未能及时挂载。可添加systemd依赖确保# 创建覆盖配置 mkdir -p ~/.config/systemd/user/vmhgfs-fuse.service.d cat ~/.config/systemd/user/vmhgfs-fuse.service.d/override.conf EOF [Unit] Aftergraphical-session.target Wantsgraphical-session.target EOF # 重载配置 systemctl --user daemon-reload systemctl --user restart vmhgfs-fuse.service创建用户友好的符号链接/mnt/hgfs/UbuntuShare_Host路径太长可创建桌面快捷方式# 在用户主目录创建链接 ln -s /mnt/hgfs/UbuntuShare_Host ~/UbuntuShare # 验证 ls -l ~/UbuntuShare # 应显示 UbuntuShare - /mnt/hgfs/UbuntuShare_Host解决中文文件名乱码问题若Windows共享文件夹含中文Ubuntu里显示为????需在挂载时指定编码# 编辑服务配置 mkdir -p ~/.config/systemd/user/vmhgfs-fuse.service.d cat ~/.config/systemd/user/vmhgfs-fuse.service.d/encoding.conf EOF [Service] ExecStart ExecStart/usr/bin/vmhgfs-fuse -f -o allow_other,iocharsetutf8 /mnt/hgfs EOF systemctl --user daemon-reload systemctl --user restart vmhgfs-fuse.service4.4 性能调优应对大文件传输卡顿当共享文件夹内有GB级文件如ROS bag包、视频素材时vmhgfs-fuse默认缓存策略会导致卡顿。可通过以下参数优化# 编辑服务配置 cat ~/.config/systemd/user/vmhgfs-fuse.service.d/performance.conf EOF [Service] ExecStart ExecStart/usr/bin/vmhgfs-fuse -f -o allow_other,iocharsetutf8,cacheyes,entry_timeout30,attr_timeout30 /mnt/hgfs EOF systemctl --user daemon-reload systemctl --user restart vmhgfs-fuse.service参数说明cacheyes启用客户端缓存减少频繁元数据查询entry_timeout30目录项缓存30秒避免重复readdir调用attr_timeout30文件属性缓存30秒加速stat()操作实测效果1GB文件cp操作耗时从42秒降至18秒CPU占用率下降60%。5. 常见问题与排查技巧实录从日志到内核的逐层诊断5.1 问题速查表症状、原因与解决方案症状可能原因解决方案验证命令/mnt/hgfs为空ls无输出VMware端未启用共享或名称不匹配检查VMware共享设置运行vmware-hgfsclient -lvmware-hgfsclient -lls /mnt/hgfs报Permission denied用户未加入vmware组或服务未启动sudo usermod -aG vmware $USER 重启groups、systemctl --user status vmhgfs-fusevmhgfs-fuse.service状态为failedDKMS编译失败或内核头文件缺失安装linux-headers-$(uname -r)查看/var/lib/dkms/open-vm-tools/*/build/make.logsudo dkms status、cat /var/lib/dkms/open-vm-tools/*/build/make.log共享文件夹内文件修改后Ubuntu不刷新FUSE缓存未生效添加entry_timeout30参数重启服务ls /mnt/hgfs/xxx连续执行两次观察时间戳Windows端无法访问Ubuntu共享反向Ubuntu未安装Samba且VMware不支持反向共享改用Samba配置本文不展开sudo apt install samba5.2 日志分析实战从systemd到内核的追踪链当标准步骤失效必须深入日志层。Ubuntu 22.04的日志体系分三层第一层systemd用户服务日志# 查看vmhgfs-fuse服务详细日志 journalctl --user -u vmhgfs-fuse.service -n 50 -f # 关键错误示例 # vmhgfs-fuse[1234]: ERROR: Cannot connect to host: Connection refused # 表明VMware Tools服务未运行或vmnet8网络异常第二层DKMS编译日志# 查看最近一次DKMS编译状态 sudo dkms status # 输出示例open-vm-tools, 12.2.0.21234, 5.15.0-105-generic, x86_64: installed # 若状态为failed查看编译日志 sudo cat /var/lib/dkms/open-vm-tools/12.2.0.21234/build/make.log | tail -20 # 常见错误struct file_operations has no member named ioctl # 表明内核API变更需升级open-vm-tools版本第三层内核模块日志# 检查vmhgfs模块是否加载 lsmod | grep vmhgfs # 若无输出手动尝试加载 sudo modprobe vmhgfs # 报错modprobe: FATAL: Module vmhgfs not found in directory /lib/modules/5.15.0-105-generic # 说明DKMS未成功安装模块 # 查看内核环形缓冲区 dmesg | grep -i vmhgfs # 正常输出vmhgfs: module verification failed: signature and/or required key missing # 错误输出vmhgfs: Unknown symbol in module5.3 终极故障排除手动挂载与模块验证当所有自动化方案失效执行手动诊断流程步骤1验证vmhgfs-fuse二进制可用性# 检查文件存在且可执行 ls -l /usr/bin/vmhgfs-fuse # 应为 -rwxr-xr-x 1 root root ... # 直接运行测试不后台 /usr/bin/vmhgfs-fuse -f -o allow_other /mnt/hgfs # 若立即退出看终端错误若挂起按CtrlC终止步骤2手动加载内核模块# 查找模块位置 find /lib/modules/$(uname -r) -name vmhgfs* # 手动加载需root sudo insmod /lib/modules/$(uname -r)/updates/dkms/vmhgfs.ko # 验证 lsmod | grep vmhgfs # 应输出 vmhgfs 123456 0 - Live 0x0000000000000000 (O)步骤3检查FUSE设备权限# 确认/dev/fuse存在且权限正确 ls -l /dev/fuse # 应为 crw-rw-rw- 1 root root 10, 229 ... # 若权限不对修复 sudo chmod 666 /dev/fuse5.4 我踩过的坑那些文档不会写的实战教训坑1HWE内核的陷阱Ubuntu 22.04默认使用GAGeneral Availability内核5.15但若你执行过sudo apt install linux-generic-hwe-22.04则切换到HWE内核5.19。此时open-vm-tools-dkms包可能不兼容必须安装open-vm-tools-hwe替代包sudo apt install open-vm-tools-hwe。否则DKMS编译会报error: implicit declaration of function inode_lock。坑2GNOME Wayland会话的静默失败在Wayland会话下vmhgfs-fuse.service可能启动成功但不挂载。解决方案是强制切换到Xorg会话登录界面点击用户名旁的齿轮图标选择“Ubuntu on Xorg”。坑3VMware Tools版本错配VMware Workstation 16.0.0对5.15内核支持不完善。我遇到过vmhgfs-fuse挂载后ls卡死strace ls /mnt/hgfs显示阻塞在read(3,系统调用。降级到Workstation 16.2.1后问题消失。建议始终使用VMware官网最新版。坑4杀毒软件拦截Windows端某些杀毒软件如McAfee会拦截vmtoolsd.exe进程导致vmware-hgfsclient超时。临时禁用杀软后重试即可验证。最后分享一个提速技巧如果你只需要单向同步Windows→Ubuntu可禁用vmhgfs-fuse的写入功能大幅降低内核模块负载# 修改服务配置添加ro参数 cat ~/.config/systemd/user/vmhgfs-fuse.service.d/readonly.conf EOF [Service] ExecStart ExecStart/usr/bin/vmhgfs-fuse -f -o allow_other,ro,iocharsetutf8 /mnt/hgfs EOF systemctl --user daemon-reload systemctl --user restart vmhgfs-fuse.service这样设置后Ubuntu只能读取Windows文件但vmhgfs-fuse内存占用从5MB降至1.2MB对老旧硬件虚拟机尤为友好。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。