ARTICLE DETAIL

资讯详情

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

VMware虚拟机共享目录挂载教程:Win11与Ubuntu 24.04文件互通

VMware虚拟机共享目录挂载教程:Win11与Ubuntu 24.04文件互通 Windows 11 宿主机上跑 Ubuntu 24.04 虚拟机再通过 VMware Workstation 的共享目录把两边文件打通这套组合我前前后后折腾过好几轮。先说结论共享目录这功能本身一点不难难点全藏在环境兼容性和挂载细节里搞明白了就是一条命令的事搞不明白能卡你一下午。这篇就按我实际操作的顺序来写从环境准备、tools 安装、共享方式选型到手动挂载、开机自动挂载最后是高频故障排查。不管是纯新手还是已经被坑过几次的老手照着走一遍应该都能成。1. 前置准备别在环境上翻车1.1 环境版本怎么选我自己目前在用的组合是Windows 11 24H2没追 Insider 版本 VMware Workstation 17.6 Pro Ubuntu 24.04.1 LTS Server/Desktop。这套组合从稳定性到兼容性都算比较成熟的网上那些共享目录失败案例多半出在版本太老或者太新上。VMware Workstation 这边建议直接上 17.5 及以上的版本。早期 15、16 在 Win11 下经常出现“无法连接到虚拟机”“VM session was closed before any attempt to power it on”这类报错还有“确保您有权运行该程序”的权限弹窗。倒不是说完全跑不了但每次都要折腾服务重启体验很差。到了 17.6 以后VMware 官方针对 Win11 的新安全机制做了不少适配整体稳多了。Ubuntu 这边24.04 是 2024 年 4 月发布的 LTS 版本内核是 6.8 系列。这个内核版本和当前主流的 open-vm-tools 兼容性已经完全没问题了共享目录所依赖的 FUSE 挂载机制在内核里默认就是开启的。如果你用更早的 22.04操作逻辑也差不多但个别命令的输出格式略有差异。1.2 Win11 宿主机上必须处理的一个坑这是很多人上来就翻车的地方。Win11 默认会开启“内核隔离-内存完整性”也就是常说的基于虚拟化的安全VBS。这个安全机制在设计上就会和 VMware 这类 Type-2 虚拟机管理器抢 CPU 虚拟化指令导致两件事一是虚拟机启动明显变慢二是共享目录挂载经常出现诡异的超时或失败。另一个相关的功能是 Windows 功能里的“虚拟机监控程序平台”Hyper-V。如果你不开它VMware 独占虚拟化指令一切正常如果你开了VMware 会改用 Hyper-V 作为底层运行性能和兼容性都会打折扣。处理方式按需来如果只是日常用 VMware 跑 Ubuntu建议把“内存完整性”关掉虚拟化性能会好很多。如果你同时依赖 WSL2 或 Docker Desktop它们强制要求 Hyper-V那 VMware 就维持现状尽量别开太多 Windows 安全功能叠加否则容易出现“共享目录看到了但挂载不上”这种玄学问题。要关“内存完整性”路径是Windows 安全中心 - 设备安全性 - 内核隔离 - 内存完整性 - 关闭然后重启。注意关掉内核隔离会降低一部分系统安全性建议在虚拟机里做好快照备份或者只在需要跑大型虚拟化任务时临时关闭。2. Ubuntu 24.04 里的 tools 安装这一步决定了后续所有体验2.1 open-vm-tools 和 VMware Tools 到底装哪个先说结论Ubuntu 里装 open-vm-tools别用 VMware 菜单里那个“Install VMware Tools”。原因挺简单VMware Tools 的安装包是一个 ISO装完后需要编译内核模块而且只在装的那一刻针对当时的内核编译。Ubuntu 每次 apt upgrade 升级内核之后VMware Tools 的模块可能就跟内核版本对不上了轻则共享目录失灵重则虚拟机启动进不去桌面。open-vm-tools 是 VMware 官方维护并捐赠给开源社区的项目Ubuntu 软件源里一直有。它通过 DKMS 机制随内核升级自动重新编译全程无感。你只需要在虚拟机的 VM 设置里保持“共享文件夹”功能开启然后系统里安装这个工具即可。从功能覆盖范围来说open-vm-tools提供共享目录挂载、剪贴板共享、屏幕分辨率自适应等核心功能。open-vm-tools-desktop它是在前者基础上额外提供桌面端的拖拽复制等交互能力。Desktop 版系统建议直接装这个省得以后想要拖拽功能时再补装。2.2 安装步骤与验证方法在 Ubuntu 终端里操作sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop装完后先把虚拟机重启一次。这一步很重要很多教程里没提不重启的话共享目录服务可能不会正常注册进 systemd。重启后执行systemctl status open-vm-tools看到 active (running) 就说明工具正常起来了。如果状态是 failed 或者 inactive常见原因是 open-vm-tools 和系统自带的 VMware 模块冲突先执行卸载清理sudo systemctl enable --now open-vm-tools再验证共享目录是否被虚拟机识别到。后续你配置完共享文件夹之后执行vmware-hgfsclient这个命令会列出当前 VMware 配置的所有共享文件夹名称。如果返回空说明 VM 设置里还没启用共享目录或者 tools 没装好。它是排查的第一道诊断命令。注意Ubuntu 24.04 默认没有创建 /mnt/hgfs 目录这个目录在挂载时可能需要手动创建。后面会讲到。3. 三种共享方式选型别一上来就挂载3.1 方案对比VMware 下让 Win11 和 Ubuntu 互相传文件常见的有三种方式拖拽复制、共享目录hgfs、SMB/NFS 网络共享。我列个表格对比一下方式适用场景优点缺点是否需要额外配置拖拽复制偶尔传几个小文件最直观拖一下就完事大文件容易中断不支持双向大量操作需要 open-vm-tools-desktop共享目录hgfs日常目录级互访、改配置、传安装包双向实时同步权限可控宿主机路径直接可见大量小文件性能一般需要挂载需要 open-vm-tools VM 设置SMB/NFS大规模数据交换、长期共享性能好脱离 VMware 也能用需配 IP 和凭据配置稍复杂Windows 侧开启文件共享我的建议是日常开发传文件共享目录是主力方案偶尔拖拽补充一下SMB 只在共享目录性能不够或者你需要跨机器访问时才考虑。开头别想着一步到位全搞 SMB到时候两边权限和网络一乱排查起来很痛苦。3.2 VMware 图形界面里的共享文件夹配置细节打开虚拟机的设置界面依次选择Options 选项卡 - Shared Folders - 把 “Always enabled” 勾上 - 点 Add 添加宿主机目录。配置时有几个细节值得注意共享目录的名称Folder Name是 Linux 挂载时显示的根目录名建议用简单的英文单词比如 share、code、data不要带空格也不要带中文。后续 fstab 自动挂载里如果有空格转义会很麻烦。宿主机路径别选整个 C 盘或系统目录权限模型会变得很怪建议单独建一个干净的目录比如 D:\VMshare。“Read-only” 选项默认不勾。如果你勾了Linux 这边无论如何都写不进去这是宿主机直属的限制别到时候在 Ubuntu 里查半天权限。配置完这些之后在 Ubuntu 里重新跑一遍 vmware-hgfsclient应该就能看到你刚填的 Folder Name 了。如果看不到先检查 tools 状态再检查共享文件夹是否处于“已启用”状态。4. 挂载实战从手动到开机自动4.1 手动挂载验证最小可行配置在 Ubuntu 24.04 里手动挂载共享目录最常用的命令是 vmhgfs-fuse。它和老的 vmhgfs 内核模块方式不同走的是 FUSE 用户态文件系统好处是不依赖内核模块签名系统更新后不容易挂。先创建挂载点sudo mkdir -p /mnt/hgfs然后手动挂载sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000 -o gid1000解释一下这几个参数.host:/表示宿主机上的共享根。/代表把所有已配置的共享目录都挂载到本地这是个固定写法。allow_other允许非 root 用户访问挂载点不加这个的话普通用户进不去 /mnt/hgfs只能看到一行权限报错。uid1000和gid1000指定挂载后的文件属主为 Ubuntu 里第一个创建的用户一般就是安装系统时设置的用户。不加的话共享出来的文件全是 root 所有普通用户想编辑还得 sudo。挂载后验证df -h /mnt/hgfs ls -l /mnt/hgfs正常能看到宿主机里那个共享目录的内容且属主是当前用户。这时候直接在 Ubuntu 里创建、修改文件Win11 那边即时同步反过来也一样。如果你想卸载sudo umount /mnt/hgfs4.2 开机自动挂载安全且不翻车的一条 fstab手动挂载没问题之后下一步就是让它开机自动挂载。这里有个常见的坑直接在 /etc/fstab 里加传统条目很容易在开机时卡住几十秒甚至进入 emergency mode因为 fstab 在系统早期阶段就会尝试挂载而这时 open-vm-tools 服务还没完全就绪。对比一下两种写法第一种是普通写法第二种是我实际验证过的写法# 不推荐启动时容易卡住 .host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0# 推荐延迟到实际访问时再挂载 .host:/ /mnt/hgfs fuse.vmhgfs-fuse _netdev,allow_other,uid1000,gid1000,x-systemd.automount,noatime 0 0关键就两个选项_netdev告诉 systemd 这是一个网络相关的挂载需要等网络就绪后再挂载x-systemd.automount是让 systemd 不立即挂载而是在第一次访问 /mnt/hgfs 时才触发真正的挂载动作。这样开机速度完全不受影响也不会出现 “A start job is running for /mnt/hgfs” 卡在那里干等的情况。修改 fstab 前一定要备份sudo cp /etc/fstab /etc/fstab.bak然后编辑 /etc/fstab用你习惯的编辑器把推荐写法加到最后一行保存退出。执行sudo mount -a如果没有任何输出且进入 /mnt/hgfs 能看到文件就说明 fstab 条目正确。之后重启一次验证一次自动效果。注意在虚拟机没开机、tools 服务没启动的情况下系统如果需要访问自动挂载目录会有短暂的等待时间这是正常现象。x-systemd.automount 的触发逻辑就是在访问时才处理等待一两秒就完成了。4.3 权限与性能调优先搞清楚共享目录权限这块很多人会懵我拆开说。宿主机 Windows 侧对目录的访问权限优先级高于 Linux 侧。比如你共享的是 NTFS 分区上的一个目录Windows 里对这个目录设置了只读属性或账户权限限制那 Ubuntu 这边无论 uid、allow_other 怎么配都写不进去。表现为 ls 能看到、touch 创建失败、vim 保存时报 “Permission denied”。遇到这种别只盯着 Ubuntu 排查先回 Win11 看一眼目录属性。反过来Ubuntu 侧通过挂载参数控制的是“谁可以访问”和“文件显示属主是谁”。uid1000 会把挂载点下的所有文件都显示为 uid 1000这在单一用户虚拟机里完全没问题。如果你在虚拟机里建了多个用户那就别固定 uid直接用 allow_other 让所有人访问权限管理交回宿主机。性能上vmhgfs-fuse 本质是在搞用户态文件系统单文件读写、大文件拷贝速度都还可以实测拷贝几个 GB 的安装包能跑到硬盘的带宽上限。但是如果共享目录里有几万个细小文件比如 node_modules、.git 目录、编译中间产物那 FUSE 的元数据开销会被无限放大ls 一下可能都要几秒钟。我建议日常传源码包、安装包、配置文件、文档用共享目录没问题。要在虚拟机里跑大型项目编译把代码放到虚拟磁盘即 Ubuntu 的系统盘不要放共享目录。如果想反向让 Win11 访问虚拟机磁盘文件那就开 Samba 服务那是另一个话题了。5. 高频故障排查我把踩过的坑都列在这里5.1 挂载后目录是空的这个现象出现频率最高。你执行了 mountdf -h 显示有对应的挂载点但 ls 里面什么都看不到。排查顺序先跑 vmware-hgfsclient确认 VM 设置里的共享文件夹确实被虚拟机识别到了。如果这里就是空的说明问题在宿主机侧。回到 VM 设置把 Shared Folders 的 “Always enabled” 重新勾选一遍然后直接热重载不需要关虚拟机。个别老版本 Workstation 在开着的状态下改共享目录不生效关掉虚拟机再开。如果 vmware-hgfsclient 正常列出名字但挂载为空多半是 tools 的服务没有完全起来。重启 Ubuntu 一次再挂载。5.2 自动挂载失败或开机卡住现象重启进系统时提示 “A start job is running for /mnt/hgfs”等待 90 秒最后超时进入 emergency mode或者出现 “failed to mount” 的红色报错。原因就两个fstab 里没加 _netdev 和 x-systemd.automount导致在 open-vm-tools 服务启动前就尝试挂载了。或者 fstab 条目格式写错。处理办法# 进入紧急模式后先以读写方式重新挂载根分区 sudo mount -o remount,rw /然后打开 /etc/fstab把不合理的条目按 4.2 节里的推荐写法改掉。保存后执行 mount -a 验证。5.3 写入权限与所有权错乱现象挂载成功但 Ubuntu 普通用户不能写入文件或者文件显示所有者为 root。检查两步挂载参数里是否包含 uid1000,gid1000 和 allow_other。你可以用 mount | grep hgfs 查看当前挂载参数缺少就重新挂载。宿主机 Windows 目录是否设置了只读权限。如果 Win11 那边目录属性带“只读”勾选Linux 这边再怎么配都没用。如果是临时应急可以直接用 sudo 写入但建议还是把挂载参数一次性配对。5.4 VMware 启动报错与工具失联在 Win11 上VMware 偶尔出现启动虚拟机时提示 “无法连接到虚拟机” 或 “The VM session was closed before any attempt to power it on”这个和共享目录没有直接关系但会直接影响 open-vm-tools 是否正常工作所以一并提一下。一般处理顺序是以管理员身份运行 VMware Workstation。检查 Win11 的“内核隔离-内存完整性”是否开启开启的话考虑关闭后重启。在 Windows 功能里确认“虚拟机监控程序平台”处于关闭状态除非你必须要用 Hyper-V 的功能。重启 VMware 服务控制台里找到 VMware Workstation Server 相关服务重启或者直接重启宿主机。实在不行把虚拟机的 .vmdk 备份后新建一个虚拟机导入比手动修 VMX 配置要省心得多。我在实际使用中发现Win11 每次大版本更新比如从 23H2 到 24H2之后VMware 的那一套自带工具经常需要重新安装一次。所以如果你是在系统更新之后发现共享目录失灵优先重装一遍 open-vm-tools 或者 VMware Tools通常都能救回来。5.5 共享目录内容不同步在 Ubuntu 里改了文件Win11 里看不到或者反过来。这个现象通常是 FUSE 缓存导致的。vmhgfs-fuse 默认会有一定的缓存策略如果是偶尔出现不同步先试试sudo umount /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000 -o gid1000重新挂载后基本都能解决。如果频繁不同步那就别用共享目录管“需要实时同步的目录”可以考虑把目录拆分成宿主机侧做开发、虚拟机侧跑编译再通过其他手段同步结果或者直接让目录在两者之间用同步工具定时同步。最后再分享一个我在实际配置中用着很顺手的小技巧配置完 fstab 后不用重启系统验证直接以单用户身份执行 mount -a如果没有任何报错再开个新终端进 /mnt/hgfs 里 ls 一下看到文件就说明配置没问题。整个过程十几秒搞定比反复重启虚拟机试错高效得多。共享目录这个功能本身不复杂真正的门槛在于理解它背后的挂载机制和各个层的权限关系。把这篇文章里的内容吃透基本能把 90% 以上的“虚拟机传文件”场景覆盖到。如果之后还想进一步优化虚拟机里的开发体验可以从虚拟磁盘扩容、快照管理、甚至嵌套虚拟化这些方向继续折腾那就是后端的话题了。
返回列表