VMware 里给 Ubuntu 虚拟机配一个和 Windows 互通的共享文件夹这事听起来就三个步骤设置里加目录、装虚拟机工具、挂载。可真自己动手很多人会卡在ls /mnt/hgfs什么都看不到这一步。我前前后后配过不少次Windows 宿主机加 Ubuntu 客户机的组合是最常见的也最容易出问题。今天就把这套配置完整拆一遍从虚拟机设置里的共享目录添加到 Ubuntu 里的工具安装、手动挂载、开机自启再到拖拽复制、权限问题和排错一次性说清楚。这篇文章适合刚接触 Ubuntu 虚拟机的朋友也适合已经试过网上各种教程但一直没跑通的同学。如果你已经很熟练建议直接跳到最后的排查清单有几个细节是常规文档里不会写的。1. 动手前的整体思路共享文件夹的数据流向1.1 它和“拖文件进去”不是一回事很多人以为共享文件夹就是把一个 Windows 目录“映射”到 Ubuntu 里像 U 盘一样插进去。严格来说VMware 实现共享文件夹走的是 HGFSHost-Guest File System协议宿主机把 Windows 文件系统暴露成一个叫.host:/的虚拟根客户机里的虚拟机工具负责把这个根挂载到系统目录下。所以你在命令里会看到.host:/这种奇怪的写法它不是网络路径而是 VMware 虚拟化层的保留入口。Ubuntu 一侧能看到的就是普通的文件目录应用层读写行为和本地目录几乎没有区别但底层数据流其实是“Ubuntu 文件系统调用 - 虚拟机工具 - 宿主机文件系统”中间隔着一层虚拟化通道。理解这一点有个实际意义共享文件夹不是自动出现的。Windows 里设好了共享目录Ubuntu 里还缺一个“挂载动作”。很多教程只说设置不说挂载导致你跟着做完以后/mnt/hgfs仍然是空的。1.2 先决定用 open-vm-tools 还是 VMware Tools在 Ubuntu 里装虚拟机工具有两条路一条是用 VMware Workstation 自带的 VMware Tools 安装包另一条是用 Ubuntu 软件源里的 open-vm-tools。我的建议很直接新版本 Ubuntu 一律用 open-vm-tools。原因在于较新的 VMware Workstation 和 Ubuntu 内核配合时共享文件夹默认走 FUSE 用户态挂载而不是老掉牙的内核模块。open-vm-tools 自带的vmhgfs-fuse命令就是干这个的安装简单、随系统更新不容易因为内核升级而掉驱动。传统 VMware Tools 在某些场景下也能用但换内核以后容易出现模块不匹配反而给自己找麻烦。如果只是 Ubuntu Server装open-vm-tools就够。如果是 Ubuntu Desktop还需要open-vm-tools-desktop否则拖拽、剪贴板共享、窗口自适应这些桌面增强功能会缺失。这个区别后面专门讲。2. 宿主机端设置Windows 侧把目录“交出去”2.1 在虚拟机设置里添加共享目录的完整流程先假设 Windows 宿主机上已经有一个目录比如D:\share你要把它共享给 Ubuntu。操作步骤并不复杂在 VMware Workstation 里选中目标虚拟机点击“编辑虚拟机设置”。切到“选项”页签找到“共享文件夹”。先选择“总是启用”这一步很关键如果选的是“下次关机前有效”之类的临时选项重启虚拟机后共享就没了。点击“添加”在向导里浏览并选择宿主机路径例如D:\share。给共享目录起一个名字。我建议不要用默认的完整文件夹名直接改成vm-share这种简短、无空格的名称。确认“启用此共享”已勾选最后完成。完成以后虚拟机设置里会多出一条共享记录。如果虚拟机当前是运行状态设置一般也会即时生效但 Ubuntu 客户端经常不会实时弹出目录需要手动挂载或重启虚拟机里的工具服务。名称这件事多强调一句。Windows 允许目录名带空格比如D:\My Documents但在 Ubuntu 挂载后你就得处理带空格的路径写自动化脚本时很痛苦。建议在宿主机端就建一个干净的目录名例如D:\vm-share或D:\shared\data。2.2 共享名称、只读选项和“映射网络驱动器”的取舍在添加共享目录的向导里有一个“启用此共享”复选框还有一个“只读”选项。如果勾了只读Ubuntu 里就只能读不能写这对日常交换文件来说很反直觉。我第一次配的时候就因为勾了只读在 Ubuntu 里写文件一直报权限错误排查了半天才发现是宿主机设置的问题。还有一个容易被忽略的选项叫“映射为 Windows 网络驱动器”。这个名字很有迷惑性我明确告诉你它对 Linux 客户机没有意义那个选项是给 Windows 客户机用的。配 Ubuntu 时不需要勾勾了也不起作用反而让人以为是哪里没配好。高级选项里通常还有“在此虚拟机下一次打开电源时启用”之类的开关保持默认就行。如果你需要同时共享多个目录可以重复添加最终 Ubuntu 的/mnt/hgfs下会出现多个对应名称的子目录。提示宿主机选择共享路径时尽量避免直接共享整个 C 盘或系统敏感目录。虚拟机中的操作有风险万一误删或格式化了共享目录里的文件影响的是宿主机数据。独立建一个专用目录最稳。2.3 宿主机端“看不到共享文件夹选项”怎么处理有一部分朋友会遇到“选项页里没有共享文件夹”或按钮是灰的。这不是 Ubuntu 的问题通常是以下几个原因当前虚拟机处于挂起状态某些选项被锁定恢复运行或彻底关机后再开设置。使用了精简版或非官方修改版 Workstation功能被阉割。换用官方安装包基本能解决。虚拟机是由其他虚拟化平台导入的硬件兼容版本太老。可以试试“虚拟机”菜单里的“升级虚拟机硬件”。如果设置界面正常但 Ubuntu 里就是识别不到那问题大概率出在客户机工具一侧下一部分详细说。3. Ubuntu 客户机端安装工具并完成挂载3.1 安装 open-vm-tools 和 open-vm-tools-desktop进入 Ubuntu 虚拟机打开终端。先把软件源索引更新一下然后安装工具包sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop如果你是 Ubuntu Server不需要桌面拖拽功能只装open-vm-tools就够了。Ubuntu Desktop 建议两个都装因为open-vm-tools-desktop依赖会把桌面集成组件拉进来比如剪贴板共享、文件拖拽和分辨率自适应。安装完成后不需要立刻重启。先检查工具是否已经加载vmware-hgfsclient这个命令会列出宿主机共享给你的目录名。如果输出了vm-share说明虚拟化层已经识别到了如果没有任何输出先别急着挂载回到第 2 节检查共享设置是否真正生效。3.2 手动挂载 /mnt/hgfs 的命令与参数说明默认情况下Ubuntu 里共享目录的挂载点是/mnt/hgfs。如果这个目录不存在可以先创建sudo mkdir -p /mnt/hgfs然后执行挂载sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid$(id -u) -o gid$(id -g)我解释一下这几段参数搞懂以后排错会容易很多.host:/表示宿主机上的所有共享根目录。/mnt/hgfs客户机里的挂载点。-o allow_other允许除 root 以外的用户访问。没有这个参数非 root 用户进入/mnt/hgfs很可能被拒绝。-o uid$(id -u) -o gid$(id -g)让挂载后的文件显示为当前用户的 uid 和 gid。id -u通常会输出1000也就是第一个普通用户。挂载完成以后验证一下ls -l /mnt/hgfs mount | grep vmhgfs正常情况你会在/mnt/hgfs下看到vm-share子目录进入后就能访问 Windows 里的文件了。有朋友问能不能只挂载某一个共享目录而不是全部也可以sudo mkdir -p /mnt/hgfs/vm-share sudo vmhgfs-fuse .host:/vm-share /mnt/hgfs/vm-share -o allow_other -o uid1000 -o gid1000但说实话没必要逐个挂载一个.host:/挂全部最省心。旧教程里还有一种写法sudo mount -t vmhgfs .host:/ /mnt/hgfs如果你敲完出现unknown filesystem type vmhgfs不用纠结那是因为新版本系统没有装对应的内核模块直接用vmhgfs-fuse就对了。这是新旧工具实现方式不同导致的不是你操作有问题。3.3 让共享文件夹开机自动挂载的推荐方案手动挂载只能管到当前开机。重启虚拟机以后/mnt/hgfs又会空掉这时候就需要开机自动挂载。网上很多教程会教你写进/etc/fstab我也给一个可用的写法.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0但这个写法有一个风险如果系统启动过程中 HGFS 通道还没就绪而 systemd 又按 fstab 顺序去挂载可能造成开机失败、进入紧急模式。虽然可以通过x-systemd.after之类的参数去规避但复杂度上来了对新手不友好。我个人的推荐方案是写一个 systemd 服务来管理挂载稳定且容易排查。在/etc/systemd/system/下创建一个服务文件sudo nano /etc/systemd/system/vmware-shared-folders.service内容如下[Unit] DescriptionMount VMware shared folders Afternetwork.target [Service] Typeoneshot RemainAfterExityes ExecStart/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid1000,gid1000 ExecStop/usr/bin/fusermount -u /mnt/hgfs [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable --now vmware-shared-folders这个服务会在系统进入多用户模式时执行一次挂载并且在关机时自动卸载。以后开机不用再管它。如果你已经手动挂载过自己写服务后发现没有变化先卸载再测试sudo fusermount -u /mnt/hgfs sudo systemctl start vmware-shared-folders之所以推荐 systemd 而不是 fstab还有个原因是 fstab 一旦写错可能连系统都进不去。service 文件就算写错最多是挂载失败把服务禁用掉再手动修就行风险小得多。4. 文件互通和拖拽粘贴的进阶体验4.1 为什么桌面版要额外装 open-vm-tools-desktop如果只装了open-vm-tools命令行下读写共享文件夹没问题但桌面环境会很别扭窗口大小不会随 VMware 窗口自适应从 Windows 往 Ubuntu 拖文件拖不进去剪贴板也不能共享。open-vm-tools-desktop补齐的就是这些桌面集成能力。它依赖open-vm-tools所以安装命令可以一起装不用分开。装完以后如果想立刻生效重启虚拟机最省事。有些情况下重启服务也能生效但桌面会话对组件加载时机比较敏感重启一下不浪费时间。4.2 客户机隔离选项与“双向”拖拽逻辑除了工具要装VMware 设置里还有一道开关。在“虚拟机设置”-“选项”-“客户机隔离”里你会看到两个复选框“启用复制粘贴”和“启用拖放”。这两个都要勾上。拖拽的逻辑是“复制”不是“移动”。Windows 里的文件拖进 Ubuntu等价于把文件复制到 Ubuntu 的当前目录或桌面Ubuntu 里的文件拖到 Windows也同样是复制。如果你希望文件在两个系统间频繁交换直接通过共享文件夹读写会更稳定拖拽适合偶尔传一份文件。有一点要提前打预防针如果你用的是 Wayland 会话某些 VM 版本对拖拽支持不太好。遇到拖拽不生效但复制粘贴正常的情况不用纠结直接走共享文件夹路径复制就行。这不是你的问题是虚拟化环境与图形协议之间的兼容问题。5. 常见问题与排查技巧实录5.1 共享文件夹怎么都看不到这是出现频率最高的问题。表现是Windows 侧设置界面一切正常Ubuntu 里/mnt/hgfs也存在但里面是空的或者vmware-hgfsclient直接没有输出。按顺序排查确认共享文件夹设置为“总是启用”。只勾选了“启用此共享”但上面的大选项还是禁用状态等于没开。确认 Ubuntu 里工具已安装。跑一下vmware-hgfsclient如果没有这个命令说明工具没装好。如果你用的是精简版 Workstation换官方安装包。在 Windows 宿主机上把共享目录的“只读”属性取消避免读写方向被限死。如果以上都对重启虚拟机。很多时候工具加载发生在桌面会话之后启动顺序乱掉重启比调试省心。5.2 能看到目录但没权限进入表现是ls /mnt/hgfs能看到目录名但cd进去提示Permission denied或者新建文件提示没有权限。第一个可能原因是挂载时没有加allow_other和 uid/gid 参数。重新挂载一下sudo fusermount -u /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid$(id -u) -o gid$(id -g)第二个原因是宿主机目录本身加了访问控制。Windows 上右键共享目录查看安全属性确认当前用户有读写权限。第三个原因很隐蔽共享目录本身是 Windows 的压缩文件夹或加密属性。开启加密属性的目录在跨平台挂载时可能无法正常访问把整个共享目录放进一个普通的新建文件夹里最稳。5.3 重启后挂载失效重启以后/mnt/hgfs就空说明你没有配开机自动挂载。按第 3.3 节的 systemd 服务配置一次即可。如果你之前用了 fstab并且重启后直接卡在系统启动界面大概率是 fstab 写错了。别慌进入恢复模式或输入 root 密码后编辑/etc/fstab把.host:/ /mnt/hgfs那一行删掉或注释掉再重启。这也是为什么我强烈不建议新手优先用 fstab 的原因。5.4 实测中很好用的排查命令清单把这些命令存在自己笔记里遇到问题按顺序跑一遍命令作用vmware-hgfsclient查看宿主机共享目录是否被虚拟机识别ls -l /mnt/hgfs查看共享目录挂载后的内容mount | grep vmhgfs查看挂载状态和挂载参数sudo fusermount -u /mnt/hgfs卸载挂载点常用于重挂dmesg | grep -i vmhgfs查看内核日志中关于 HGFS 的信息systemctl list-units | grep -i vm检查虚拟机相关服务是否启动用fusermount -u卸载时如果提示target is busy说明有进程正在占用目录里的文件。可以用lsof f -- /mnt/hgfs看看是谁占着关掉对应的文件管理器或编辑器再卸载。最后分享一个我个人很喜欢的技巧共享挂载好之后在 Ubuntu 里做一个软链接把/mnt/hgfs/vm-share指到~/Shared这样平时写代码、传安装包都不用敲长路径ln -s /mnt/hgfs/vm-share ~/Shared如果你经常在 Windows 和 Ubuntu 两边交换材料建议在共享目录里单独建一个temp子目录专门放一次性文件这样不会因为误操作把有用的项目文件删掉。实际踩过几次坑之后我觉得共享文件夹配置本身不复杂复杂的是挂载时机和权限。只要理顺了“Windows 设置 - 工具安装 - 挂载动作 - 开机自启”这条链路后面基本一劳永逸。
阅读完成 · 觉得有帮助?