☰
VMware共享文件夹配置与排错全指南:Windows/Linux客户机通用
2026/9/29 1:25:00 网站建设 项目流程

刚接触VMware那阵子,我为了在宿主机和虚拟机之间传文件,把拖拽、U盘重定向、甚至是建个临时FTP的办法都试了个遍。拖拽传小文件还能凑合,一旦文件超过几个GB,界面半天没反应,最后直接卡死;U盘来回插拔几次,USB控制器偶尔还会掉设备。后来真正把VMware的共享文件夹功能研究透,才发现以前那些所谓"传文件姿势"全是在绕远路。这篇就把Windows宿主机搭配VMware虚拟机(客户机是Windows或Linux都覆盖)的共享文件夹配置一次讲明白——前置条件、完整步骤、挂载失效与权限报错的排查链路,以及什么情况下改用CIFS网络共享更合适。无论你是刚开始用Workstation的新手,还是已经被共享文件夹问题折磨过的老用户,这几部分内容应该都能直接用上。

1. 为什么用共享文件夹:与拖拽、U盘拷贝、网络共享的真实差距

很多人在VMware里传文件的路径是:先试拖拽,拖不动就插U盘,再不行就开个共享目录走局域网。这几个方案确实都能用,但各自有让人抓狂的短板。

拖拽功能本质上是VMware Tools提供的一项便捷交互,它走的是图形会话的剪贴板通道,数据量一大就极其不稳定。我实测往Windows 11虚拟机里拖一个4GB的安装包,进度条消失在99%的位置,虚拟机里的文件却始终是0字节,最后只能重新来过。即便拖拽成功,文件落在桌面或者下载目录后还要手动归位,跟共享文件夹这种"直接映射成一个磁盘"的体验完全不是一个量级。

U盘重定向意味着每次传文件都要经历"插入U盘 → 虚拟机菜单里连接USB设备 → 拷贝 → 安全弹出 → 再拔掉"的固定流程。偶尔一次还好,如果持续一个项目周期都要频繁交换资源,这套流程会耗掉大量注意力。而且Windows虚拟机里如果跑的是精简版系统,USB驱动缺失时设备列表里根本看不到U盘,AB桥接到客户机也会失败。

走网络共享(SMB/CIFS)倒是稳定,但先要有IP互通、开防火墙端口、配置账户权限。单台虚拟机还好,一旦宿主机换了网段,虚拟机网络策略变了,原来好用的共享路径可能第二天就断了。配置成本比VMware自带的共享文件夹高出一截,而且需要处理凭证过期这类额外问题。

共享文件夹的价值在于它绕过了网络栈,走的是VMware Tools提供的hgfs通道。宿主机里的一个目录,直接以文件夹形式暴露给客户机:客户机Windows里它是\\vmware-host\Shared Folders\xxx(映射后可以直接变成一个盘符),客户机Linux里它挂载在/mnt/hgfs下。不需要IP,不需要凭证,文件读写速度实测比同网段SMB快很多,尤其小文件并发场景。这个通道依赖的是虚拟机监控器(Hypervisor)的驱动,稳定性和NTFS/ext4之间互相拷贝的真实带宽都更接近物理磁盘直通。

不过,共享文件夹也并非没有边界。如果你是拿虚拟机跑数据库、搞Docker数据卷目录,或者拿共享位置存放项目里动辄几万个文件的node_modules,那是真的会卡。原因后面章节会展开,这里先记住一句话:共享文件夹适合作为"文件交换区",不适合作为高性能的持续存储池。

2. 前置条件:VMware Tools / open-vm-tools 的正确安装姿势

共享文件夹不是虚拟机开机就能用的,它依赖客户机里的VMware Tools组件。很多人在虚拟机设置里点了半天"共享文件夹"选项发现是灰的,本质原因就是Tools没装到位。

2.1 VMware Tools 到底是什么角色

VMware Tools不是一个单一程序,它是一套驱动的集合:显卡驱动(让分辨率自适应窗口)、鼠标驱动(解决光标从虚拟机里移不出来)、时间同步服务,以及一个很关键的组件——hgfs内核模块。共享文件夹的实现路径是:宿主机指定的目录通过VMware Workstation的用户态服务接管,客户机里的hgfs驱动把同名目录挂载成本地文件系统。Tools没装好,相当于hgfs驱动不存在,后续所有共享操作都是空中楼阁。

