尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

VMware虚拟机共享文件夹配置:Windows与Linux文件互传最佳实践

发布时间:2026/9/29 7:27:48

资讯中心
01
ARTICLE

VMware虚拟机共享文件夹配置:Windows与Linux文件互传最佳实践

VMware虚拟机共享文件夹配置:Windows与Linux文件互传最佳实践
跨系统倒腾文件应该是折腾虚拟机的人最容易破防的日常。我的主力机是Windows虚拟机里常年跑Ubuntu和Kali以前想在两个系统之间传文件U盘、FTP、Samba、网盘全都试过每一套都有各自的脾气U盘来回插拔效率低FTP要配服务和端口Samba绕不开账号和防火墙网盘上传下载转一圈烦得要死。后来认真把VMware的共享文件夹功能研究了一遍才发现最简单靠谱的方案其实一直藏在虚拟机设置里。这篇就用我自己的实操经历把Windows和Linux之间通过虚拟机VM创建共享文件夹的完整流程讲透。内容包括VMware端配置、open-vm-tools安装、Linux挂载命令、开机自动挂载以及权限、乱码、重启失效这些高频坑位。只要你是用VMware Workstation跑Linux虚拟机不管是做开发、运维还是搞安全研究这套思路都能直接抄作业。1. 为什么我不再用U盘和Samba先把方案选型讲清楚1.1 共享文件夹到底解决的是哪类痛点最常见的场景是这样的Windows当宿主机Linux跑在虚拟机里。你手头有一堆Windows下的配置文件、安装包、日志想丢给Linux用。如果用U盘得先拷贝、再挂载、再弹窗提示“有程序正在占用”来回切系统切到晕。走网络传输更麻烦先得确认虚拟机网络模式是不是桥接IP能不能互通Windows的共享有没有打开防火墙放没放行一整套流程下来少说十分钟而且经常某个环节莫名其妙卡住。VMware共享文件夹功能在这种场景下体验就非常好。只需要在虚拟机设置里把Windows某个目录添加成共享然后在Linux虚拟机里挂载一下这个目录就变成了本地文件夹一样的存在。读Windows那边放进去的文件不用管IP不用管账号不用管防火墙虚拟机重启之后配置也还在。我换了机器、换了发行版只要还是VMware环境这套方法每次都能稳定复现。平时我最喜欢把开发用的脚本、离线安装包、日志收集目录这类东西放在共享文件夹里。Windows和Linux两边同时读写同一个目录改完立刻能看到等于给两个系统加了一条直连通道省掉中间所有搬运动作。这种“无感”的体验恰恰是折腾过各种土办法之后最珍贵的东西。1.2 和Samba、NFS相比它赢在什么地方肯定有人会问既然有Samba和NFS这种通用文件共享协议为什么还要用VMware自己的共享文件夹我的看法是两者解决的问题有重叠但使用体验差距很大。Samba/NFS本质是网络文件系统走的是TCP/IP栈意味着你必须先保证虚拟机网卡正常、IP正确、防火墙放行对应端口然后还要考虑Samba用户权限、NFS导出规则这些配置。任何一个环节出错现象都可能是“能ping通但挂不上”排查起来很消耗耐心。VMware共享文件夹走的是虚拟机专用通道底层由VMware Tools提供虚拟文件系统hgfs相当于宿主机和虚拟机之间有一条专用的数据通道不走虚拟网卡不经过TCP/IP协议栈封装因此配置链路短很多稳定性和响应速度也更可控。尤其在频繁读写小文件时体感比Samba流畅至少不会出现那种打开目录都要转圈半天的现象。当然它也有局限只能在同一个宿主机下的虚拟机里用没法跨机器跨网络。但对我这种主要在本机开发调试、偶尔把文件从Windows喂给Linux用的人来说这个限制不是问题反而因为“只在本机生效”而省掉很多网络安全上的顾虑。如果你确实需要跨机器共享那再上Samba/NFS不迟没必要从一开始就上重武器。2. 准备工作VMware Tools是第一道坎2.1 宿主机和虚拟机版本怎么搭先说版本适配。我用的VMware Workstation Pro和VMware Workstation Player都支持共享文件夹从15到17的界面几乎一样配置入口也一致。虚拟机里的系统Debian系的Ubuntu、KaliRHEL系的CentOS、Rocky我都在上面成功跑起来过核心关键在于Linux系统里装好VMware Tools对应的开源版本。有一点要提前理清楚在Windows虚拟机里VMware共享文件夹启用后通常会直接映射成网络驱动器在资源管理器里就能看到。但在Linux虚拟机里不是这样需要自己执行挂载命令才能访问。很多人说“明明开了共享却看不到”就是卡在这一步。正因如此Linux端的操作才是这篇文章的重点Windows端基本是零配置。如果你是Linux宿主机跑Windows虚拟机操作方向也成立只是反过来共享文件夹在Windows虚拟机里以\\vmware-host\Shared Folders的形式出现。逻辑和本文介绍的完全对称看完Linux端怎么手动挂载自然也能理解Windows端背后发生了什么。2.2 安装open-vm-tools的正确姿势早期VMware版本里的VMware Tools是一套闭源工具集需要在虚拟机的“VM”菜单里选“重新安装VMware Tools”然后通过挂载ISO镜像、解压、执行vmware-install.pl来安装。现在主流Linux发行版都推荐直接安装官方开源版本open-vm-tools包管理器一条命令就能装完不像老版本那样要编译半天兼容性和内核匹配也更好。Debian系发行版执行下面命令sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktopRHEL系发行版执行sudo yum install -y open-vm-tools其中open-vm-tools-desktop是带桌面环境支持的扩展包如果你虚拟机里跑的是带图形界面的Ubuntu/Kali建议一并装上否则某些拖拽功能可能不正常。如果是无桌面的服务器版只装open-vm-tools就够。装完以后最好重启一次虚拟机让内核模块和用户态服务全部加载。重启之后执行vmware-hgfsclient如果能看到共享目录名说明VMware Tools这边已经通了。这一步是整个共享文件夹方案的命门我在迁移环境时经常发现九成问题都出在“压根没装Tools”或者“Tools版本和内核不匹配”。2.3 在虚拟机设置里添加共享文件夹VMware端配置步骤其实很简单容易出错的是细节。打开虚拟机设置进入“选项”页签找到“共享文件夹”单选框选“总是启用”然后点击“添加”按钮。接下来选择宿主机目录例如Windows下的D:\share然后设置共享名称。这里有个我踩过坑的经验共享名尽量用简短英文比如share、data不要带中文也不要带空格。因为Linux挂载时共享名会成为挂载点下的子目录名中文和空格虽然没有绝对错误但在输入命令、写脚本时会多很多不必要的麻烦。添加完成后列表里会多出一条记录可以勾选“只读”或“读写”。平时开发调试直接选“启用此共享”读写权限都打开。如果你只是想把宿主机文件单向传给虚拟机可以勾“只读”提高安全性。这个配置对所有虚拟机是独立的你可以在同一台宿主机里为不同虚拟机添加不同的共享目录互不干扰。配置好以后不需要重启虚拟机直接到Linux那头执行挂载命令即可生效。我第一次配置的时候傻乎乎地重启了好几次虚拟机后来才发现共享文件夹是热生效的配置完马上就能用根本不用折腾重启。3. Linux端挂载实操从hgfsclient到开机自启3.1 验证共享是否可见在Linux虚拟机里打开终端执行vmware-hgfsclient如果输出share或者你在VMware里设置的共享名说明VMware Tools和共享配置都正常。这一步特别适合用来区分问题到底出在宿主机配置还是Linux挂载环节。如果没有输出先回VMware设置界面看“总是启用”有没有选中再查一下open-vm-tools是不是真的装好了。如果命令提示找不到vmware-hgfsclient说明open-vm-tools没有装成功或者PATH环境变量没包含它的路径。Debian系安装后一般位于/usr/bin/vmware-hgfsclient直接全路径执行验证一下也可以。装好Tools之后仍然没有输出还有一种可能是内核模块没加载可以执行lsmod | grep vmhgfs确认没有结果就modprobe vmhgfs手动加载一次。我一般到这一步就会顺手检查一下ls /mnt很多发行版默认没有/mnt/hgfs这个目录后面挂载之前需要自己创建。把验证做到前面后面命令失败的几率会小很多。3.2 vmhgfs-fuse挂载命令逐参数拆解确认共享可见后开始挂载。先创建挂载点sudo mkdir -p /mnt/hgfs然后执行挂载命令sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000,gid1000命令里的.host:/表示所有共享目录的根节点挂载之后VMware设置里的share会出现在/mnt/hgfs/share下。allow_other这个参数非常关键不加的话只有root能访问挂载点里的文件普通用户进去就会碰见Permission denied。uid1000,gid1000用于把挂载点里的文件所有权映射到当前用户不然即使挂载成功创建文件时也可能遇到权限别扭的情况。如果你只想单独挂载某一个共享目录可以把根节点换成具体名称sudo vmhgfs-fuse .host:/share /mnt/hgfs -o allow_other挂载完成后可以到Windows宿主机的共享目录里放一个测试文件比如hello.txt然后在Linux下执行ls -l /mnt/hgfs/share/ cat /mnt/hgfs/share/hello.txt能正常读到内容就说明共享文件夹已经通了。反向验证也可以做在Linux的共享目录下创建文件回Windows宿主机看是否同步出现。我实测下来文件变化是即时可见的基本不需要刷新或者等待这点比某些网络文件系统表现更好。后面如果不想用了卸载命令是sudo umount /mnt/hgfs3.3 开机自动挂载的两种稳妥做法手动挂载虽然简单但虚拟机一重启就失效每次开机都敲一遍命令也不是不行就是烦。想一劳永逸最常见的方法是写进/etc/fstab。打开文件追加一行.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0写完先别急着重启执行sudo mount -a验证一下如果有报错说明参数或文件系统类型写得不合适当场修正不然等到重启时候才发现问题排查起来更难受。不过网上很多朋友反馈fstab方式偶尔会失效我分析过原因多半是systemd在开机阶段执行挂载时open-vm-tools服务还没准备就绪导致挂载命令失败。想更稳妥一些可以在fstab那条记录里追加x-systemd.aftervmtoolsd.service.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000,x-systemd.aftervmtoolsd.service 0 0不同发行版的服务名可能略有差异拿不准就先执行systemctl list-units | grep -i vm看一下准确服务名。如果fstab这里不好解决也可以改用systemd挂载单元写一个/etc/systemd/system/mnt-hgfs.mount文件[Unit] DescriptionMount VMware Shared Folders Aftervmtoolsd.service Requiresvmtoolsd.service [Mount] What.host:/ Where/mnt/hgfs Typefuse.vmhgfs-fuse Optionsdefaults,allow_other,uid1000,gid1000 [Install] WantedBymulti-user.target然后执行sudo systemctl enable --now mnt-hgfs.mount这套方式对服务依赖表达得更明确挂载失败时也能通过systemctl status mnt-hgfs.mount看到具体日志。我个人在Ubuntu 22.04和Kali上两种方式都试过fstab加x-systemd.after已经比较稳但如果你追求更可控systemd挂载单元更值得推荐。4. 权限、乱码和性能这些细节决定体验4.1 uid/gid不配对文件权限折磨人共享文件夹刚挂载成功那阵我遇到过一种很常见的情况文件能看到但用普通用户去读取、修改、删除时系统直接拒绝。原因就是挂载命令里没用uid/gid做映射导致所有文件都被当成root所有。虽然可以通过sudo操作但日常在项目目录里开发时动不动要sudo实在影响效率。解决办法就在挂载参数上。命令里加上-o uid1000,gid1000这里的1000是当前普通用户的UID和GID可以用id -u和id -g查出来。写成固定值之后挂载点里的文件在Linux这侧统一显示为当前用户所有读写删一条龙顺畅很多。有一点要提醒共享文件夹底层的宿主文件系统是Windows那边的NTFSLinux的chmod、chown这些操作在共享目录里基本不生效也不会真的改变Windows侧的权限。这是正常的不要在上面花时间。Windows文件和Linux文件权限本来就是两套体系中间“翻译”成当前uid/gid是最省心的做法。4.2 中文文件名和编码问题网上很多人担心中文文件名在共享文件夹里会乱码我实际用下来在VMware共享文件夹里这种情况其实很少见。因为vmhgfs数据通道默认使用UTF-8编码Windows 10/11默认也支持UTF-8文件名所以中文名在这条路上基本能保持完整。真遇到乱码最常见的诱因反而是Linux虚拟机里的locale没设置好。执行echo $LANG看一下如果是C或者POSIX赶紧改成zh_CN.UTF-8或en_US.UTF-8。修改后重新登录会话中文字符显示基本就能恢复了。另外早期有些Windows程序会创建GBK编码的旧文件名这类文件在Linux下显示乱码的概率会高一些解决思路是把文件名重新保存为标准UTF-8或者干脆避免在共享目录里放年代久远的GBK命名文件。为了减少麻烦我在实际部署时还是坚持一条原则共享目录的根目录名用英文内部文件名尽量用UTF-8标准命名。中文显示和应用需求都可以满足但不会把共享名和路径这种基础环节也卷进编码问题里。4.3 大文件与大量小文件的性能感受共享文件夹的性能是很多人关心的问题。我实测下来的体感是单一大文件比如ISO镜像、视频、压缩包读写速度相当不错接近本地磁盘的体验日常拷贝几个GB的文件基本不用等太久。但遇到大量小文件的场景比如node_modules目录、.git对象库、代码工程源码性能下降就很明显文件一多复制和删除都会感到明显的“卡顿”。原因不难理解VMware共享文件夹属于FUSE文件系统每次文件操作都有用户态和内核态来回切换的开销文件数量越大这种调度损耗就越突出。所以我的经验是共享文件夹适合做数据交换区、配置下发区、日志收集区不适合直接把重负载的开发项目整个丢在里面跑。我现在的习惯是Windows端编辑完代码通过共享文件夹同步到Linux虚拟机然后我把需要编译运行的工程复制到Linux本地磁盘编译构建都在本地完成。这样既保留了Windows侧编辑的便利又避免了FUSE性能瓶颈影响构建速度。另外要特别注意数据库文件、git仓库这类对锁和IO敏感的东西尽量不要放共享目录否则偶尔冒出来的“device or resource busy”和锁冲突会让你头疼。5. 实战排坑挂载失败和重启失效的完整排查5.1 挂载报错“No such device”怎么办这是挂载共享文件夹时最常见的报错看到no such device先别慌原因基本是三类open-vm-tools没装、VMware共享配置没生效、hgfs内核模块没有加载。排查顺序就是从前往后来。先执行vmware-hgfsclient有输出就说明Tools没问题问题大概率在配置或模块。再检查VMware设置里的“共享文件夹”是不是勾了“总是启用”我遇到过配置只选了“启用”但没点“总是启用”的情况虚拟机一重启共享就消失。最后执行lsmod | grep vmhgfs验证内核模块没有就modprobe vmhgfs还是不行就reboot。内核模块加载失败有时和内核版本升级有关重启一次往往能把模块状态恢复整齐。一般情况下经过这三步排查No such device的问题都能解决。如果依旧卡住也可以检查一下/usr/bin/vmhgfs-fuse是否存在有时open-vm-tools包装了但fuse相关依赖缺失命令行工具没被一并安装。5.2 开机后/mnt/hgfs是空的症状是手动挂载一切正常重启之后就变成空目录或者直接看不到share目录。出现这个现象十有八九是fstab记录里的共享名和VMware配置里的共享名对不上。建议挂载前先执行vmware-hgfsclient把输出的名称抄下来再对比fstab里的挂载源。比如VMware里的共享名是share挂载源必须写.host:/share或.host:/写错任何一个字符开机都挂不出来。还有一类情况是fstab执行失败了。执行journalctl -xe查看启动日志大概率能看到挂载相关报错原因往往是服务顺序问题。解决办法我也在前面提过加上x-systemd.aftervmtoolsd.service或者改用systemd挂载单元让共享文件夹的挂载排到open-vm-tools服务就绪之后。排查这类问题的时候不妨手动跑一遍sudo mount -a如果命令执行成功目录马上就能出现说明配置本身没有错纯粹是开机时序问题那就专门针对时序做调整就可以。5.3 共享文件夹选项灰色/不可用如果你在VMware虚拟机设置里发现“共享文件夹”整个区域是灰色不可点的状态最直接的原因就是这台虚拟机没有安装VMware Tools。不同版本的VMware对未安装Tools的虚拟机禁用共享文件夹功能属于正常现象。解决路径就是回到Linux虚拟机里把open-vm-tools装好然后重启虚拟机。重启之后再打开设置共享文件夹选项就能正常点击了。另外一种情况是你在用VMware Player或免费版部分版本功能入口会和Workstation Pro略有差异但共享文件夹本身是基础功能不应该被阉割如果灰色持续存在检查一下软件版本和虚拟机兼容性设置别用太老的硬件兼容模式。5.4 常见问题速查表我把平时遇到的高频问题整理成一张速查表方便你对照排查症状可能原因解决办法vmware-hgfsclient无输出未安装open-vm-tools安装后重启虚拟机挂载时报No such devicehgfs内核模块未加载modprobe vmhgfs或重启挂载成功但目录为空共享名对不上用vmware-hgfsclient确认名称普通用户无法访问未加allow_other或uid参数重新挂载加-o allow_other,uid1000重启后共享失效fstab时序问题追加x-systemd.after或改用systemd单元共享文件夹选项灰色虚拟机未装Tools安装open-vm-tools后重启文件中文乱码locale设置不对检查并切换为UTF-8编码Windows端文件被锁应用正在占用文件关闭Windows侧占用程序后再操作这张表基本覆盖了我在各种机器上折腾共享文件夹时遇到的全部典型问题照着顺序排查效率会比盲目搜错误信息高很多。6. 反向场景让Windows访问Linux虚拟机里的文件6.1 Samba搭建的最小方案前面讲的都是Windows宿主机目录给Linux虚拟机用反过来呢比如我想让Windows直接访问Linux虚拟机里的某个工作目录VMware共享文件夹默认并不直接提供这个方向的能力这时最常用的补充方案是部署一个Samba服务。在Linux虚拟机里安装Sambasudo apt install -y samba然后创建一个共享目录并调整权限sudo mkdir -p /srv/share sudo chmod 755 /srv/share在/etc/samba/smb.conf末尾追加一个最小共享段[share] path /srv/share browseable yes read only no guest ok yes重启服务sudo systemctl restart smbd确认虚拟机的IP地址ip addr show | grep inetWindows文件管理器地址栏输入\\虚拟机IP\share回车就能看到Linux目录内容。如果访问不了优先检查Linux防火墙比如Ubuntu下执行sudo ufw allow samba放行端口。6.2 和CIFS挂载重启失效的老问题说再见网上经常搜到的一个问题是“CIFS挂载共享文件夹重启后失效怎么办”。CIFS就是SMB协议在Linux下的挂载方式靠的是mount -t cifs。失效的核心原因大多数是fstab启动顺序问题开机时网络服务还没就绪系统就尝试挂载网络共享自然失败。解决办法是在fstab对应行里加_netdev选项//192.168.1.100/share /mnt/data cifs credentials/root/.smbcredentials,uid1000,gid1000,_netdev 0 0_netdev的意思是告诉系统这是一个网络设备等网络准备好之后再挂载。如果只是想在Windows和Linux之间互传文件我的建议是别一上来就上CIFS。宿主机和虚拟机之间优先用VMware共享文件夹跨虚拟机或者和局域网其他机器交互再考虑Samba/CIFS这样两种方案各管各的场景出问题的概率会小很多。实际操作中我最顺手的组合是VMware共享文件夹负责Windows宿主机和Linux虚拟机之间的快速交换Linux虚拟机里如果还有对外提供文件服务的需求再单独开Samba。两条路分工明确谁也不抢谁的活。折腾了几轮之后你就会发现所谓稳定方案很多时候不是找一个万能的工具而是把合适的工具放在合适的环节里。这个思路比记一堆命令更值钱。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。