1. 先说结论:为什么共享文件夹方案最省心
装了 VMware Workstation 跑 Ubuntu 的朋友,多半会卡在一个很日常的需求上:Windows 里的文件怎么方便地给虚拟机里的 Ubuntu 用。有人第一反应是用 U 盘拷贝,有人拖拽文件直接拖过去,也有人开个 FTP 服务慢慢传。这些办法都能用,但效率属实不太行——U 盘插拔麻烦,拖拽偶尔会把文件拖坏,FTP 还得配服务端,每次传完还要手动清理。
共享文件夹解决的就是这个痛点。它能把 Windows 的某个目录直接映射到 Ubuntu 里,比如你在 Windows 的D:\share放个压缩包,Ubuntu 里打开/mnt/hgfs/share就能直接看到、解压、修改,双向实时同步,不需要任何拷贝动作。对经常在 Windows 和 Ubuntu 之间倒腾代码、安装包、文档的人来说,这是最贴近“本地磁盘”体验的方案,也是共享文件夹设置这组关键词被搜得最多的原因。
这篇教程基于 VMware Workstation Pro 17 和 Ubuntu 22.04/24.04 环境,全程用图形界面加终端命令结合的方式讲解。目标很明确:让从没配过共享文件夹的新手,跟着步骤走完一遍就能用上。我会把每一步背后的原因、常见的坑、排查思路都摊开讲,而不是扔给你一段命令就完事。我实际操作中踩过不少坑,比如 Tools 装完共享目录不显示、挂载后没有写权限、开机重启之后配置失效等,这些问题在官方文档里大多一笔带过,但恰恰是新手最容易卡住的地方,所以这篇会把它们全部处理干净。
2. 动手前的准备:三种方案对比与版本选择
2.1 先搞清楚你到底需要哪种共享方式
在开始配置之前,建议先花一分钟确认自己的需求,因为“共享文件”这事儿在虚拟化环境里至少有三种常见做法,实际效果差别很大。
第一种是 VMware 自带的拖拽复制(Drag and Drop)。这个看着最直接,但限制也多:两个系统之间拖文件偶尔会丢、大文件容易中断,而且它只能传文件,不能作为持续共享的目录。你不可能把整个项目文件夹拖进去然后两边同时改,它本质就是一次性的文件传输。
第二种是网络共享,比如在 Windows 里开共享文件夹,Ubuntu 里通过 SMB/CIFS 协议访问。这个方案的好处是不依赖 VMware,走局域网协议,性能稳定,但需要你知道 Windows 的 IP、设置共享权限、处理用户名密码,配置链路比较长,对小项目来说偏重了。
第三种就是本教程主角:VMware 的 Shared Folders(HGFS 文件系统)。它由 VMware Tools 提供支持,把宿主机目录直接“塞”进虚拟机,虚拟机里的人感知不到网络的存在,就像插了一块本地硬盘。它的特点是配置快、路径直观、双向实时同步,缺点是只能在 VMware 里用,换个虚拟化平台就得换方案。
我的建议很直接:日常开发、拷贝安装包、共享配置目录,优先用 VMware 共享文件夹;如果你确实需要高性能的文件服务,比如数据库文件直接放在共享盘上,那再考虑 SMB 网络共享。后面的内容全部围绕第三条路线展开。
2.2 VMware Workstation 版本与 Ubuntu 镜像选择的注意事项
版本方面,VMware Workstation Pro 从 16 到 17 的共享文件夹功能基本没有太大的操作变化,甚至 15 的旧版本也能参考。但如果你的 Workstation 还是 15 或者更老的版本,强烈建议先升级到 17,因为新版自带的 VMware Tools 组件对新版内核的 Ubuntu 兼容性明显更好,在 Ubuntu 22.04 以上系统里,老版本 Tools 经常出现装不上、加载失败的问题,排查起来非常头疼。我这边实测的版本是 VMware Workstation Pro 17.6,Ubuntu 是 22.04 LTS,这套组合很稳定。
Ubuntu 版本方面,22.04 LTS 和 24.04 LTS 都没问题。不过要注意一点:如果你装的是 Ubuntu Server(纯命令行无桌面环境),共享文件夹配置成功后在文件管理器里看不到图标,只能用命令挂载,这个后面会讲;如果你用的是 Ubuntu Desktop,图形界面下打开“其他位置”就能直接看到。
另一个容易忽略的点:虚拟机创建时选择客户机操作系统类型会影响默认配置。在新建虚拟机向导里,如果客户机类型选错了(比如选了 Ubuntu 64 位但实际装的是 32 位系统),VMware Tools 安装会失败或功能异常。装系统之前先确认镜像架构,现在主流都是 amd64,在向导里选 Ubuntu 64-bit 就好。
3. 踩坑预警:新手最容易犯的三个错误
配置共享文件夹这个需求本身不难,但我在各社区里看到过大量求助帖,仔细归纳下来,新手几乎都栽在下面这三个问题上。事先知道这些坑,你就能省掉至少半小时的折腾时间。
第一个坑:装了 VMware Tools 但什么都没发生。很多人第一步就知道要装 Tools,装完重启后去共享文件夹设置里添加目录,进 Ubuntu 一看路径却是空的。这不是配置错了,而是 Ubuntu 桌面版装了 Tools 后不会自动挂载共享文件夹,必须手动挂载或者改自动挂载配置。你在网上搜到的教程如果只说“装好 Tools 就能用”,那基本就是没写完整。
第二个坑:装了 open-vm-tools 导致 VMware Tools 冲突。Ubuntu 的软件源里自带 open-vm-tools,有些教程会建议你直接sudo apt install open-vm-tools。这句话没错,但前提是你在 VMware 里用的是桌面包open-vm-tools-desktop。而且如果你先装了官方 VMware Tools,再装 open-vm-tools,两者会打架,共享文件夹功能直接失效,重启后还可能进不了图形界面。关于官方 Tools 和 open-vm-tools 的选择,我后面单独说。
第三个坑:Windows 共享目录名不要用中文。VMware 在配置共享文件夹时,如果路径或共享名包含中文,部分版本会出现挂载失败或挂载后目录为空的问题。虽然新版本有所改善,但为了不给自己添堵,建议共享目录和共享名称都用英文,Windows 这边的父路径也不要带中文,比如放在D:\vm_share而不是D:\虚拟机共享。
记住这三点,接下来的操作就顺畅多了。
4. 核心步骤:三步配置 Windows 与 Ubuntu 共享文件夹
4.1 第一步:确认 VMware Tools 就位
在配置共享目录之前,必须先确保 VMware Tools 正常工作。你可以通过下面的方式检查:
在 Ubuntu 虚拟机里打开终端,执行:
vmware-toolbox-cmd --version如果返回了版本号,说明 Tools 已经装好。如果没有这个命令,就说明系统里缺少 VMware Tools 或 open-vm-tools,需要先安装。这里有个分岔口,取决于你的 Ubuntu 环境。
如果是最小化安装的 Ubuntu Server(没有桌面环境),直接用命令装 open-vm-tools 就好:
sudo apt update sudo apt install open-vm-tools -y如果是 Ubuntu Desktop(有 GNOME 桌面),推荐安装带桌面支持的 open-vm-tools-desktop:
sudo apt update sudo apt install open-vm-tools-desktop -y很多人会问,为什么不用 VMware 菜单里的“安装 VMware Tools”?我的建议是优先用 open-vm-tools,因为 Ubuntu 官方仓库里的版本会跟随系统内核更新,兼容性更好,不需要每次内核升级后重新安装。而 VMware 自带的 Tools ISO 安装包在 Ubuntu 新内核上偶尔会有编译失败或模块加载失败的问题。如果你已经装了官方 Tools,也可以保留,只要能正常工作就行,不用刻意卸载,但因为两种 Tools 的服务会冲突,所以通常情况下建议使用 open-vm-tools 然后卸载官方的:
sudo vmware-uninstall-tools.pl这个脚本路径可能存在差异,找不到的话可以跳过,直接确认服务状态:
systemctl status open-vm-tools看到 active(running)说明服务正常。这一步做完,共享文件夹的基础设施就算打好了。
4.2 第二步:在 VMware 里添加共享文件夹
这一步在 Windows 宿主机上操作。先确保 Ubuntu 虚拟机处于关机状态或者至少处于运行状态都可以,但建议关机状态下操作,避免一些设置不生效的情况。
打开 VMware Workstation,选中你的 Ubuntu 虚拟机,点击菜单栏的“虚拟机”->“设置”,在弹出的虚拟机设置窗口里切换到“选项”选项卡。
在左侧列表里找到“共享文件夹”,右侧默认是“已禁用”,把它改成“始终启用”。然后点击“添加”按钮,进入添加共享文件夹向导。
向导第一步让你输入共享文件夹名称,这个名称是显示在 Ubuntu 里的目录名,建议用简单英文,比如share,或者workspace。第二步选择 Windows 宿主机上要共享的目录路径,我建议先在 Windows 里建好一个专门目录,比如D:\vm_share,里面放你需要共享的文件。
第三步设置权限,有两个选项:只读和读写。日常使用选“启用此共享”并勾上读写权限。设置完后点击“完成”,回到虚拟机设置窗口能看到共享列表里多了一条记录,再确认“始终启用”是选中的,点“确定”保存。
到这里,VMware 侧的配置就完成了。如果你用的是 VMware Workstation Player(免费版),操作路径略有不同,需要在虚拟机设置里找“Options”->“Shared Folders”,Player 版本较老的可能没有这个选项,那就只能用网络共享替代了。
4.3 第三步:在 Ubuntu 里手动挂载并验证读写
VMware 侧配置好之后,回到 Ubuntu 虚拟机。如果你装的是带桌面的 Ubuntu,重启一下虚拟机通常能在文件管理器左侧栏看到共享目录(部分版本会自动出现,部分不会)。如果没出现,不用慌,手动挂载总共就三行命令。
打开终端,执行:
sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000第一条命令是创建挂载点目录,/mnt/hgfs是 VMware 约定俗成的挂载位置。第二条命令用 vmhgfs-fuse 把宿主机共享根目录挂载到/mnt/hgfs。其中.host:/表示宿主机上所有共享的根路径,挂载后你会在/mnt/hgfs下看到 Windows 里配置的共享名,比如/mnt/hgfs/share。
-o uid=1000是把挂载后的文件属主设置成当前用户(通常 Ubuntu 第一个用户的 uid 就是 1000),不然挂载后你会发现自己没有写入权限,只能读不能写。-o allow_other允许其他用户访问,如果不加,文件管理器可能因为权限问题打不开目录。
挂载完成后验证一下:
ls /mnt/hgfs/能看到share目录,说明共享根目录挂载成功了。再试读写:
echo "test" > /mnt/hgfs/share/test.txt cat /mnt/hgfs/share/test.txt如果文件能写入并能读出来,那恭喜,共享文件夹已经全部打通。
有个值得注意的地方:如果我们不指定 uid,新版 vmhgfs-fuse 默认会把挂载目录的属主设为 root,普通用户进去就是“权限不够”或者“只读文件系统”。我见过太多人挂在权限这一步,实际上加一个-o uid=1000就完事了,后面也会专门讲这个问题。
5. 进阶配置:开机自动挂载与权限问题彻底解决
5.1 通过 /etc/fstab 实现开机自动挂载
每次重启虚拟机都要手动敲两行命令,虽然不麻烦,但容易忘。更优雅的做法是把挂载配置写进/etc/fstab,让系统开机自动挂载。
编辑 fstab 文件:
sudo nano /etc/fstab在末尾添加一行:
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000,defaults 0 0各字段的含义:
.host:/:远程共享根路径,和手动挂载时一致/mnt/hgfs:本地挂载点fuse.vmhgfs-fuse:文件系统类型,注意不是普通的 ext4,而是 FUSE 实现的 vmhgfsallow_other,uid=1000,gid=1000:挂载参数,允许其他用户访问,并将文件所有权映射到 uid 1000
保存退出后,先执行sudo mount -a测试一下配置是否正确。如果没有报错,再重启一次虚拟机确认自动挂载生效。如果重启后ls /mnt/hgfs还是空的,大概率是 fstab 里的参数写得不对,或者缺少 fuse 包。
这里提醒一下,修改 fstab 是有点风险的。如果格式写错,开机时可能会卡在挂载步骤,甚至无法进入系统。所以写完后一定要先跑mount -a验证,而不是直接重启。万一真的出了问题起不来,可以在 GRUB 引导时进入 recovery mode,把 fstab 里的错误行注释掉。
5.2 权限问题的原理与三种解决方式
共享文件夹的权限是新手最容易困惑的地方,因为它的表现很奇怪:目录能看到但写不了,或者挂载后所有文件都显示 root 所有,没有任何用户能改。要理解这个问题,得先知道 vmhgfs-fuse 和传统文件系统的区别。
普通本地磁盘读写走内核文件系统,权限由文件的 uid/gid 决定,谁拥有谁操作,清清楚楚。而共享文件夹走的是 FUSE(用户态文件系统),宿主机端 Windows 的文件权限和客户端 Linux 的权限模型不一样,FUSE 层需要决定“Linux 里的这个文件以什么身份去访问 Windows 文件”。如果不手动指定,挂载时默认的 uid 是 root,那么普通用户 eric 访问这个目录时,内核一看文件属于 root,直接判没有写权限。
解决方式有几种,我按推荐程度排个序:
最省心的办法,就是在挂载时直接指定当前用户的 uid/gid,也就是我们前面用的:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o uid=1000,gid=1000如果要让多个用户都能访问,可以在挂载参数里加allow_other,然后用默认 root 挂载,再对子目录单独授权:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other sudo chown -R 用户名:组名 /mnt/hgfs/share但要注意,chown改的是挂载视图里的属主记录,Windows 那边的文件本身没变,这个操作对同一个共享目录来说可以持续生效。
还有一个方案适用于要写权限但不关心属主显示的情况:直接给共享文件夹的 Windows 侧目录加上 Everyone 写权限,然后在挂载参数里不指定 uid,而是用umask=000让所有文件都可读写:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o umask=000这个方案权限最松,适合自己用的个人虚拟机,不适合生产环境,也不适合多人共享的场景。
我比较推荐的组合是:单用户使用选uid=1000,gid=1000,多用户使用选allow_other加chown指定目录。权限这个东西,宁可开得保守一点,也不要图省事把整个挂载点弄成 777,等出了问题再回溯权限配置,代价更大。
5.3 解决“挂载成功但文件夹为空”的隐藏问题
除了权限之外,还有一个问题很隐蔽:共享文件夹挂载成功,/mnt/hgfs下面确实列出了共享名,但进目录一看是空的,Windows 那边的文件一个都看不见。
这种情况八成和 Windows 宿主机目录权限或路径有关。先检查共享路径是不是真实的物理路径而不是网络映射盘。比如 Windows 里把文件放在某个 NAS 的映射盘符Z:\上,然后把Z:\share作为共享文件夹路径传给 VMware,极大概率挂载成功但内容是空的。原因很简单,VMware Tools 服务运行在 SYSTEM 账户下,并没有你当前用户挂载的网络驱动器访问权限,所以虚拟机里看到的就是个空壳。解决办法是把文件挪到本地磁盘(C 盘、D 盘等物理盘符)再共享。
还有一个可能是共享目录路径里有隐藏字符或特殊符号,比如后置空格、全角括号,这类路径 VMware 不报错,但挂载后就是空的。建议把路径改成纯英文、无空格、无特殊符号的简单路径,比如D:\vm_share,从根上避免问题。
6. 日常使用中的常见问题与排查速查表
我把实际使用中频率最高的问题整理成一个速查表,你遇到类似现象时直接对号入座。以下问题都是我或身边同事真踩过的坑,不是从文档里抄来的通用问答。
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
挂载时报fuse: mount failed: No such file or directory | 挂载点/mnt/hgfs不存在 | 先sudo mkdir -p /mnt/hgfs再挂载 |
| 挂载成功但 ls 为空 | Windows 共享路径是网络盘/映射盘,或者路径含特殊字符 | 改成物理盘符,路径简化成纯英文无空格 |
目录能看到但写入报错Permission denied | 挂载时未指定 uid/gid | 挂载参数加-o uid=1000,gid=1000 |
开机后/mnt/hgfs下没有共享目录 | fstab 未配置或配置有误 | 检查 fstab,执行sudo mount -a验证 |
| 重启后进不了图形界面,卡在登录循环 | open-vm-tools 与官方 VMware Tools 冲突 | 进入 recovery mode,卸载其中一个 Tools 包 |
| Ubuntu 里共享文件的中文文件名乱码 | 挂载参数缺少字符集设置 | 部分新版本已修复,仍出现可尝试-o iocharset=utf8 |
| 复制大文件时进度条卡住不动 | 宿主机磁盘 IO 慢或共享目录位于机械硬盘 | 把共享目录移到 SSD 分区,复制时避免同时跑多个大任务 |
| 虚拟机设置里“共享文件夹”选项是灰色的 | 虚拟机未安装 VMware Tools 或系统列表类型不匹配 | 先装好 open-vm-tools,确认客户机系统类型正确 |
这里多说一句字符集的问题。早期版本的 vmhgfs 在中文文件名上确实有乱码,好在 Ubuntu 22.04 以上的新版本默认 UTF-8,基本不太会遇到。如果你还在用老版本,挂载参数里加iocharset=utf8可以缓解。
另外,如果你共享目录里放的是代码项目,建议在 Windows 侧用 VS Code 或 NotePad++ 编辑时统一把换行符和编码设置成 UTF-8 无 BOM。Linux 对 BOM 太敏感,自己写的文件没事,别人发过来的文件如果有 BOM,程序运行时第一行可能会报错找不到模块,这是个很隐蔽的坑。共享文件夹本身没错,错的是文件内容格式,但排查起来很容易被误判成共享配置问题。
7. 为什么我推荐 open-vm-tools 而不是自带 VMware Tools
7.1 两者的本质区别与适用场景
很多教程让你从 VMware 菜单里点“安装 VMware Tools”,然后挂载 ISO 解压安装。这是个经典路径,但放在今天的 Ubuntu 版本里不是最优解。
自带 VMware Tools 是一个二进制安装包,由 VMware 发行,需要在客户机里执行vmware-install.pl,之后在/usr/lib/vmware-tools下驻留服务。它的问题是:Ubuntu 内核每次升级,相关的内核模块可能需要重新编译一次,否则 Tools 功能会失效。在 Ubuntu 22.04 这种滚动升级比较频繁的系统上,这是个持续的维护负担。
open-vm-tools 则是 VMware 开源的 Tools 版本,已经直接放进 Ubuntu 官方软件源,和系统内核同步维护。你只需要apt install open-vm-tools,之后内核升级时会自动重建模块,不用手动干预。桌面版再用open-vm-tools-desktop启动图形界面相关的增强服务(比如分辨率自适应、剪贴板共享)。
一句话总结:新装虚拟机,无脑用 open-vm-tools;如果你已经装了官方 Tools,也能正常运行,那就不用折腾,稳定优先。
7.2 装错包导致登录循环的修复记录
我自己就遇到过一次 open-vm-tools 与官方 Tools 并存导致的登录循环。当时是在 Ubuntu 22.04 里先用 VMware 菜单装了官方 Tools,后来想换 open-vm-tools 就没先卸载,直接apt install open-vm-tools-desktop,结果重启后卡在登录界面,输密码后黑屏一秒又弹回登录页,完全进不去桌面。
原因是两个 Tools 的显示驱动和 session 管理服务冲突,导致桌面会话反复崩溃。修复步骤供参考:
开机后在 GRUB 菜单选“Advanced options for Ubuntu”,进入 recovery mode,选择 root shell 选项,然后执行:
mount -o remount,rw / apt remove open-vm-tools-desktop open-vm-tools apt install open-vm-tools-desktop reboot恢复之后,务必确认官方 Tools 的残留服务是否停掉了:
systemctl list-units | grep vmware如果还有以 vmware 开头的服务在运行,用systemctl disable --now关掉对应服务。干净之后共享文件夹功能就恢复正常了。
这事的教训是:别在系统正常运行的时候同时装两套 Tools。方案只能选一个。推荐先装 open-vm-tools,官方 Tools 能不装就不装。
8. 按个人经验整理的最佳实践
这套共享文件夹配置,我用在各种环境里少说也有几十次了。下面这几条是我总结出来的最佳实践,不一定每条都写在官方文档里,但都经过反复验证,能帮你少走弯路。
第一,Windows 侧单独建一个共享专用目录,不要直接共享整个盘或桌面。把整个 D 盘共享出去,看着方便,但虚拟机里能看到宿主机所有文件,万一误操作删了东西,找都找不回来。正确做法是准备一个D:\vm_share这样的专用目录,需要共享的内容复制进去,用完可以随时清理。
第二,大文件传输优先用共享,小文件用剪贴板。如果你剪贴板共享是开着的,复制一小段文本或者一两个小文件,直接在两个系统间 Ctrl+C、Ctrl+V 最快。但涉及几百 MB 的 ISO、压缩包,共享文件夹传输更稳定,不容易因为剪贴板内容体积过大而崩溃。
第三,共享目录里不要直接跑数据库或者版本控制仓库。HGFS 的 IO 性能比虚拟磁盘差一个档次,在共享文件夹里跑git status或者 MySQL 数据文件,整个操作会明显变慢。共享文件夹只适合“传文件”和“查看编辑小文件”,不适合“运行重型服务”。需要这种场景时,把文件复制到 Ubuntu 本地磁盘再用,体验完全不同。
第四,如果虚拟机里跑的是 Docker 容器,容器内访问共享文件夹需要额外配置。因为容器默认看不到宿主机(虚拟机)的挂载点,需要把/mnt/hgfs再 bind mount 到容器里,或者直接在docker run时用-v /mnt/hgfs/share:/data挂载进去。这个细节容易忽略,但如果你在 Windows 里写代码、在 Ubuntu 容器里跑构建,这个配置就非常关键。
第五,和 VirtualBox 的共享文件夹做个对比。VirtualBox 需要安装增强功能(Guest Additions),且共享目录挂载命令是sudo mount -t vboxsf,参数和 VMware 不太一样。如果你是从 VirtualBox 转过来的,注意不要混淆两种命令。VMware 的优势在于 Tools 与系统集成更紧密,尤其对桌面分辨率自动适配、3D 加速的支持都更顺滑。
实际操作中我的习惯是:把共享文件夹当成一个“交换区”,放待处理的文件,处理完随手清理,保持目录清爽。时间久了你会发现,Windows 和 Ubuntu 两个系统之间的文件“边界感”会变得很模糊,反而能提升不少工作效率。
如果你按这篇教程把共享文件夹配好了,接下来可以试试给 Ubuntu 装个中文输入法,或者配置一下 Docker 环境,这些都是虚拟机装完 Ubuntu 之后最长顺带的活。VMware 里 Windows 与 Ubuntu 的协作,共享文件夹只是第一块敲门砖,后面还能玩出很多东西。