有个细节需要澄清:很多人觉得Tools只是"增强体验"的附属品,不装也能用虚拟机。这话在纯命令行Linux环境里勉强成立,但只要涉及共享文件夹、拖拽、剪贴板共享、分辨率自适应,那Tools就是硬性依赖,跳不过去。

2.2 Windows客户机的安装流程

在VMware Workstation菜单栏依次选择"虚拟机 → 安装VMware Tools",软件会把一个ISO镜像挂载到虚拟机的光驱里。如果虚拟机里的光驱没有自动运行安装程序,手动打开光驱盘符,找到setup64.exe(客户机是64位Windows)或者setup.exe执行即可。

这里有个Windows用户特别容易踩的坑:如果宿主机开着比较严格的安全软件,或者客户机的用户账户控制(UAC)级别很高,光驱里的自动播放和安装程序可能会被拦截。此时不要慌,直接在我的电脑里打开光驱,手动启动安装包,这是最常见的一条兜底路径。

安装完成后一定要重启虚拟机。理由很直接:hgfs内核驱动和对应的Windows服务(服务名是VMTools)需要开机加载。不重启硬是要用,共享文件夹选项就算能勾上,客户机里访问\\vmware-host也会报找不到网络路径。

2.3 Linux客户机:优先用open-vm-tools,别再自己编译

早年间在Linux虚拟机里装VMware Tools是要从光驱里挂载压缩包然后手动编译内核模块的,到了新内核上还动不动编译失败,非常痛苦。现在主流的Debian/Ubuntu/CentOS发行版已经把所有驱动打包成了open-vm-tools,直接走包管理器安装是最省心的方案。

Ubuntu/Debian系统:

sudo apt update sudo apt install open-vm-tools

如果是桌面版Ubuntu,还想使用共享文件夹自动挂载、拖拽、剪贴板共享这些图形会话能力,必须加装一个额外的包:

sudo apt install open-vm-tools-desktop

CentOS/RHEL系统:

sudo yum install open-vm-tools

装完后检查服务状态:

systemctl status vmtoolsd sudo vmware-toolbox-cmd -v

vmware-toolbox-cmd -v能返回版本号,说明Tools的用户态服务正常。再确认内核模块是否就绪:

lsmod | grep vmhgfs

只要有输出,说明hgfs模块已经挂在当前内核里了,后面挂载共享文件夹才有底气。我在Ubuntu 22.04、CentOS 7.9和Windows 10/11的客户机上都按这套流程验证过,只要Tools装对,共享文件夹这块就成功了一半。

3. Windows宿主机与Windows虚拟机的共享配置完整流程

假设你已经完成了Tools安装和客户机重启,接下来进入共享文件夹的正题。先走一遍Windows客户机的完整流程,这个流程最直观,也最容易被各种小问题打断。

3.1 虚拟机设置里的操作步骤

  1. 确认虚拟机处于关机状态,或者至少在设置界面能够修改配置,然后在VMware Workstation主界面点击菜单栏的"虚拟机 → 设置"(或者直接按Ctrl + D)。
  2. 在弹窗顶部找到"选项"页签,左侧列表里点击"共享文件夹"。
  3. 右侧选择"始终启用"。如果只想临时开启一次,选"下次开机时启用"也行,但之后每次开机都要重新确认,不如直接选始终启用省心。
  4. 点击"添加"按钮,在向导里选择宿主机的一个目录。这里强烈建议不要直接共享整个C盘,因为客户机一旦发生恶意软件感染或者手动误删,宿主机系统盘会一起遭殃。我的习惯是在宿主机上专门建一个VMShare之类的业务目录,只共享这一层。
  5. 给这个共享起一个名字,这个名字会直接出现在客户机的共享路径里。
  6. 勾选"启用此共享"。如果客户机是Windows,界面上还有一个"映射为网络驱动器"的选项,勾选后VMware会在客户机里自动分配一个盘符(通常是Z盘),访问起来会更顺手。

3.2 客户机里访问的两种方式

不勾选"映射为网络驱动器"的话,在客户机的文件资源管理器地址栏输入:

\\vmware-host\Shared Folders

