如何创建 VMware 共享文件夹:Windows 和 Linux 客户机完整技术指南
VMware 共享文件夹是通过 HGFS(主机-客户机文件系统)协议将主机端目录暴露给客户虚拟机的功能,该协议通过 VMware Tools 内核模块实现。它作为一种伪文件系统挂载运行,完全绕过虚拟磁盘,无需网络配置、FTP 或 SCP 传输,即可实现主机操作系统与客户操作系统之间的直接文件交换。
本指南涵盖 VMware Workstation、VMware Player 和 VMware Fusion 的完整设置流程——包括 VMware Tools 安装、共享文件夹配置、Windows 和 Linux 客户端访问、通过 `/etc/fstab` 实现持久 HGFS 挂载,以及解决文档通常省略的最常见故障模式。
前提条件与架构概述
在调整任何设置之前,请确认以下条件已满足:
- 主机上已安装 VMware Workstation Pro/Player(v16+)、VMware Fusion(macOS 主机)或 VMware Workstation Pro 17。
- 已存在可正常启动的虚拟机。
- 客户操作系统内已安装 VMware Tools——这是不可或缺的。共享文件夹功能完全依赖于 VMware Tools 安装的 `vmhgfs` 内核模块(Linux)或 VMCI/HGFS 驱动程序(Windows)。
- 您打算共享的主机文件夹已存在,且运行 VMware 进程的用户账户具有适当的文件系统权限。
HGFS 的重要性:与网络共享(SMB/NFS)不同,HGFS 通过 VMware 后门通信通道运行。不涉及 TCP/IP 协议栈,无需配置防火墙规则,也不需要 DNS 解析。这使其在小文件传输方面速度显著更快,并与客户网络配置完全隔离。
第一步:在客户操作系统上安装 VMware Tools
VMware Tools 是大多数安装失败的根本原因所在。Open-VM-Tools 是由 Linux 社区维护的开源等效工具,在现代 Linux 发行版上完全受支持且为首选方案。
在 Windows 客户机上安装 VMware Tools
- 在虚拟机开机状态下,在 VMware 菜单栏中导航至 VM > 安装 VMware Tools。如果选项显示为”重新安装 VMware Tools”,请选择它——执行的是相同操作。
- VMware 会在客户机内将虚拟 ISO(`windows.iso`)挂载为 CD-ROM 驱动器。
- 打开文件资源管理器,导航至已挂载的驱动器(通常为 `D:`),然后运行 `setup.exe`。
- 选择典型安装,除非您有特定原因需要自定义组件。
- 在提示时重启客户机。
在 Linux 客户机上安装 VMware Tools
现代发行版应使用其原生包管理器安装 open-vm-tools,而非使用旧版基于 Perl 的安装程序:
“`bash
Debian / Ubuntu
sudo apt update && sudo apt install open-vm-tools open-vm-tools-desktop
RHEL / CentOS / AlmaLinux / Rocky Linux
sudo dnf install open-vm-tools
Arch Linux
sudo pacman -S open-vm-tools
“`
安装后,启用并启动服务:
“`bash
sudo systemctl enable vmtoolsd
sudo systemctl start vmtoolsd
“`
无头/服务器 Linux 客户机的重要说明:如果客户机没有图形环境,请仅安装 `open-vm-tools`(不带 `-desktop` 后缀)。`-desktop` 软件包添加的 X11 集成在服务器上无关紧要,且可能造成问题。
如果您在 Linux 上使用旧版 VMware Tools ISO 方法:
“`bash
Mount the CD if not auto-mounted
sudo mount /dev/cdrom /mnt/cdrom
Copy and extract the tarball
cp /mnt/cdrom/VMwareTools-*.tar.gz /tmp/
cd /tmp && tar -xzf VMwareTools-*.tar.gz
Run the installer
cd vmware-tools-distrib
sudo ./vmware-install.pl
“`
除非有特定配置要求,否则接受所有默认值。完成后重启。
第二步:在 VMware 设置中启用共享文件夹
此步骤在主机上通过 VMware 界面执行。初始配置时无需开启虚拟机,但在某些 VMware 版本中,您也可以在虚拟机运行时调整设置。
- 在 VMware Workstation/Player 中,从库面板中选择目标虚拟机。
- 点击编辑虚拟机设置(或按 `Ctrl+D`)。
- 导航至选项选项卡(而非硬件选项卡)。
- 从左侧列表中选择共享文件夹。
- 在”文件夹共享”部分,选择以下选项之一:
| 设置 | 行为 | 推荐使用场景 |
|---|
| — | — | — |
|---|
| **已禁用** | 无共享文件夹处于活动状态 | 默认状态,无需共享 |
|---|
| **始终启用** | 在所有电源循环中持续存在 | 开发环境、定期文件交换 |
|---|
| **启用直到下次关机或挂起** | 临时性,关机时重置 | 一次性传输、测试场景 |
|---|
对于持久性开发或运维工作流,请选择始终启用。
- 点击添加以启动共享文件夹向导。
第三步:通过向导配置共享文件夹
向导操作简单,但包含一个经常引起混淆的选项:
- 在向导欢迎界面点击下一步。
- 点击浏览选择要暴露给客户机的主机端目录。您也可以直接输入路径。重要提示:该路径必须对运行 VMware 的操作系统用户账户可访问。如果 VMware 以您的用户账户运行,该文件夹必须对该账户可读(如需要,也可写)。
- 为共享文件夹命名。此名称将成为客户机内的挂载点标识符——无需与主机上的实际文件夹名称匹配。使用不含空格的简短字母数字名称,以避免 Linux 终端中的路径转义问题。
- 勾选启用此共享以立即激活。
- 如果客户机不应对主机文件夹具有写入权限,可选择勾选只读。在与不受信任或实验性虚拟机共享源代码或配置文件时,这是一种良好的安全实践。
- 点击完成,然后点击确定。
第四步:在客户操作系统内访问共享文件夹
在 Windows 客户机上访问共享文件夹
- 启动虚拟机并登录。
- 打开文件资源管理器。
- 在左侧导航窗格中,点击网络。您将看到一个名为 `vmware-host` 的主机。
- 展开 `vmware-host` > 共享文件夹——您配置的文件夹将显示在此处。
- 您可以将其映射为持久网络驱动器:右键点击该文件夹,选择映射网络驱动器,并分配一个驱动器号(例如 `Z:`)。
或者,通过运行对话框(`Win+R`)使用 UNC 路径直接访问:
“`
vmware-hostShared Foldersyour_folder_name
“`
在 Linux 客户机上访问共享文件夹
默认情况下,VMware Tools 将共享文件夹挂载在 `/mnt/hgfs/` 下。启动后立即验证:
“`bash
ls /mnt/hgfs/
“`
如果您的共享文件夹名称出现,请进入其中:
“`bash
cd /mnt/hgfs/your_folder_name
ls -la
“`
如果 `/mnt/hgfs/` 为空或目录不存在,则 HGFS 文件系统未自动挂载。这是较新内核和 open-vm-tools 的常见问题。使用以下手动挂载命令:
“`bash
sudo mkdir -p /mnt/hgfs
sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o subtype=vmhgfs-fuse,allow_other
“`
`vmhgfs-fuse` 二进制文件(open-vm-tools 的一部分)替代了旧版 VMware Tools 中使用的传统内核模块方式。`.host:/` 语法可同时将所有共享文件夹挂载到 `/mnt/hgfs/` 下。
使 HGFS 挂载在重启后持久化(Linux)
在 `/etc/fstab` 中添加条目,使共享文件夹在启动时自动挂载:
“`bash
sudo nano /etc/fstab
“`
追加以下行:
“`
.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid=1000,gid=1000 0 0
“`
将 `uid=1000` 和 `gid=1000` 替换为您用户账户的实际 UID/GID(通过 `id yourusername` 查看)。设置这些值可确保挂载的文件归您的用户所有而非 root,从而防止在客户机内编辑文件时出现权限错误。
无需重启即可测试 fstab 条目:
“`bash
sudo mount -a
“`
第五步:排查常见共享文件夹故障
以下问题代表最常见的故障模式,包括标准文档通常未涉及的边缘情况。
Linux 客户机中共享文件夹不可见
症状:启用 VMware 设置中的共享文件夹后,`/mnt/hgfs/` 存在但为空。
原因 1——vmhgfs 模块未加载:
“`bash
lsmod | grep vmhgfs
“`
如果没有输出,说明模块加载失败。检查 `dmesg` 中的错误:
“`bash
dmesg | grep -i vmhgfs
“`
原因 2——内核版本不匹配:内核更新后,open-vm-tools 内核模块可能不会自动重新编译。请重新安装:
“`bash
sudo apt reinstall open-vm-tools # Debian/Ubuntu
sudo dnf reinstall open-vm-tools # RHEL-based
“`
原因 3——vmtoolsd 未运行:
“`bash
sudo systemctl status vmtoolsd
sudo systemctl restart vmtoolsd
“`
挂载的 HGFS 文件夹出现权限拒绝错误
症状:文件可见,但无法从客户机内编辑或在共享文件夹中创建文件。
根本原因:HGFS 挂载默认为 root 所有权。`allow_other` 和 `uid`/`gid` FUSE 选项可解决此问题。如果使用旧版内核模块(非 FUSE),请将用户添加到 `vmware` 组或调整主机文件夹的 ACL。
VMware 设置中共享文件夹选项显示为灰色
症状:共享文件夹选项存在但无法配置。
原因:这种情况发生在某些主机操作系统配置下的 VMware Player(免费版),或虚拟机配置为受限/加密模式时。企业部署中完整的共享文件夹管理需要 VMware Workstation Pro。
主机休眠/睡眠后共享文件夹无法访问
症状:主机从睡眠恢复后,HGFS 挂载变为陈旧状态。
解决方法:手动重新挂载,或添加一个在恢复时重新挂载的 systemd 服务:
“`bash
sudo systemctl restart vmtoolsd
sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o subtype=vmhgfs-fuse,allow_other
“`
通过共享文件夹传输文件速度缓慢
根本原因:HGFS 未针对大型二进制文件传输进行优化。对于传输超过 500 MB 的文件,建议使用 SCP、通过仅主机网络适配器的 rsync over SSH,或直接附加额外的虚拟磁盘。共享文件夹擅长处理小型配置文件、脚本和源代码——而非批量数据移动。
第六步:管理和删除共享文件夹
共享文件夹管理是非破坏性的——从 VMware 设置中删除共享文件夹不会删除主机端目录,仅移除 HGFS 映射。
- 关闭虚拟机(或在 VMware 版本支持热添加的情况下实时调整设置)。
- 打开编辑虚拟机设置 > 选项 > 共享文件夹。
- 选择目标文件夹条目。
- 点击删除以移除映射,或点击属性修改名称、路径或只读标志。
- 重新启动虚拟机。下次启动时,客户机中的挂载点将为空或不存在。
删除共享文件夹后,如需在 Linux 上移除陈旧的 `/etc/fstab` 条目,请编辑该文件并删除对应的 `.host:/` 行,然后运行 `sudo mount -a` 验证无错误。
VMware 共享文件夹与其他文件传输方式的比较
了解何时使用共享文件夹与其他机制,对于生产和开发环境同样至关重要。
| 方法 | 协议 | 需要网络 | 性能 | 持久性 | 最佳使用场景 |
|---|
| — | — | — | — | — | — |
|---|
| **VMware 共享文件夹(HGFS)** | HGFS(后门) | 否 | 中等 | 是(配合 fstab) | 开发文件、配置、脚本 |
|---|
| **SMB/CIFS 网络共享** | SMB | 是(仅主机/NAT) | 高 | 是 | 跨平台文件服务器 |
|---|
| **NFS 挂载** | NFS | 是 | 高 | 是 | Linux 到 Linux 大文件传输 |
|---|
| **SCP / SFTP** | SSH | 是 | 中高 | 否 | 安全的一次性传输 |
|---|
| **拖放(VMware Tools)** | HGFS | 否 | 低 | 否 | 单个小文件 |
|---|
| **共享虚拟磁盘** | SCSI/SATA | 否 | 非常高 | 是 | 大型二进制/数据库文件 |
|---|
| **rsync over SSH** | SSH | 是 | 高 | 可脚本化 | 增量同步、备份 |
|---|
对于大规模运行虚拟化基础设施的团队,HGFS 的局限性很快就会显现。需要主机与客户机之间持续高吞吐量文件访问的生产工作负载,更适合使用专用存储解决方案。如果您正在运行多个用于开发、测试或 CI/CD 流水线的虚拟机,配备适当存储卷的 VPS 托管环境可完全消除主机-客户机边界。
VMware 共享文件夹的安全注意事项
共享文件夹在主机与客户机之间建立了直接的文件系统桥接,这具有重要的安全影响:
- 虚拟机逃逸风险:具有共享文件夹写入权限的受损客户机可以修改主机端文件。在与运行不受信任软件或面向公众服务的虚拟机共享文件夹时,请始终使用只读模式。
- 最小权限原则:仅共享所需的特定子目录,切勿共享整个主目录或系统根目录。
- 恶意软件传播:在客户虚拟机内执行的勒索软件可以加密主机上可写共享文件夹中的文件。请将共享文件夹视为攻击面。
- 快照一致性:通过 HGFS 修改的文件不会被虚拟机快照捕获。如果回滚一致性很重要,请在创建快照之前将文件复制到虚拟磁盘中。
对于隔离性至关重要的环境——例如安全研究、恶意软件分析或多租户托管——建议考虑使用具有硬件级隔离的独立服务器,而非基于共享文件夹的工作流。
将 VMware 共享文件夹集成到开发工作流中
共享文件夹在集成到自动化工作流时最为强大:
同步 Web 项目文件:挂载指向主机端项目目录的共享文件夹,然后配置客户机的 Web 服务器(Apache/Nginx)直接从 `/mnt/hgfs/project/` 提供服务。在主机 IDE 中所做的编辑无需任何同步步骤即可立即在客户机中生效。
共享配置管理:将 Ansible playbook、Terraform 状态文件或 Docker Compose 定义存储在主机上,并从客户机执行。这样可以在主机上保留版本控制的文件,同时利用客户机端工具。
构建产物收集:配置客户机内的 CI 脚本,将编译后的二进制文件或测试报告写入 HGFS 挂载目录,使其无需 SSH 或文件复制步骤即可立即在主机上使用。
对于管理多个具有控制面板访问权限的虚拟环境的团队,带 cPanel 的 VPS 提供了一种托管替代方案,通过统一界面处理文件管理、用户权限和部署流水线,无需手动配置 HGFS。
如果您的工作流涉及将 Web 应用从开发虚拟机部署到生产环境,将本地 VMware 设置与用于预发布环境的共享虚拟主机配合使用,可让您在推送到生产服务器之前测试文件结构和权限。
对于需要在各环境间分发证书的 SSL 安全部署,AlexHost 的 SSL 证书可在自动化设置脚本中通过共享文件夹分发到客户虚拟机。
技术决策检查清单
在任何环境中配置 VMware 共享文件夹之前,请使用此检查清单:
- [ ] VMware Tools 或 open-vm-tools 已安装,且 `vmtoolsd` 服务正在运行
- [ ] 主机端文件夹路径不含空格或特殊字符(避免 FUSE 路径转义错误)
- [ ] 主机文件夹已为 VMware 进程用户设置适当的读/写权限
- [ ] 对于 Linux 客户机:`vmhgfs-fuse` 二进制文件可用(`which vmhgfs-fuse`)
- [ ] 对于持久挂载:`/etc/fstab` 条目包含 `uid`/`gid` 和 `allow_other` 选项
- [ ] 对于运行不受信任或面向外部工作负载的虚拟机,已启用只读模式
- [ ] 大文件传输(>500 MB)通过 SCP/rsync 而非 HGFS 进行
- [ ] 快照针对虚拟磁盘状态进行,而非依赖 HGFS 端的文件历史
- [ ] Linux 客户机内核更新后,已验证或重新安装 open-vm-tools 模块
- [ ] 从 VMware 设置中删除共享文件夹后,已移除陈旧的 `/etc/fstab` 条目
常见问题
为什么即使在 VMware 中启用了共享文件夹,`/mnt/hgfs/` 仍然为空?
最常见的原因是 `vmhgfs-fuse` 守护进程未运行,或内核更新后 HGFS 内核模块加载失败。运行 `sudo systemctl restart vmtoolsd`,然后使用 `sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o subtype=vmhgfs-fuse,allow_other` 手动挂载。如果仍然失败,检查 `dmesg | grep vmhgfs` 中的模块加载错误并重新安装 open-vm-tools。
没有安装 VMware Tools 可以使用 VMware 共享文件夹吗?
不可以。HGFS 协议完全在 VMware Tools 内实现。没有它,客户操作系统就没有能够与 VMware 虚拟机监控程序文件共享子系统通信的驱动程序。没有任何变通方法——安装 VMware Tools 是强制性的。
`vmhgfs` 和 `vmhgfs-fuse` 有什么区别?
`vmhgfs` 是旧版 VMware Tools 使用的传统内核内模块。`vmhgfs-fuse` 是 open-vm-tools 10.x 中引入的基于用户空间 FUSE 的替代方案,无需内核模块编译,且无需重新编译即可跨内核版本工作。现代 Linux 发行版专门使用 `vmhgfs-fuse`。
启用共享文件夹会影响虚拟机性能吗?
HGFS 通道在空闲期间增加的 CPU 开销可忽略不计。在高 I/O 负载下——例如直接从 HGFS 挂载编译大型代码库——与原生虚拟磁盘 I/O 相比,您会观察到延迟增加。对于 I/O 密集型操作,请先将文件复制到客户机的本地虚拟磁盘,执行操作,然后将结果复制回共享文件夹。
VMware ESXi 或 vSphere 支持 VMware 共享文件夹吗?
不支持。通过 HGFS 实现的共享文件夹是 VMware Workstation、Player 和 Fusion(桌面虚拟机监控程序产品)的专属功能。VMware ESXi 和 vSphere 不支持基于 HGFS 的共享文件夹。在这些环境中,主机与客户机之间的文件共享通过 NFS 数据存储、vSAN 或在客户操作系统级别配置的基于网络的协议(SMB/NFS)来处理。
