ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VMware共享文件夹配置与排错全指南:Windows/Linux客户机通用

VMware共享文件夹配置与排错全指南:Windows/Linux客户机通用 刚接触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-desktopCentOS/RHEL系统sudo yum install open-vm-tools装完后检查服务状态systemctl status vmtoolsd sudo vmware-toolbox-cmd -vvmware-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 虚拟机设置里的操作步骤确认虚拟机处于关机状态或者至少在设置界面能够修改配置然后在VMware Workstation主界面点击菜单栏的虚拟机 → 设置或者直接按Ctrl D。在弹窗顶部找到选项页签左侧列表里点击共享文件夹。右侧选择始终启用。如果只想临时开启一次选下次开机时启用也行但之后每次开机都要重新确认不如直接选始终启用省心。点击添加按钮在向导里选择宿主机的一个目录。这里强烈建议不要直接共享整个C盘因为客户机一旦发生恶意软件感染或者手动误删宿主机系统盘会一起遭殃。我的习惯是在宿主机上专门建一个VMShare之类的业务目录只共享这一层。给这个共享起一个名字这个名字会直接出现在客户机的共享路径里。勾选启用此共享。如果客户机是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 0nofail的含义是即使挂载失败也继续启动流程不会阻塞开机。对于共享文件夹这种非关键存储来说宁可启动时挂不上回头再手动处理也比卡死在登录界面强。4.3 普通用户访问共享目录时的权限问题Linux客户机里访问/mnt/hgfs最常遇到的是这种情况ls能看到目录内容但touch testfile提示Permission denied。这是因为默认情况下/mnt/hgfs挂载后属于root:root普通用户自然没写权限。解决方案有几个层次最简单的办法是在挂载时指定UID和GID。假设客户机的普通用户名是ubuntu先查一下他的IDid ubuntu输出类似uid1000(ubuntu) gid1000(ubuntu)。挂载命令加参数sudo mount -t vmhgfs .host:/ /mnt/hgfs -o uid1000,gid1000写进fstab的话就是.host:/ /mnt/hgfs vmhgfs defaults,nodev,nosuid,uid1000,gid1000,nofail 0 0这样挂载后直接以普通用户身份读写不再需要sudo。如果你的场景里有多个不同用户需要访问同一个共享目录可以配合umask0022来控制文件权限掩码让组用户和其他用户具备读权限。还有一个比较隐蔽的问题宿主机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也报错那多半是模块没有针对当前内核编译。这是比较麻烦的场景操作路径是确认当前内核版本uname -r。安装匹配的内核头文件Ubuntu下是linux-headers-$(uname -r)sudo apt install linux-headers-$(uname -r)重新安装open-vm-tools让它重新编译内核模块sudo apt reinstall open-vm-tools open-vm-tools-desktop重启虚拟机。绝大多数跟着上面步骤走完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匹配内核headersLinux重启后挂载丢失fstab未配置或缺nofail写入fstab并加nofailUbuntu普通用户提示权限不够挂载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 usernameuser,passwordpass,iocharsetutf8 0 0这种写法重启后会碰到两类问题第一网络栈还没就绪时systemd就去挂载CIFS结果因为目标网络不可达而失败。解决办法是在挂载参数里加_netdev这个选项告诉systemd该文件系统依赖网络设备需要等网络就绪后再挂载。第二开机挂载失败导致系统等待交互输入密码。解决方法是加nofail让挂载失败不影响启动流程。一个稳健的fstab条目长这样//192.168.1.10/share /mnt/win-share cifs credentials/etc/samba/creds,uid1000,gid1000,iocharsetutf8,file_mode0755,dir_mode0755,_netdev,nofail 0 0凭证单独放在/etc/samba/creds文件里内容格式为usernamexxx passwordxxx domainxxx并且把creds文件权限改为600避免明文密码暴露给其他用户。uid1000,gid1000的作用是让挂载后的目录归属到普通用户否则默认root所有普通用户只能看不能写跟上文VMware共享文件夹的权限问题一筹。6.4 什么时候我应该仍然选VMware共享文件夹说了这么多网络共享的优势也要给VMware共享文件夹说句公道话。如果你是单机开发、测试环境只有一台宿主机和一两台虚拟机实在没必要为了传几个文件去维护一套SMB服务。VMware共享文件夹配置一次就能用很久没有凭证过期没有防火墙干扰性能还好。但如果你的环境里虚拟机要同时被多人访问、需要动态增删共享目录或者宿主机本身不稳定频繁重装系统CIFS/SMB的集中式管理优势会逐渐体现出来。个人经验和项目阶段有关没有绝对的最优选根据共享范围到底有多大、生命周期有多长来判断就行。我在实际配置中始终保留的底线是宿主机上专门建立共享目录无论走哪种协议都不会把整个系统盘共享出去。这个习惯让我在后面的使用过程中少处理了非常多权限和误删的问题值得所有看到这里的朋友参考。
返回列表