回车就能看到所有共享的根目录,里面按共享名列出文件夹。

我在Windows 10和Windows 11的客户机里还发现一个规律:资源管理器的"网络"侧边栏有时候会直接出现名为VMMEM的主机节点,双击进去同样能到达共享目录。如果你的界面里看不到,走地址栏输入路径更靠谱。

如果勾选了映射为网络驱动器,客户机里应该多出一个盘符,双击直接就是共享目录的内容。但有个情况非常常见:勾选映射之后,盘符在客户机里并没有立刻出现。这不是设置失败,而是VMware Tools的驱动器映射服务还没刷新过来。重启一次客户机基本都能解决,也可以在客户机的命令提示符里手动建立映射:

net use z: \\vmware-host\Shared Folders\<共享名> /persistent:yes

这条命令执行成功后,Z盘立即出现,而且/persistent:yes会让它重启后仍然保持映射。

3.3 宿主机文件夹权限对客户机写入的影响

共享文件夹的权限是两层叠加的:宿主机NTFS权限 + 客户机里的用户权限。客户机里能不能往文件夹写入,首先取决于宿主机那个目录是否允许当前登录用户写入。

举一个实际踩过的坑:我尝试共享宿主机C:\Program Files\SomeTool目录给Windows虚拟机,结果Windows客户机里能看到目录内容,但想在里面新建文件就弹出"目标文件夹访问被拒绝"。原因就在于Program Files目录默认只有Administrators和SYSTEM有写权限,普通用户连创建文件都做不到。

解决办法很简单,在宿主机上右键共享目录 → 属性 → 安全 → 编辑,给Users或者当前Windows用户授予"完全控制"权限即可。这一步最好在配置共享之前就做掉,免得配置完成后再去排查半天。

3.4 双Windows场景里最容易忽略的"网络路径"报错

客户机访问\\vmware-host时报"找不到网络路径",是搜索里出现频率很高的一个词条。这个错误最大的迷惑点在于它看起来像SMB网络共享的问题,实际上它跟局域网共享没有半点关系。\\vmware-host是VMware Tools注册的一个虚拟网络重定向器,它由hgfs驱动接管。一旦Tools服务没起来,或者驱动版本和Workstation不匹配,就会出现这个报错。

排查链路如下:

  • 确认虚拟机里services.msc能看到"VMware Tools"服务,并且处于"正在运行"状态。
  • 如果不能运行,重装一遍VMware Tools并重启虚拟机。
  • 检查宿主机上是否同时装了多个VMware产品(比如Workstation和旧版Player),驱动版本冲突也会导致hgfs服务异常。这种情况建议彻底卸载后重装最新版Workstation。
  • 如果你把Windows客户机用"仅主机模式"网络配置了IP,也不影响共享文件夹,因为它根本不走虚拟网卡,别被误导到网络配置方向上去。

4. Windows宿主机与Linux虚拟机的共享文件夹配置与权限处理

Linux客户机的共享文件夹原理跟Windows一样,也是靠hgfs驱动,但挂载形式和使用习惯完全不一样。很多人在这一步遇到的坑比Windows客户机更折腾,通常集中在"自动挂载没生效"和"权限不够"这两个问题上。

4.1 为什么/不/mnt/hgfs 里什么都没有

在装有open-vm-tools-desktop的桌面版Ubuntu里,只要虚拟机设置里启用了共享文件夹,系统通常会自动把共享根目录挂载到/mnt/hgfs。你会发现整个共享根目录下按共享名列出了宿主机添加的文件夹。

但如果是纯服务器版Ubuntu,或者只装了open-vm-tools没装desktop包,/mnt/hgfs很可能不存在或者为空。这时候手工挂载是最直接的解法:

sudo mkdir -p /mnt/hgfs sudo mount -t vmhgfs .host:/ /mnt/hgfs

这里.host:/是vmhgfs驱动里的一个特殊路径,代表"宿主机共享根目录"。如果你只想挂载某一个共享名,可以这么写:

sudo mount -t vmhgfs .host:/myshare /mnt/hgfs/myshare

挂载成功之后,df -h里会出现一个vmhgfs文件系统。整个过程没有任何网络参与,所以客户机网卡配置成什么样都不影响。

4.2 重启后挂载丢失的永久化处理

