1. 主机和虚拟机传文件,为什么总是绕来绕去
先说个最常见的场景:你电脑上装了个 Windows 11 作为宿主机,为了测试 Linux 环境或者跑一个干净的 Windows 7 老系统,开了个 VMware Workstation 虚拟机。系统装好之后第一件事就是往里拷文件,但你很快发现,直接拖拽拖不过去,U盘插上又不知道怎么让虚拟机读取,网上搜到的方法五花八门,有的让你开共享文件夹,有的叫你装 VMware Tools,还有的让你搭 FTP。结果试了一圈,要么虚拟机里看不到共享路径,要么提示没有权限。
其实这不是你操作有问题,而是虚拟机和主机之间的文件交换本来就有多种实现路径,每一条路径的适用场景、依赖条件、坑点都不一样。我日常工作里经常要同时维护几个虚拟机,Windows 的、Ubuntu 的、CentOS 的都有,文件共享这块算是踩遍了各种坑。这篇文章,我就把主机和 VMware 虚拟机之间共享文件的几种主流方式全部拆开讲清楚,包括每一步的操作、背后的原理、以及你大概率会碰到的报错和解决办法。
这篇文章适合所有在用 VMware Workstation 的人,不管你是刚装好虚拟机准备往里传安装包的新手,还是已经用了一段时间但经常被共享问题卡住的进阶用户,读完之后你至少能做到:心里有数该用哪种方式、手上有完整可执行的配置步骤、遇到报错知道从哪入手排查。
先说个底层逻辑:VMware 的虚拟机文件共享基本分成三类——第一类依赖 VMware Tools 提供的拖拽和剪贴板共享,这是最无感的体验;第二类是 Workstation 自带的 Shared Folders 功能,走的是 vmhgfs 内核模块,需要在虚拟机里装好对应驱动;第三类是走网络的 SMB 共享,本质上和两台物理电脑之间的局域网共享没有区别。三条路各有各的脾气,我下面一条一条给你捋。
2. VMware Tools 装好之后:拖拽复制与剪贴板共享的正确打开方式
2.1 为什么 VMware Tools 是共享文件的前置条件
很多人忽略了一件事:VMware Workstation 装好之后,虚拟机系统里默认是没有 VMware Tools 的。这不是 Workstation 安装包能自动帮你分发进去的功能,它需要你在虚拟机里单独执行安装,然后重启。VMware Tools 的作用不只是让屏幕自适应分辨率,它还在虚拟机里注册了一大堆驱动服务,其中就包括负责拖拽文件、共享剪贴板、以及后面要讲的 Shared Folders 的 vmhgfs 驱动。
所以判断一个虚拟机“能不能拖文件进进出出”,先看这台虚拟机的 VMware Tools 有没有装好。最简单的检验方式是看 Workstation 窗口右下角或者菜单栏,如果状态是“VMware Tools is running”,说明是正常的。如果没装,或者装到一半失败,那你后面做再多共享配置都是白搭。
2.2 安装 VMware Tools 的标准流程
这里以 Windows 主机 + Windows 虚拟机为例,Linux 虚拟机我会单独说。
第一步,先把虚拟机开机,进入系统桌面。
第二步,在 VMware Workstation 的菜单栏点“虚拟机”,在下拉菜单里找到“安装 VMware Tools”或者“重新安装 VMware Tools”。此时虚拟机会像一个光驱挂载了一个安装盘,你在虚拟机里打开“此电脑”,能看到一个 CD 驱动器,里面是 VMware Tools 的安装程序。
第三步,双击运行安装程序。这里有个细节需要注意:安装类型建议选择“典型安装”就行,完全足够共享文件使用,不需要自定义,除非你很清楚自己要调整哪些组件。
第四步,等安装进度走完之后,提示重启虚拟机,选择“是”。重启系统后,VMware Tools 状态就会变成运行中。
装完之后,你就可以试试直接把主机里的文件拖拽到虚拟机窗口里,或者反向从虚拟机拖到主机桌面。你会发现文件直接出现在对方系统的下载目录或桌面上,非常方便。
2.3 Linux 虚拟机安装 VMware Tools 的差异
如果你的虚拟机装的是 Ubuntu 或者其他 Linux 发行版,安装路径略有不同。同样是在菜单栏选择“安装 VMware Tools”,然后虚拟机里会多出来一个光盘设备。这个光盘里是一堆 tar.gz 压缩包和安装脚本,没有现成的 .exe 可双击。你需要把 VMwareTools-X.X.X-XXXX.tar.gz 压缩包拷贝到一个可写的目录,然后解压。
比如在 Ubuntu 里操作:
cd /tmp tar -zxvf /media/cdrom/VMwareTools-10.3.25-20206839.tar.gz cd vmware-tools-distrib sudo ./vmware-install.pl安装过程中会问你几个问题,一路回车用默认值就行。装完之后重启,VMware Tools 才生效。
不过这里要插一句,现在很多 Linux 发行版也可以不求人,直接在终端执行:
sudo apt install open-vm-tools open-vm-tools-desktopopen-vm-tools 是 VMware Tools 的开源版本,效果和官方工具基本一致,而且在 Ubuntu 的软件源里就有。如果你的虚拟机里装了它,同样能获得拖拽复制和共享文件夹的能力,还省去了解压编译的麻烦。我自己在 Ubuntu 虚拟机里用的就是 open-vm-tools,特别省事。
2.4 拖拽不起作用的排查思路
装完 VMware Tools 之后拖拽还是没反应,这种情况我也没少见。常见的几个原因如下:
打勾检查的思路是:在 Workstation 菜单栏点“虚拟机”,再点“设置”,切到“选项”选项卡,找到“客户机隔离”,确认“启用拖放”和“启用复制粘贴”这两个复选框都已经勾上。这一步很多人会忽略,VMware Workstation 默认虽然勾了,但如果你是从旧版本升级过来的,或者导入过别人的虚拟机配置,这里有可能被改掉。
另外还要注意:Linux 虚拟机里拖拽功能依赖 open-vm-tools-desktop 这个包。如果你只装了 open-vm-tools 而没有装带 desktop 后缀的包,共享文件夹功能正常,但拖拽和剪贴板共享是不生效的。这个坑非常隐蔽,建议你如果发现自己 Linux 虚拟机不能拖拽文件,先检查一下 dpkg -l | grep open-vm-tools,看看 desktop 包装没装。
3. 共享文件夹功能详解:hgfs 挂载的配置步骤与路径规则
3.1 从界面配置一个共享文件夹
拖拽适合临时传几个小文件,但如果你的虚拟机要长期访问主机上的某个项目目录,比如本机代码仓库,虚拟机里直接读取同一份文件,那拖拽复制就不合适了,你得用 VMware 的共享文件夹功能。
这个功能说白了,就是 VMware 在虚拟机里虚拟出一个网络文件系统,底层由 VMware Tools 的 vmhgfs 驱动承载。你在主机上指定一个目录,虚拟机的系统里就能通过一个固定的路径访问它。
配置方法如下:
第一步,确保虚拟机关机或者至少是运行中状态(运行中也能改,改完立即生效一部分,但为了稳妥,我先说关机状态下的操作)。
第二步,在 Workstation 菜单栏点“虚拟机”,点“设置”,切到“选项”选项卡,找到“共享文件夹”。
第三步,选择“总是启用”。
第四步,点“添加”,弹出一个引导窗口。这里指定主机上的一个文件夹路径,比如 D:\VMShared,然后给这个共享起个名字,比如叫 share。这一步的名字后面会用到,建议用简单英文。
第五步,勾选“启用此共享”,确定保存。
完成配置之后,Windows 虚拟机里访问 \vmware-host\Shared Folders\share,Linux 虚拟机里访问 /mnt/hgfs/share,就能看到主机 D:\VMShared 里的文件了。
3.2 Windows 虚拟机里的访问细节
Windows 虚拟机访问共享文件夹,有两种办法。第一种是打开“此电脑”,在地址栏输入 \vmware-host\Shared Folders\share 回车。第二种是在文件资源管理器左侧的“网络”下面,可能直接能看到 Shared Folders 这个入口,点进去就行。
为了每次不用敲地址,我建议你右键这个路径,选择“映射网络驱动器”,给它分配一个盘符,比如 Z 盘。这样一来,虚拟机的 Z 盘直接指向主机的 D:\VMShared,两边改文件互相实时可见。
实测过程中,如果你用的是 Windows 7 虚拟机,偶尔会遇到 \vmware-host\Shared Folders 打不开的情况,这大概率是 VMware Tools 的共享服务没起干净,或者驱动有问题。可以先卸载重装 VMware Tools 试一下,再不行就把共享文件夹配置重新添加一次,通常能好。
3.3 Linux 虚拟机里 /mnt/hgfs 看不到共享目录怎么解决
Linux 虚拟机里默认的挂载点是 /mnt/hgfs。如果你配置好了共享文件夹,进入 /mnt/hgfs 却什么都没看到,大概率是 VMware Tools 的 vmhgfs-fuse 挂载过程出了问题。
这里区分一下:如果你是直接用官方 VMware Tools 安装的,系统一般会自己管理挂载,但是新版本的 Ubuntu 更常用 open-vm-tools,挂载动作依赖 vmhgfs-fuse 这个组件。如果你装的是带 desktop 的 open-vm-tools 还看不到,可以先手动挂载一下试水:
sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000如果这个命令执行完,/mnt/hgfs 就能看到 share 目录了,说明问题出在开机自动挂载环节。你需要检查 /etc/fstab 或者 systemd 服务,让每次开机自动执行挂载。
我在 Ubuntu 22.04 里就是这么干的,直接在 /etc/fstab 里加一行:
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0然后执行 sudo mount -a 验证,重启后共享目录也能自动挂上。
3.4 共享文件夹和拖拽到底该用哪个
我用下来的体感是这样的:传小文件、临时拷个截图、复制一段文本,用拖拽和剪贴板,因为不用走网络不占地;长期挂载目录、开发调试、需要虚拟机直接修改主机文件,用共享文件夹。共享文件夹的性能比拖拽高太多,拖拽本质上是把文件复制一份到对方的文件系统里,如果你拖一个几个 G 的压缩包,整个过程会卡住,而且中间一旦失败你还不知道哪个文件少了。共享文件夹则不存在这个问题,虚拟机和主机访问的是同一份数据。
4. SMB 网络共享:主机开共享、虚拟机访问的完整链路
4.1 为什么要用 SMB 这条“笨办法”
如果你只用过 VMware 自带的共享文件夹,可能觉得没必要再搞一个 SMB,但现实场景里有些情况还真的绕不开 SMB。比如你用的是精简版的 Windows 虚拟机,VMware Tools 装不上,拖拽和共享文件夹全部失效;又比如虚拟机里跑的是某些精简 Linux,vmhgfs 模块编不过去;还有你需要在虚拟机和主机之间传大文件,但不想占双倍磁盘空间,共享文件夹本来就满足这个需求,不过如果你的 VMware Tools 坏了,临时急用的时候 SMB 就是个救急方案。
另外 SMB 这个思路也不挑虚拟化平台。你今天在 VMware 里用 SMB,明天换成 VirtualBox,后天换到 Hyper-V,甚至从虚拟机换成物理机、换成手机访问电脑文件,这个技能都是通用的。学一次,长期受益。
4.2 宿主机端配置共享文件夹
以 Windows 11 宿主机为例,我现在要把 D 盘根目录下的 ProjectFiles 文件夹共享给虚拟机。
右键这个文件夹,选“属性”,切到“共享”选项卡,点“共享”按钮,在用户列表里选“Everyone”,给它至少“读取/写入”权限。这里注意,如果你只给了读取权限,虚拟机里就只能读不能写,很多场景会不够用。
然后在“高级共享”里勾选“共享此文件夹”,共享名保持默认或者改成一个简单名字,比如 ProjectFiles。再点“权限”,确认 Everyone 有完全控制权限。
Windows 宿主机还有一个防火墙关卡:Windows Defender 防火墙默认可能会拦截 SMB 端口的入站连接。你需要在“允许应用通过防火墙”里确认“文件和打印机共享”前面的复选框是打钩状态。不然你虚拟机那边怎么都连不上,网络是通的,但端口进不来。
有些人在配置 SMB 共享的时候会遇到一个问题:共享文件夹设置完了,但从虚拟机访问提示“无法访问,你可能没有权限使用网络资源”。这个往往是宿主机上启用了“密码保护共享”,你连接的时候需要提供用户名密码,而你没有提供正确的凭据。最简单的办法是在“控制面板 - 网络和共享中心 - 更改高级共享设置 - 所有网络”里,把“密码保护的共享”关掉。这样你虚拟机连过来就免密了,特别省事。
4.3 虚拟机里访问主机的共享文件夹
Windows 虚拟机访问主机共享,打开“此电脑”,在地址栏输入 \宿主机IP\ProjectFiles。宿主机 IP 是多少?在宿主机命令提示符里执行 ipconfig,找活动的网卡 IPv4 地址。
这里要注意一个 VMware 网络模型的细节:如果你的虚拟机网卡选的是 NAT 模式(VMnet8),宿主机 IP 一般是 192.168.xxx.1,虚拟机的 IP 是同一网段的 192.168.xxx.xxx;如果选的是桥接模式(VMnet0),那虚拟机就像局域网里的一台独立电脑,直接用你局域网里宿主机获得的那个 IP 就行。不管哪种模式,关键是两个系统之间网络是互通的。
Linux 虚拟机访问 Windows 共享更简单,Ubuntu 的文件管理器里,点左侧“Other Locations”,然后在底部“Connect to Server”输入: smb://宿主机IP/ProjectFiles
回车后会要求输入用户名和密码。如果你关了宿主机密码保护共享,通常是一个访客登录窗口,直接回车或者输入 anonymous 就能进去。
我实测下来,Ubuntu 通过 smb 协议访问 Windows 共享文件夹的体验比想象中稳定,传输速度能达到几十兆每秒,和共享文件夹差不多,文件大一点也没太大感觉。
4.4 SMB 共享的优势和劣势
SMB 最大的优势是通用性极强,但它的配置链路更长,宿主机一个环节没配好,虚拟机就访问不了。排查起来也比 VMware 自带的共享文件夹麻烦,因为你得检查网络连通性、防火墙、共享权限、凭据设置好几个点。所以我不建议你把这当成唯一方案,而是要跟前面两种 VMware 原生方案结合使用。
5. 共享失效排查手册:拖拽失灵、文件夹不显示、权限报错的根因
5.1 完整还原一次排查过程
我拿自己帮一个朋友解决的问题举例,这个案例特别典型。对方的场景是 VMware Workstation 17 里跑 Ubuntu 22.04 虚拟机,之前拖拽文件都正常,某天开始突然不能从主机拖文件进去了,共享文件夹也访问不了。朋友第一反应是重装 VMware Tools,结果安装过程还报了个错:vmhgfs 模块编译失败。
后来我远程帮他排查,一步步理下来:
第一步,确认虚拟机里的 VMware Tools 服务状态。执行: systemctl status vmware-tools 发现服务在 running。
第二步,查看 /mnt/hgfs 目录是否存在,里面是否为空。 发现目录存在,但 ls 之后是空。
第三步,尝试手动挂载 vmhgfs-fuse,发现报错 “fuse: device not found, try ‘modprobe fuse’ first”。到这里基本锁定了问题:内核模块 fuse 没有加载。
第四步,执行 modprobe fuse 加载 fuse 模块,再挂载一次,/mnt/hgfs 里的共享目录就出现了。
根因其实很简单:fuse 内核模块因为某种原因没有被加载。这是系统级的问题,不属于 VMware 的 bug。而重装 VMware Tools 之所以报编译失败,也是因为编译过程中需要用到内核对应的头文件,而那头文件跟当前内核版本对不上,属于另一个衍生问题。
最后我给的建议是执行: sudo apt install --reinstall open-vm-tools open-vm-tools-desktop 重启虚拟机,彻底解决。
这个案例说明一个道理:共享文件夹失效,别一上来就怀疑 VMware,先查系统底层模块和服务,很多坑都在那里。
5.2 几个高频报错的速查表
| 现象 | 最可能原因 | 解决办法 |
|---|---|---|
| 拖拽文件到虚拟机没反应 | VMware Tools 未安装或客户机隔离未勾选 | 安装 VMware Tools,检查“启用拖放” |
| Linux 虚拟机 /mnt/hgfs 为空 | vmhgfs-fuse 未挂载或 fuse 模块未加载 | 手动执行 vmhgfs-fuse 命令,modprobe fuse |
| 共享文件夹名称变了之后访问失败 | 共享名和访问路径不一致 | 统一共享名,访问 /mnt/hgfs/共享名 |
| Windows 虚拟机访问 \vmware-host 报网络路径错误 | VMware Tools 的 HGFS 服务异常 | 重装 VMware Tools,重启虚拟机 |
| SMB 访问主机提示无权限 | 密码保护共享开启或 Everyone 未添加 | 关闭密码保护共享,添加 Everyone |
| SMB 连接超时 | 防火墙拦截 445 端口 | 加防火墙放行“文件和打印机共享” |
5.3 如何避免共享文件之后虚拟机卡顿
还有一个很多人问的问题:共享文件夹里文件太多,虚拟机会不会卡?
答案是不会一直都卡,但确实有个别场景会造成性能问题。比如虚拟机里某个程序监控着共享文件夹里的所有文件变化,文件一多,虚拟机和宿主机之间会反复产生大量元数据请求,这时候会出现明显卡顿。解决办法是在共享文件夹里不要直接放海量小文件,尤其是编译产物、日志文件这类会频繁变动的。真要放,就单独放到宿主机本地,需要的时候再拷进来。
我自己平时做开发,共享文件夹只放源文件,编译输出目录和依赖目录都映射到虚拟机本地磁盘,这样既保证了编辑的同步,又避免了一编译就卡死的尴尬。
6. 几种共享方式到底怎么选:按场景对号入座
6.1 一句话总结各自定位
到这里,三种方式都讲完了。我用自己的使用习惯帮你梳理一下怎么选:
临时拷个小文件、复制一段代码,用拖拽复制。装好 VMware Tools 或者 open-vm-tools 就能用,无脑、快,适合一切琐碎场景。
虚拟机要长期访问主机某个目录,比如代码仓库、素材库、资料归档,用共享文件夹。它走的是虚拟化底层转发,不占用物理网络带宽,性能稳定,而且不用配置一堆权限和防火墙,是我日常用得最多的方案。
碰到 VMware Tools 坏了、虚拟机是精简版系统、或者想用通用技能覆盖其他虚拟化平台和物理设备,用 SMB 共享。它虽然配置麻烦一点,但底层原理和你平时在局域网里共享文件完全一致,一通百通。
6.2 我推荐的终极配置组合
如果你是 Windows 宿主机 + Ubuntu 虚拟机 + VMware Workstation 17 这个组合,我建议你按下面这套配置一次性做完:
- 虚拟机里装上 open-vm-tools 和 open-vm-tools-desktop
- 用共享文件夹把主机上的一个专门的数据目录映射到 /mnt/hgfs/data
- 把常用的 SMB 共享目录也添加上,作为备用
- 大文件传复用共享文件夹,日常编辑拖拽用桌面交互
这套组合能让你在绝大多数情况下不再被传文件这件事困扰。哪怕某天共享文件夹服务突然出问题,你还有两条退路,不至于卡在原地。
6.3 最后分享一个不太容易被注意到的小技巧
如果你经常在主机和 Windows 虚拟机之间传文件,又嫌桌面拖拽出来的文件会直接落到“下载”目录不好找,其实你可以直接在文件资源管理器里把主机磁盘映射进虚拟机,使用 \vmware-host\Shared Folders 的方式访问时,右键“映射网络驱动器”,这样你就有了一个固定的盘符。以后传文件把东西丢进这个盘符映射的目录就行,目录结构、文件位置永远清清楚楚。
这个习惯我一直保持到现在,对于频繁在主机和虚拟机之间协作的人来说,比什么都方便。
6.4 需要注意的版本差异
最后提一嘴版本问题。我用的是 VMware Workstation Pro 17,界面和菜单路径跟老版本有一点点区别,比如老版本里“共享文件夹”可能在虚拟机的右键菜单里进去,而新版本统一在虚拟机设置的选项选项卡里。但核心概念没变:VMware Tools 决定拖拽和剪贴板,Shared Folders 走 vmhgfs,SMB 走网络。你不管用哪个版本,把握住这三条主线就不会乱。
另外,VMware Workstation Pro 现在个人用户已经可以免费使用了,如果你还在用老版本,可以考虑升级到 17,整体稳定性和对新系统的兼容性都好很多,至少我遇到的一大堆 Ubuntu 新内核下的共享问题,在 17 上都很少再出现。