用了这么多年 VMware Workstation我几乎每天都要在 Windows 主机和虚拟机之间来回倒腾文件。很多朋友最初接触虚拟机时最头疼的就是文件交换这一步。有人靠 U 盘拷有人压缩包传半天还有人干脆老老实实开 FTP其实 VMware 自带的共享文件夹功能就能解决绝大部分需求而且配置一次以后一劳永逸。这篇博文我就完整梳理一遍 Windows 与 VMware 虚拟机共享文件夹的原理、配置、权限处理和常见坑希望能帮你在项目开发和个人使用里少走弯路。共享文件夹这个功能核心价值就一句话让宿主机和虚拟机直接共享一个真实目录两边同时读写同一份文件不用管虚拟磁盘有多大、网络通不通也不用装单独的传输工具。开发场景里尤其舒服代码放在 Windows 下用 IDE 编辑Linux 虚拟机里直接编译运行日志文件在虚拟机里生成Windows 这边立刻就能打开排查。这篇文章既适合刚装好 VMware Workstation 的新手也适合已经用了很久但一直没解决权限、挂载失效等问题的老手。1. 共享文件夹到底能做什么1.1 开发调试里的核心场景如果你平时用 Windows 做日常办公和代码编辑用 VMware 里的 Linux 跑编译、测试和调试共享文件夹基本就是效率神器。我的项目代码全部放在 Windows 的D:\workspace目录下用 VS Code 打开直接改虚拟机里把同一个目录挂载到/home/user/project改完代码立刻在终端里跑构建命令省去一切同步步骤。这里有个容易被忽略的好处所有版本管理操作git log、git diff、git blame都是以真实文件状态为基础的。代码文件直接共享git 仓库在 Windows 侧维护虚拟机里看到的也是同一套.git目录两边操作互不冲突完全不需要考虑代码传到虚拟机后忘记同步这种低级问题。1.2 跨系统文件交换的轻量方案不少人习惯用优盘、微信文件传输助手或者 FTP 在宿主机和虚拟机之间传文件这些方式不是不能用但效率真的差。尤其是遇到几十 GB 的镜像、数据集或者日志包时走网络或移动介质都要等半天走共享文件夹文件从 Windows 拖进共享目录虚拟机立刻就能看到本质是宿主机文件的直通读取。我实测过几十 GB 的数据库备份文件虚拟机里直接访问共享目录、用cp拷贝到虚拟磁盘写入速度基本能拉到宿主机硬盘的读写上限比 FTP 和 SMB 都快也没有中间环节的校验开销。1.3 备份和迁移组合的简化另一个高频使用场景是配置备份。我的虚拟机里所有重要配置文件、脚本、密钥都会定期同步到一个共享目录宿主机再统一做云备份或磁盘备份这样虚拟机本身出了故障配置文件也完全不受影响。如果你是把自己常用的虚拟机环境打包分发给同事使用也可以把相关配置和数据放到共享目录里让虚拟机保持的是环境逻辑宿主机保留的是资料实体后续维护和迁移都会灵活很多。2. 核心原理VMware Tools 与 HGFS 协议2.1 为什么共享文件夹必须装 VMware Tools共享文件夹不是 VMware 天然就能直接提供的。虚拟机看到的是一块块虚拟出来的硬件设备普通情况下根本没有路径去感知宿主机里的某个真实目录。VMware Workstation 的实现方式是在虚拟磁盘驱动之上额外提供一套 HGFSHost-Guest File System内核模块这套模块由 VMware Tools 负责安装到客户机操作系统里。换句话说没有 VMware Tools 里的 HGFS 驱动虚拟机内核根本不知道共享文件夹这种设备的存在你在虚拟机设置里配置得再漂亮也没用。Windows 虚拟机相对好办装完 Tools 后驱动自动就位Linux 虚拟机如果安装的是精简版系统或者装 Tools 时只选了部分组件HGFS 模块缺失或版本不匹配的情况很常见这也是后面各种挂载失败的根源。2.2 HGFS 文件系统的工作方式HGFS 可以被理解成一个网络文件系统但传输通道不是走虚拟网卡而是走 VMware 虚拟化层提供的特殊 I/O 通道。宿主机把某个真实目录导出来虚拟机的 HGFS 客户端通过 Tools 发送请求宿主机侧的 VMware 进程负责把文件内容送回虚拟机。所以速度和稳定性很依赖 VMware Tools 版本。Tools 版本过旧遇到 Windows 新版本更新或者 macOS 文件结构变化就会出现连接不上、文件列表为空等怪问题。我的经验是VMware Workstation 每次升级后最好把各虚拟机的 Tools 也一并更新一下很多看似莫名其妙的问题都是 Tools 版本不匹配引起的。2.3 为什么明明配置了却不生效很多时候配置了共享文件夹虚拟机里却看不到原因分几种。客户机没有安装 VMware Tools或者 Tools 安装不完整。Linux 内核升级后HGFS 内核模块没有重新编译模块加载失败。共享文件夹名称用了中文或特殊字符导致客户机识别出错。共享路径中包含空格或者过长的绝对路径挂载时忘记加引号。权限策略拦截比如 Windows 上的杀毒软件实时监控宿主机共享目录。这些问题会在后面的排查部分展开但第一原则是先确认 Tools 装好、模块加载成功再去查路径和权限。3. 完整实操Windows 主机与 Linux 虚拟机的共享文件夹3.1 第一步安装 VMware Tools这一步是所有后续操作的前提。在 VMware Workstation 菜单栏点击虚拟机选择安装 VMware Tools虚拟机会自动挂载一个安装镜像。如果 RHEL/CentOS 系没有自动弹出窗口也可以手动挂载/usr/bin/vmware-config-tools.pl来配置。# Debian/Ubuntu 系 sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop # RHEL/CentOS 系 sudo yum install open-vm-tools如果是已有的老虚拟机且安装了 VMware 自带的 Tools建议先卸载旧的再重装。混用 VMware Tools 和 open-vm-tools 是踩坑重灾区模块冲突会导致挂载一直报错。装完后执行vmware-hgfsclient检查宿主机是否把共享目录传给了虚拟机能看到目录列表说明 HGFS 通道已经通了。3.2 第二步在虚拟机设置里添加共享文件夹在 VMware Workstation 界面中打开需要配置的虚拟机依次进入虚拟机 → 设置 → 选项 → 共享文件夹。选择总是启用点击添加选择 Windows 宿主机上要共享的真实目录给这个共享目录起一个名字这个名字会作为挂载标识使用建议用简短英文名比如workspace勾选启用此共享这里需要说明一下VMware 允许同时启用多个共享目录。很多人习惯把整个盘共享出去图省事我建议尽量只共享具体的项目目录。共享范围越大权限管理越混乱虚拟机里万一中招恶意脚本整个盘的文件都暴露出去风险太高。3.3 第三步手动挂载共享目录配置好之后虚拟机内不一定自动出现在某个路径下。经典的挂载路径是/mnt/hgfs/共享名。如果安装了完整版 VMware Tools目录可能自动出现如果用了 open-vm-tools经常需要自己挂载。# 查看宿主机共享了哪些目录 vmware-hgfsclient # 手动挂载传统方式 sudo mkdir -p /mnt/hgfs/workspace sudo mount -t vmhgfs .host:/workspace /mnt/hgfs/workspace # 如果提示 vmhgfs 文件系统未知尝试用 fuse 方式挂载 sudo vmhgfs-fuse .host:/workspace /mnt/hgfs/workspace -o allow_other -o uid1000用mount -t vmhgfs时格式里的.host:/workspace是固定的.host就是宿主机的一个设备标识后面的名称必须和 VMware 设置里的共享名完全一致大小写都不能错。挂载完成后执行df -h或直接ls /mnt/hgfs/workspace验证。能看到宿主机文件列表就说明成功了。3.4 第四步设置开机自动挂载手动挂载只是临时的虚拟机重启后挂载点就没了。要省事最好写进/etc/fstab。注意vmhgfs在 fstab 里的写法有讲究。传统内核模块是vmhgfs但如果用vmhgfs-fuse文件系统类型要写成fuse.vmhgfs-fuse否则开机时会提示 mount 失败。# /etc/fstab 追加一行 .host:/workspace /mnt/hgfs/workspace fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0写入 fstab 后建议先手动执行sudo mount -a测试不要直接重启。如果提示失败还能来得及改回来避免开机卡在等待挂载上。如果你的系统里同时存在多个共享目录一条条写就行每行对应一个目录注意挂载点路径都要提前建好。还有一种做法是使用systemd mount unit管理好处是依赖关系更明确但 fstab 对大多数人来说已经足够。4. Windows 虚拟机场景共享文件夹与网络映射4.1 Windows 虚拟机里的共享文件夹如果虚拟机装的是 Windows比如 Windows 10/11 的测试环境共享文件夹配置更简单。装好 VMware Tools 后打开此电脑在网络位置或VMware Shared Folders目录下就能直接看到。这个位置实际上也是通过 HGFS 映射出来的网络路径只是 Tools 帮忙在 Windows 资源管理器里挂好了不需要你手动输入命令。如果资源管理器里看不到可以手动添加网络位置地址填\\vmware-host\Shared Folders\workspace这里的vmware-host也是固定标识不是 IP 地址。有些精简版 Windows 虚拟机确实会缺 HGFS 客户端注册项这时候重装一遍 VMware Tools 就能解决。还不行就检查 Windows 服务的VMware Tools Service是不是处于停止状态设为自动启动并重启。4.2 用 SMB/CIFS 走网络共享HGFS 共享只在 VMware 内部有效如果虚拟机需要和局域网里另一台物理机共享文件或者需要绕开 HGFS 的兼容性问题可以考虑用 Windows 自带的 SMB 共享。在 Windows 宿主机上右键要共享的文件夹 → 属性 → 共享 → 高级共享设置共享名和权限允许Everyone或指定用户读写。Windows 会默认要求网络凭据如果客户端连不上通常是因为未开启 SMB 1.0/CIFS 协议或者网络发现被防火墙挡住了。虚拟机里访问时输入\\192.168.x.x\workspace这里的 IP 换成宿主机在虚拟机可达网络里的地址。如果宿主机和虚拟机用的是 NAT 模式需要确认能否互通桥接模式一般直接就能通。5. 权限问题Ubuntu 共享文件夹权限不够怎么办5.1 挂载后只有只读权限很多人第一次挂载成功很开心结果往共享目录里写文件却发现没权限。在 Ubuntu 系虚拟机里这个问题尤其频繁。原因是 HGFS 挂载默认可能以 root 身份挂载或者挂载时没有指定当前用户 uid/gid导致普通用户对挂载点没有写权限。解决办法就是重新挂载时附上用户参数用你自己的用户名和 UID。id yourname sudo umount /mnt/hgfs/workspace sudo vmhgfs-fuse .host:/workspace /mnt/hgfs/workspace -o uid$(id -u yourname),gid$(id -g yourname),allow_other如果只是临时用可以直接用当前用户的权限挂载sudo vmhgfs-fuse .host:/workspace /mnt/hgfs/workspace -o uid1000,gid10005.2 文件属主显示成 nobody 的问题另一种常见情况是共享目录挂载后能读写但ls -l看到所有文件属主都是nobody或者root。这在 git 操作里非常坑因为 git 会认为文件所有权变化导致权限位被重置进而触发dubious ownership报错。处理方式有两个思路。一个是在挂载时通过uid/gid参数把你的用户映射成属主另一个是在 git 层面关闭安全检测但不太推荐治标不治本git config --global --add safe.directory /mnt/hgfs/workspace我最推荐的方式还是挂载时指定 uid/gid一次性解决。5.3 文件锁和写入性能问题HGFS 的写入并不完全等价于本地磁盘。如果你在虚拟机里跑数据库、构建工具或者频繁进行小文件写入可能会遇到文件锁或者写入延迟的问题。数据库数据文件建议还是放在虚拟机自己的虚拟磁盘里不要直接放在共享目录上这是性能和稳定性的综合考虑。共享目录更适合源代码、脚本、文档、日志这类对延迟不敏感的文件。6. 常见问题与排查技巧实录6.1 共享文件夹不显示或为空这是最常见的问题。首先执行vmware-hgfsclient确认宿主机侧有没有把共享目录传给虚拟机。如果命令输出为空说明 Tools 和虚拟机的通信就有问题重装 Tools 是最快手段。如果命令能看到共享名但/mnt/hgfs是空的多半是 HGFS 内核模块加载异常。试试重新加载模块sudo modprobe -r vmhgfs sudo modprobe vmhgfs若提示模块不存在就检查 open-vm-tools 是否装了完整版。open-vm-tools和open-vm-tools-desktop都要装否则 HGFS 相关工具和模块不齐全。6.2 挂载时提示 wrong fs type这种报错本质就是内核不认识vmhgfs文件系统。最可能原因是内核模块缺失或和当前内核版本不匹配。如果系统刚升级过内核但 open-vm-tools 没重装模块自然加载不上。处理办法sudo apt install --reinstall open-vm-tools sudo reboot如果用的不是 LTS 内核也可以换回官方默认内核往往能少很多兼容性问题。6.3 重启之后挂载失效这个问题要看你的 fstab 写得对不对以及挂载点的父目录和 fstab 是否有依赖顺序问题。挂载点目录必须提前存在否则挂载必然失败fstab 写入后要执行sudo mount -a验证使用fuse.vmhgfs-fuse类型时确认系统里有vmhgfs-fuse命令如果开机时 network 未就绪而挂载失败可以加_netdev参数但 HGFS 不依赖网络一般不需要6.4 Windows 11 访问共享文件夹找不到网络路径这个问题在 Windows 虚拟机访问 Windows 宿主机 SMB 共享时经常出现。排查分三段网络连通性虚拟机里ping 宿主机IPSMB 服务宿主机服务管理器里确认Server服务已启动协议版本Windows 11 默认禁用 SMB 1.0老系统用 SMB 1.0 访问就会报错可以在宿主机启用或关闭 Windows 功能里勾选 SMB 1.0/CIFS 文件共享支持但需要注意SMB 1.0 安全风险较高仅在可信局域网内临时使用用完后建议关闭。6.5 虚拟机启动时卡在开机画面如果 fstab 里写的挂载项有问题且系统等待挂载超时开机就可能卡住。这种问题很少见但很吓人。如果遇到在系统启动时进入 recovery 模式把 fstab 里的那行注释掉重启后再重新修正。7. 我的几点实操心得7.1 共享目录最好独立划分我习惯在 Windows 上建一个专门的总目录比如D:\VMShare下面按用途建子目录code、data、logs。这样在 VMware 设置里共享时最小化暴露面权限管理也清晰。千万不要图方便直接把整个C盘或者D盘都共享出来万一虚拟机的权限被攻破宿主机所有文件都会暴露给攻击者。7.2 共享名和路径保持一致VMware 里的共享名、挂载命令里的路径名、fstab 里的标识这三处必须严格对应。少一个字母都不行大小写也要一致。我之前就因为把共享名起成ProjectA但挂载命令里写了projecta而折腾了半天这个细节真的很容易被忽略。7.3 工具链升级顺序VMware Workstation 升级后建议先升级虚拟机里的 Tools再手动重新挂载一次共享目录。很多网友反馈升级宿主机后虚拟机共享突然失效基本都是 Tools 版本和新的 HGFS 服务不匹配导致的。还有一点如果你用了虚拟机快照Tools 升级后强烈建议重新拍一个快照一旦出现兼容性问题可以快速回退。7.4 大文件传输建议直连HGFS 共享在大量小文件场景下很好用但如果是巨大的单文件超过几十 GB我建议你优先用 VMware 自带的拖拽功能或者临时起一个 HTTP/SMB 服务来传。原因很简单HGFS 传输过程有额外的校验开销大文件长时间传输中途断开的概率会相对高一点断点续传能力也不如专门的文件传输协议。像虚拟机镜像这种超大文件直接通过 Windows 共享或者 U 盘介质导入反而更稳。7.5 及时清理不需要的共享最后一个小建议虚拟机的共享目录配置不是越多越好。每次添加新项目共享后记得把已经不用了的共享项删掉只保留当前活跃的目录。这样既能减少 HGFS 模块的维护压力也能避免虚拟机内的误操作对宿主机文件造成不可逆的影响。共享文件夹是 VMware 使用频率高、收益明显的功能但只有合理地、有边界地使用它才能真正成为日常开发中的高效利器。
阅读完成 · 觉得有帮助?