Linux重启后手工挂载的共享目录会消失,这不是VMware的问题,而是文件系统挂载本来就需要系统启动时重新执行。把挂载写入/etc/fstab就能实现开机自动挂载。

在/etc/fstab末尾添加一行(注意fstab的语法分区用空格,不是普通文本制表符):

.host:/ /mnt/hgfs vmhgfs defaults,nodev,nosuid 0 0

之后用sudo mount -a验证配置是否有误。如果输出没有报错,再执行sudo reboot做一次开机验证。

这里有个小小的经验之谈:fstab挂载失败会直接导致系统卡在启动阶段等待用户输入密码,因为systemd认为关键挂载失败了。为了避免这种尴尬局面,可以在挂载参数里加上nofail:

.host:/ /mnt/hgfs vmhgfs defaults,nodev,nosuid,nofail 0 0

nofail的含义是即使挂载失败也继续启动流程,不会阻塞开机。对于共享文件夹这种非关键存储来说,宁可启动时挂不上回头再手动处理,也比卡死在登录界面强。

4.3 普通用户访问共享目录时的权限问题

Linux客户机里访问/mnt/hgfs,最常遇到的是这种情况:ls能看到目录内容,但touch testfile提示Permission denied。这是因为默认情况下/mnt/hgfs挂载后属于root:root,普通用户自然没写权限。

解决方案有几个层次:

最简单的办法是在挂载时指定UID和GID。假设客户机的普通用户名是ubuntu,先查一下他的ID:

id ubuntu

输出类似uid=1000(ubuntu) gid=1000(ubuntu)。挂载命令加参数:

sudo mount -t vmhgfs .host:/ /mnt/hgfs -o uid=1000,gid=1000

写进fstab的话就是:

.host:/ /mnt/hgfs vmhgfs defaults,nodev,nosuid,uid=1000,gid=1000,nofail 0 0

这样挂载后直接以普通用户身份读写,不再需要sudo。如果你的场景里有多个不同用户需要访问同一个共享目录,可以配合umask=0022来控制文件权限掩码,让组用户和其他用户具备读权限。

还有一个比较隐蔽的问题:宿主机Windows侧的NTFS权限同样会限制Linux客户机的写入。比如宿主机共享出来的是桌面目录,而桌面路径带有一堆用户权限继承的限制,Linux客户机里写入同样会失败。此时需要在宿主机上把共享目录的写权限授予Everyone或当前用户,跟上一章节提到的做法一致。

4.4 如果Ubuntu提示 "No such device" 或者 "wrong fs type"

在内核更新之后,open-vm-tools的vmhgfs模块偶尔会跟新内核失配,挂载时报mount: /mnt/hgfs: wrong fs type, bad option, bad superblock on //.host:/, missing codepage or helper program, or other error。

排错的正确顺序是先确认内核模块本身有没有加载:

lsmod | grep vmhgfs

如果没有任何输出,说明模块缺失或者没被加载,需要手动加载试试:

sudo modprobe vmhgfs

如果modprobe也报错,那多半是模块没有针对当前内核编译。这是比较麻烦的场景,操作路径是:

  1. 确认当前内核版本:uname -r。
  2. 安装匹配的内核头文件,Ubuntu下是linux-headers-$(uname -r):
sudo apt install linux-headers-$(uname -r)
  1. 重新安装open-vm-tools,让它重新编译内核模块:
sudo apt reinstall open-vm-tools open-vm-tools-desktop
  1. 重启虚拟机。

绝大多数跟着上面步骤走完,vmhgfs都能恢复正常。这里要提醒一句:不要因为一条挂载报错就去改内核启动参数,先把lsmod和modprobe这两步做完通常就能锁定问题范围。

5. 共享后看不到文件夹、挂载失效、权限不足:全套排查手册

共享文件夹出问题时,报错五花八门,但底层原因其实就那么几个。我整理了一份排查对照表,先把高频问题放进去,再逐条往下拆。

