ARTICLE DETAIL

资讯详情

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

VMware虚拟机Ubuntu共享文件夹配置:从VMware Tools到开机自动挂载

VMware虚拟机Ubuntu共享文件夹配置:从VMware Tools到开机自动挂载 搞虚拟机的朋友应该都有过这种经历Windows主机上有一堆资料、代码、安装包Ubuntu虚拟机里编译或者处理文件的时候两边倒腾来倒腾去要么用U盘拷要么开个FTP要么直接拿微信传麻烦得很。其实VMware Workstation本身就把文件互通这件事做进去了而且配置好之后共享文件夹在Ubuntu里就像本地目录一样用开发、传文件、备份都顺滑很多。这篇东西我就把整个配置过程掰开揉碎讲清楚包括图形界面操作、命令行挂载、开机自动生效以及几个我踩过很多次的坑希望能帮有需要的人少走点弯路。1. 先说清楚原理VMware的共享文件夹到底是怎么工作的1.1 VMware Tools是共享功能的基石很多人以为VMware的共享文件夹是虚拟机“天生自带”的功能其实不是。它依赖一个关键组件——VMware Tools在较新的版本里也叫open-vm-tools。这个组件负责在客户机Ubuntu和宿主机Windows之间建立一条通信通道把主机的文件夹“映射”到虚拟机里面去。没有它共享文件夹选项哪怕勾上了Ubuntu这边也什么都看不到。VMware Workstation在安装Ubuntu的时候通常会弹窗提示安装VMware Tools但很多人图省事直接跳过了等到配置共享文件夹的时候才傻眼。所以第一步要做的是确认Ubuntu里已经装好了对应版本的VMware Tools。区分一下如果你用的是VMware Workstation自带的VMware Tools那是在虚拟机窗口菜单栏的“虚拟机 - 安装VMware Tools”里加载镜像安装而Ubuntu的官方软件源里其实也带了open-vm-tools和open-vm-tools-desktop两个包这两个包在多数场景下比Workstation自带的Tools更省心尤其是内核升级后不容易失联。1.2 文件共享的三种常规路子不少人一上来就问“怎么共享文件夹”其实VMware体系里文件互通的路子不止一条我列一下方便比较方式优点缺点适用场景VMware共享文件夹HGFS配置简单性能较好虚拟机内直接访问依赖VMware Tools部分内核版本有兼容问题日常开发、代码共享、小文件传输SMB/CIFS挂载Windows共享不限VMwareLinux原生支持好需要Windows开启共享和防火墙放行配置稍繁琐多虚拟机或跨平台环境SSH/SFTP传输无需额外配置安全不适合做实时读写传输大文件效率一般临时传文件、远程管理U盘/ISO镜像拷贝通用性强频繁拔插麻烦不连续一次性安装软件、离线环境日常最顺手的就是VMware共享文件夹下面所有步骤都围绕它展开。2. 环境检查与准备搞不定共享文件夹多半是这里出了问题2.1 确认VMware Tools是否安装正确在动手配置之前先在Ubuntu里执行一个命令vmware-toolbox-cmd -v如果能返回类似11.3.5.1855774的版本号说明VMware Tools已经正常安装。如果提示找不到命令就要先补装Tools。按我的经验Ubuntu 20.04及之后版本直接走软件源安装最省心sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop安装完了重启虚拟机再用vmware-toolbox-cmd -v验证一遍。这里有个细节很多教程不会提open-vm-tools-desktop这个包不要省它提供图形界面相关的辅助组件虽然共享文件夹不一定依赖它但剪贴板共享、拖拽文件、屏幕自适应这些体验都靠它。2.2 检查Windows宿主机端的权限和路径共享文件夹在Windows端本质上是把一个真实目录交给VMware这个“中间人”去转发。所以有一点很关键Windows上对应的文件夹必须存在而且当前Windows用户对这个目录有读写权限。如果你用的是系统盘C盘下的目录尽量放在用户目录或专门建一个共享目录避免路径里带中文和空格防止出现奇怪的编码问题。我自己习惯在Windows的D盘根目录建一个share文件夹里面放各种文档、安装包、代码。路径短、好记也不涉及系统权限的坑。2.3 虚拟机设置里的网络与隔离说明共享文件夹功能本身不依赖网络和虚拟机的网络模式NAT、桥接、仅主机没有关系。但是要注意如果你开启了VMware的“虚拟机隔离”在Workstation的“虚拟机设置 - 选项 - 隔离”里可能会影响复制粘贴和拖拽但共享文件夹不受影响。真正需要注意的是Windows防火墙。虽然HGFS不走网络但如果后续你还打算用SMB方式补充共享比如局域网里另一台电脑也要访问那就必须保证Windows的“文件和打印机共享”规则是放行的。这一块我们放到后面的问题排查里详细说。3. 图形界面配置5分钟在VMware里打开共享文件夹3.1 VMware Workstation里的开启步骤这个操作在VMware Workstation Pro和Player里基本一致我以Workstation为例先关闭或挂起Ubuntu虚拟机共享文件夹设置修改之后需要重启虚拟机才生效这个我一开始不知道改完直接没反应后来才明白。在虚拟机库中右键目标虚拟机选择“设置”。切换到“选项”选项卡左侧找到“共享文件夹”。选择“始终启用”然后点击“添加”按钮。在向导里选择Windows主机的目录比如D:\share再给它起个名称比如myshare。勾选“启用此共享”点完成。到这里VMware端的配置就算完成了。启动虚拟机Ubuntu里就能在/mnt/hgfs/目录下看到共享文件夹了。/mnt/hgfs是VMware Tools约定俗成的挂载点凡是启用的共享文件夹都会以子目录的形式出现在这里。3.2 为什么虚拟机里看不到 /mnt/hgfs很多人走到上一步就信心满满打开文件管理器结果发现/mnt/hgfs根本不存在或者存在但里面是空的。这个问题我在不同版本Ubuntu上都遇到过原因不外乎下面几种没有安装open-vm-tools或VMware ToolsHGFS模块没加载。共享文件夹设置是在虚拟机运行状态下手动改的没重启虚拟机。Ubuntu的systemd管理了mnt-hgfs.mount但挂载源没对上。内核模块vmhgfs或vmxnet没有自动加载。排查时可以手动执行一下ls -la /mnt/hgfs mount -t vmhgfs .host:/ /mnt/hgfs如果你看到的是/mnt/hgfs目录不存在就先手动建目录再挂载sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000这里解释一下新版Ubuntu用的往往是vmhgfs-fuse这个用户态文件系统来挂载而不是老内核里的vmhgfs模块。vmhgfs-fuse更稳定即使内核升级也不容易挂掉但它的挂载方式是通过FUSE所以你需要安装fuse相关的包。3.3 一次都不想在命令行折腾的方案用vmhgfs-fuse手动挂载如果你不想依赖系统自动挂载可以用一条命令手动挂载方便临时使用sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000 -o gid1000这里.host:/表示宿主机上的所有共享根目录而后面的/mnt/hgfs是挂载点。allow_other允许普通用户访问uid和gid改成你自己的用户ID不然挂载出来一堆文件都归root用起来很别扭。查看当前用户的UIDid -u id -g我一般配完命令后立即执行ls /mnt/hgfs验证如果能看到myshare恭喜共享已经通了。4. 开机自动挂载解决重启就失效的麻烦事4.1 为什么重启之后共享文件夹又不在了好多朋友反馈共享文件夹当时能用一重启虚拟机就找不到了。原因在于open-vm-tools自带的systemd服务在某些情况下没有正确自动挂载HGFS。尤其是Ubuntu 20.04之后的版本HGFS改由vmhgfs-fuse负责而open-vm-tools的挂载服务并不总是能识别你添加的共享目录。别慌这个问题的解决办法是建立一个自己的自动挂载配置每次开虚拟机都自动把共享文件夹挂到指定目录。4.2 方案一用fstab自动挂载简单直接Ubuntu的/etc/fstab是开机自动挂载文件系统的标准配置。在文件末尾追加一行.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults,uid1000,gid1000 0 0保存后执行sudo mount -a测试一下如果没有报错重启虚拟机就能自动挂载了。这个方案虽然简单但我建议你在改动前备份原文件sudo cp /etc/fstab /etc/fstab.bak万一配置写错了进不了系统也能从恢复模式把备份还原回来。4.3 方案二用systemd服务挂载更稳定可控如果fstab路线在你机器上不生效有些新版Ubuntu对fuse设备类型比较挑剔可以创建一个systemd服务来挂载。新建一个服务文件sudo vim /etc/systemd/system/mnt-hgfs.service内容如下[Unit] DescriptionMount VMware Shared Folders Afternetwork.target [Service] Typeoneshot RemainAfterExityes ExecStart/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid1000,gid1000 ExecStop/usr/bin/fusermount -u /mnt/hgfs [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable mnt-hgfs.service sudo systemctl start mnt-hgfs.service这套方案的好处是挂载过程有日志可查万一挂载失败journalctl -u mnt-hgfs.service能看到具体报错。我实际用下来systemd方案在Ubuntu 22.04和24.04上都非常稳。4.4 方案三写进rc.local老派但通用比较老派的Linux习惯是把挂载命令写进/etc/rc.local。如果Ubuntu里这个文件默认不存在就手动创建一个内容带上#!/bin/bash给上执行权限。这种方式现在用的人少了但它在一些定制环境里反而是兼容性最好的。#!/bin/bash vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid1000,gid1000 exit 0保存后sudo chmod x /etc/rc.local sudo systemctl enable rc-local.service启动服务后测试一下。三种方案任选其一即可不要同时上否则可能重复挂载反而造成目录被占用的麻烦。5. 常见问题速查与排查实录这块内容是平时群里问得最多的我把典型问题整理成一张表方便直接对照排查。现象可能原因解决方法/mnt/hgfs 目录不存在未安装open-vm-tools / VMware Tools未加载安装open-vm-tools和open-vm-tools-desktop并重启/mnt/hgfs 存在但为空共享文件夹配置没启用或没重启虚拟机确认“共享文件夹”勾选了“始终启用”重启虚拟机挂载时报错 Host requires VMware Tools to be installedVMware Tools版本过旧或未正确安装升级/重装VMware Tools确认vmware-toolbox-cmd -v有输出挂载后权限不足无法读写uid/gid设置不对挂载时加-o uid1000,gid1000或用当前用户idWindows端修改文件虚拟机里不同步FUSE缓存或文件系统刷新延迟等待几秒或重新挂载或者用sync命令强制同步复制大文件时卡死或断连共享目录在机械硬盘上或传输大文件IO压力大换成SSD或用SMB方式做大文件传输共享文件夹设置是灰色的虚拟机未关机或在远程连接状态下关机后再修改虚拟机设置5.1 共享文件夹设置项是灰色点不了这个出现频率特别高。灰色通常意味着当前虚拟机还处于运行中VMware不允许在运行状态下修改共享文件夹配置你需要在“虚拟机-电源-关机”之后再来设置。注意是“关机”不是“挂起”。挂起状态下有些选项照样锁定。5.2 挂载成功但看不到想要的文件如果ls /mnt/hgfs能看到共享文件夹名称但里面缺文件多半是Windows端的路径选择问题。确认一下VMware里添加共享时选择的目录和实际文件所在目录是否一致尤其是用了快捷方式或软链接路径的时候VMware不一定会解析到真实目录。5.3 Ubuntu 22.04/24.04级别的新版本特别容易踩的坑我个人体感是Ubuntu 22.04和24.04对HGFS的支持没有老版本那么“开箱即用”了原因是内核模块和FUSE版本的适配变化。建议新版本系统一律优先用open-vm-tools-desktop加vmhgfs-fuse的组合。装完包以后直接手动挂一次能挂上再考虑做开机自启不要在没验证的情况下直接写fstab。5.4 Windows宿主机端防火墙对共享文件夹的影响理论上HGFS共享不依赖网络端口防火墙不会拦截。但如果你同时开了Windows共享目录比如把D盘某个目录设成了SMB共享那就需要检查防火墙是否放行了“文件和打印机共享”。这部分有个特别容易迷惑的地方Windows 10/11默认防火墙会拦截来自公用网络的SMB访问即使你关掉了“域网络”和“专用网络”的拦截公网网络的拦截还在。所以最好把Windows主机的网络配置文件改成“专用网络”或者在防火墙规则里明确放行。操作路径控制面板 - 系统和安全 - Windows Defender防火墙 - 允许应用或功能通过Windows Defender防火墙 - 勾选“文件和打印机共享”的“专用”和“公用”。5.5 共享文件夹里的文件权限和属主显示乱了Windows的文件系统没有完整的Linux权限模型所以HGFS挂载出来的文件默认会按挂载时的uid和gid统一显示。如果你在Windows端新建了一个文件在Ubuntu里看到的owner可能和你Linux用户不一样这属于正常现象。要解决读写问题核心还是挂载时把uid和gid都指定成自己的用户不要加noexec之类的限制。另外不要在Windows那边直接修改处于HGFS挂载中的虚拟机里的文件反方向同理。两边同时读写同一个文件尤其是数据库、Git仓库这类对一致性要求高的场景很容易出现文件锁冲突或内容损坏。建议同一时刻只有一个系统在写。6. 从共享文件夹到更顺滑的协作体验6.1 共享文件夹和拖拽文件/剪贴板共享怎么配合VMware Workstation还支持从Windows直接把文件拖进Ubuntu窗口或者双向复制粘贴文本。这套体验同样依赖VMware Tools。如果你开了共享文件夹拖拽其实就显得没那么必要了但有一些场景还是拖拽更方便比如临时拖个小脚本进去不用切到文件管理器。要注意的是拖拽和剪贴板共享依赖于虚拟机窗口处于激活状态用的还是open-vm-tools的拖拽服务。要是发现拖拽没反应先检查Tools是不是活着systemctl status open-vm-tools如果服务没起来手动启动一下sudo systemctl restart open-vm-tools6.2 多虚拟机共用同一份共享目录有时候你开了两三个虚拟机希望它们都访问Windows下的同一个share目录。这个任务在VMware里实现起来很简单在每台虚拟机的“共享文件夹”设置里都添加同一个Windows目录即可挂载之后各自出现在各自的/mnt/hgfs下。但要注意并发锁的问题。如果多个Linux虚拟机同时读写同一个文件Windows端的SMB锁和Linux端的POSIX锁并不能完全互通容易造成数据不一致。我在用Maven多模块构建时遇到过几次诡的index.lock冲突后来就把共享目录按虚拟机和项目隔开了从此清净。6.3 什么时候应该放弃共享文件夹改用SMB共享文件夹虽好也有它的边界。HGFS的整体表现其实不如你把它当作一个网络文件系统来看待更合理——它不是一个为了高性能设计的方案它是为了“方便”设计的。真要搞数据库数据目录、大型软件编译缓存这类IO密集型操作我建议你还是在虚拟机里用本地磁盘别把它放到共享目录里。如果碰到以下场景直接考虑SMB/CIFS方案需要多个虚拟机或物理机同时访问同一份文件。传输量很大、文件很多HGFS有明显的性能瓶颈。希望用Linux原生的挂载方式兼容性更强比如RockyLinux/CentOS里共享文件夹没VMware Tools时。跨网络远程访问不只是本机虚拟机。SMB挂载可以简单理解成sudo apt install cifs-utils sudo mkdir -p /mnt/winshare sudo mount -t cifs //192.168.x.x/share /mnt/winshare -o usernamewindows用户名,password密码,uid1000,gid1000挂载完之后如果重启失效记得把挂载项写进fstab格式如下//192.168.x.x/share /mnt/winshare cifs usernamewindows用户名,password密码,uid1000,gid1000,iocharsetutf8 0 0SMB的优势是通用但它对Windows端的配置要求高而且防火墙坑更多。对我个人来说同一个宿主机虚拟机之间交换文件首选仍然是VMware共享文件夹跨机器、跨网络再考虑SMB。6.4 Docker for Windows和Ubuntu共享文件夹的联想说到WSL和Docker很多人的Windows上装了Docker Desktop然后在Ubuntu虚拟机里也会装一套Linux版Docker。这时候文件互通更要注意数据卷的挂载方式。你有两种路线一种是让Docker Desktop的WSL2后端直接访问Windows目录另一种是在传统VMware的Ubuntu虚拟机里跑Linux Docker把共享目录作为数据卷挂载进容器。这俩路线的体验差别很大。我个人经验是如果就为了开发调试Docker Desktop的WSL2模式配合Windows目录更顺滑如果你想模拟一个相对独立的Linux服务器环境VMware里的Ubuntu加共享文件夹更能贴近生产。两者都能实现文件互通但千万别在两边同时跑同一个数据库容器否则锁冲突会让你怀疑人生。7. 从伸手党到熟练工我的一些个人体会说实话共享文件夹这种东西教程一搜一大把但真正让人卡住的往往是最基础的细节——VMware Tools装没装、虚拟机重启没重启、权限对不对、uid/gid对不对。只要把这几条链路捋顺整个配置过程其实十五分钟都用不到。我自己的习惯是先确定Tools再配置共享然后手动挂载验证最后才落到自动挂载配置上。每一步都验证而不是一顿操作全部改完再找问题。这套流程帮我避开了无数次排查的麻烦也推荐给你。如果你在Ubuntu里打算长期使用共享文件夹做开发协作还有一个值得花一小时去做的事把Windows那边的目录整理成一套规范的工程目录结构比如code、docs、packages、backup然后在虚拟机里建几个符号链接ln -s指向/mnt/hgfs下对应的子目录。这样你工作的时候不用反复敲cd /mnt/hgfs/xxx直接在用户主目录里就能访问体验会好很多。最后再给一个很多新手不知道的小技巧VMware共享文件夹在Windows端修改文件后如果你在Ubuntu里用ls或文本编辑器总感觉看不到最新内容不一定是同步问题可能是你的编辑器缓存了目录结构。在终端里用ls -la强制刷新一下或者cat一下文件基本就能确认是不是真的不同步。大多数时候不更新不是没同步而是工具在“骗”你。
返回列表