症状大概率原因快速处理
虚拟机设置里"共享文件夹"按钮灰掉Tools未安装或未重启客户机安装/重装Tools并重启
Windows客户机访问\\vmware-host提示找不到网络路径VMware Tools服务未运行或驱动异常重装Tools,确认VMTools服务已启动
Windows客户机映射盘符不见Tools映射服务未刷新重启客户机,或者用net use手动映射
宿主机目录能读不能写宿主机NTFS权限不足在宿主机目录的"安全"选项卡里给用户授权
Linux客户机/mnt/hgfs为空open-vm-tools-desktop未安装安装桌面包或手工挂载
Linux挂载报wrong fs typevmhgfs内核模块缺失modprobe vmhgfs,重装Tools匹配内核headers
Linux重启后挂载丢失fstab未配置或缺nofail写入fstab并加nofail
Ubuntu普通用户提示权限不够挂载UID/GID指向root挂载参数指定uid/gid

下面挑几个表层症状覆盖不到的深层问题展开。

5.1 VMware Tools重装后仍然不生效的排查链路

重装Tools是最常被推荐的解决方案,但实际执行时经常有两个盲区。

第一,重装前没有彻底清理旧版本。Windows客户机里建议先通过"添加或删除程序"卸载VMware Tools,再重新挂载ISO安装。直接覆盖安装通常能行,但偶尔会留下旧版本的内核驱动文件,与新版本Workstation的hgfs服务握手失败。卸载后重启一遍再装新的,成功率要高一截。

第二,升级宿主机的VMware Workstation版本后,客户机里的Tools不一定自动跟着升级。Workstation弹窗提示"VMware Tools在该虚拟机中过期"时,很多人直接忽略了。这种情况下hgfs驱动还是旧版,跟新版Workstation的服务端协议不完全兼容,就会出现共享文件夹偶发失效或性能很低的问题。处理方式还是重装Tools,但这次可以先用vmware-toolbox-cmd -v记录一下旧版本号,重装后对比确认版本确实变了。

5.2 快照回滚导致的共享文件夹失效

用VMware做快照是常规操作,但你会发现一个现象:回滚到某个历史快照之后,共享文件夹忽然不能访问了。这不是共享配置被回滚了,而是快照时间点上的Tools服务状态比较老,或者hgfs内核模块状态被回滚到了一个不健康的中间态。

这时候不需要重新配置共享参数,直接重启客户机即可。如果重启无效,就需要重装一次VMware Tools。记住:共享文件夹的配置存在.vmx配置文件和宿主机侧,但驱动的运行状态存在客户机里,快照回滚只会影响后者。

5.3 写文件慢、大量小文件同步时卡顿

共享文件夹的性能特性决定了它不适合高频小文件写入场景。原因是每次文件操作都要经过宿主机文件系统这一层,再通过hgfs通道转发,开销远高于客户机本地磁盘。我把一个含有3万多个文件的源码目录直接放进共享文件夹,然后在这个目录里跑npm install,整个过程比本地磁盘慢了四到五倍,而且宿主机侧的资源监视器能明显看到磁盘队列变长。

我的处理习惯是:代码项目在虚拟机的本地磁盘里放一份,共享文件夹只承担"交付产物"的角色。编译、打包、生成出来的安装包往共享目录一丢,宿主机这边直接取,这个用法又快又稳。

5.4 不要在共享文件夹里放置数据库文件和休眠文件

这是共享文件夹被骂"不稳定"的最常见来源。SQLite、MySQL的data目录、虚拟内存分页文件(pagefile.sys)、Windows休眠文件(hiberfil.sys)这些对I/O时序敏感的巨型文件,放进共享文件夹就是一个高危操作。hgfs通道本身没有数据库引擎期望的原子锁支持到那个级别,高并发下容易出现文件损坏。

原则很简单:交换文件放共享目录,就是把共享目录当成了内存盘在用,这违背了hgfs的设计场景。需要数据库之类的场景,优先让客户机使用独立的VMDK磁盘,而不是共享目录。

6. CIFS/SMB 网络共享何时比VMware共享文件夹更合适

前面一直在强调VMware共享文件夹怎么配、怎么修,但有些场景下它确实不是最优解。比如宿主机是Linux、客户机是Windows,或者你需要让宿主机之外的其他机器也能访问同一个目录。这时候用Windows自带文件共享或者Samba走CIFS/SMB协议,反而更顺手。

6.1 VMware共享文件夹与CIFS网络共享的边界

两者最大的差异在I/O路径上。VMware共享文件夹走的是hgfs虚拟文件系统通道,在虚拟机监控器层面直接与宿主机文件系统交互,不经过虚拟网卡和TCP/IP协议栈。CIFS/SMB则走虚拟网络,整个客户机网卡、虚拟交换机、宿主机物理网卡(或虚拟网卡)全部参与转发。

单从传输速度来看,同一台宿主机上的VMware共享文件夹通常比CIFS更快,尤其在小文件场景下差距更明显。但CIFS的适用范围要大得多:虚拟机上跑的应用需要被局域网其他机器访问时,只有CIFS/网络共享能承担;宿主机是Linux、客户机是Windows时,共享文件夹虽然也能配置,但挂载端要来回折腾,不如直接在宿主机上装个Samba服务一通百通。

还有一个现实问题:如果你需要把正在运行的虚拟机从一台宿主机迁移到另一台,VMware共享文件夹的配置是跟着.vmx文件走的,但实际目录还留在原宿主机上,迁移后就失联了。CIFS则不同,只要目标位置不变、网络可通、凭证有效,新宿主机上的客户机照样能访问同一个共享位置。

6.2 Windows宿主机开一个SMB共享

Windows宿主机上启用共享比较简单:右键打算共享的目录 → 属性 → 共享 → 高级共享 → 勾选"共享此文件夹"。

如果宿主机用的是Windows 10/11专业版或企业版,注意检查SMB功能是否处于打开状态。默认情况下SMB1已被禁用,SMB2/3通常是启用的;如果你用的是Windows家庭版,可能还需要到"可选功能"里手动开启"SMB文件共享支持",否则客户机连接时会报找不到共享名。

客户机访问形式是标准的UNC路径:

\\192.168.x.x\sharename

凭证就用宿主机的账户密码,或者在宿主机上新建一个专用共享账户更安全。

6.3 Linux客户机挂载CIFS后重启失效的根治方法

检索热词里有一条"cifs挂载共享文件夹重启后失效怎么办",这几乎是Linux运维里被问烂了的问题。它跟VMware共享文件夹没有直接关系,但既然已经走到网络共享方案,就一并解决掉。

我见过的大部分fstab写法是:

//192.168.1.10/share /mnt/win-share cifs username=user,password=pass,iocharset=utf8 0 0

这种写法重启后会碰到两类问题:

第一,网络栈还没就绪时,systemd就去挂载CIFS,结果因为目标网络不可达而失败。解决办法是在挂载参数里加_netdev,这个选项告诉systemd该文件系统依赖网络设备,需要等网络就绪后再挂载。

第二,开机挂载失败导致系统等待交互输入密码。解决方法是加nofail,让挂载失败不影响启动流程。

一个稳健的fstab条目长这样:

//192.168.1.10/share /mnt/win-share cifs credentials=/etc/samba/creds,uid=1000,gid=1000,iocharset=utf8,file_mode=0755,dir_mode=0755,_netdev,nofail 0 0

凭证单独放在/etc/samba/creds文件里,内容格式为:

username=xxx password=xxx domain=xxx

并且把creds文件权限改为600,避免明文密码暴露给其他用户。

uid=1000,gid=1000的作用是让挂载后的目录归属到普通用户,否则默认root所有,普通用户只能看不能写,跟上文VMware共享文件夹的权限问题一筹。

6.4 什么时候我应该仍然选VMware共享文件夹

说了这么多网络共享的优势,也要给VMware共享文件夹说句公道话。如果你是单机开发、测试环境,只有一台宿主机和一两台虚拟机,实在没必要为了传几个文件去维护一套SMB服务。VMware共享文件夹配置一次就能用很久,没有凭证过期,没有防火墙干扰,性能还好。

但如果你的环境里虚拟机要同时被多人访问、需要动态增删共享目录,或者宿主机本身不稳定(频繁重装系统),CIFS/SMB的集中式管理优势会逐渐体现出来。个人经验和项目阶段有关,没有绝对的最优选,根据"共享范围到底有多大、生命周期有多长"来判断就行。

我在实际配置中始终保留的底线是:宿主机上专门建立共享目录,无论走哪种协议,都不会把整个系统盘共享出去。这个习惯让我在后面的使用过程中少处理了非常多权限和误删的问题,值得所有看到这里的朋友参考。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询