干这行这么多年每次给新同事或者朋友远程解决虚拟机问题十个里有八个都卡在“共享文件夹”这一步。要么是装完虚拟机发现文件拖不进去要么是配好了共享文件夹结果里面空空如也再要么就是一顿操作猛如虎最后弹出来一个 0x80070035 或者 0x80004005 让你原地崩溃。这篇文章我就把“vm 共享文件夹”这件事彻底讲透。不只是告诉你按钮在哪儿、勾哪个选项还会把背后的原理、为什么这么配、以及我这些年踩过的坑和排查思路一并分享出来。不管你是用 VMware Workstation、Oracle VM VirtualBox还是 Linux 和 Windows 混合环境看完这篇你都能自己搞定而且是不带犹豫的那种。1. 内容整体设计与思路拆解1.1 虚拟机文件互传到底有哪几条路先说个基础认知。虚拟机VM和宿主机之间的文件交换抛开云盘和 U 盘这些物理搬砖手段常见技术路径就三条拖拽复制、共享文件夹、网络共享。很多人一上来就直接问“怎么开共享文件夹”但实际上很多场景根本不需要共享文件夹这么重的方案。拖拽复制依赖虚拟机增强工具VMware Tools 或 VirtualBox Guest Additions适合小文件、偶尔传一次。优势是没有任何学习成本缺点是大文件极易中断、目录层级多的时候体验稀碎而且某些精简版系统压根没装增强工具拖拽就是灰的。共享文件夹是 VMware 和 VirtualBox 都提供的“虚拟机直通宿主机目录”机制适合需要高频读写的场景比如你的项目代码在宿主机、虚拟机里做编译或运行或者把日志直接落到宿主机磁盘上方便查看。网络共享则是通过 SMB 协议走局域网虚拟机把宿主机或另一台机器当成 NAS 来用。这套方案最大的好处是不用装任何增强工具但前提是两台机器网络要通而且权限配置头绪更多。我在实际工作中的选型逻辑很简单系统是刚装的、需求是临时的优先拖拽目录是开发项目、长期要用的直接共享文件夹机器环境比较杂像 Windows 虚拟机访问 Linux 宿主机之类的那就老老实实走 SMB 网络共享。三者没有绝对好坏关键看你的场景和网络拓扑。1.2 为什么“装好系统后第一件事是装增强工具”很多新手在“vm 共享文件夹”上栽跟头九成是漏了增强工具这一步。VMware Tools 或者 VirtualBox Guest Additions它们不仅仅提供“拖拽”和“共享文件夹”功能还包含显卡驱动、鼠标无缝切换、剪贴板共享、时间同步等一整套半虚拟化驱动。没有这套东西虚拟机里的系统跑在纯模拟的慢速设备上性能打折不说共享文件夹这个功能压根就不会出现在菜单里。你就想想Windows 虚拟机没装驱动的时候分辨率固定 1024x768、鼠标要用 CtrlAlt 释放那种半残状态基本就是没装增强工具的样子。所以无论用 VMware 还是 VirtualBox装完系统的第一件事永远是装增强工具再谈别的。2. 核心细节解析与实操要点VMware 共享文件夹篇2.1 VMware Tools 的安装与验证VMware Workstation 里装 Tools常规路径是菜单栏“虚拟机 - 安装 VMware Tools”。但有个细节很多人不知道在选择安装之后虚拟机的光驱里会出现一个虚拟 CD-ROM里面是一个 tar.gz 压缩包Windows 客户机会自动弹出安装向导而 Linux 客户机则常常毫无反应。Linux 下正确的安装方式是把光驱里的压缩包拷出来解压然后执行安装脚本# 挂载虚拟光驱如果没自动挂载 sudo mount /dev/cdrom /mnt # 解压安装包到临时目录 cd /tmp tar -zxvf /mnt/VMwareTools-*.tar.gz # 执行安装脚本 cd vmware-tools-distrib sudo ./vmware-install.pl -d-d参数代表用默认值一路安装省得它一行一行问。安装完成后sudo reboot重启一次然后用vmware-toolbox-cmd验证一下是否正常vmware-toolbox-cmd stat hosttime能返回虚拟机时间就说明 Tools 工作正常。如果你是 Ubuntu 或者 Debian 系我更推荐用另一个思路——直接装 open-vm-tools效果一样甚至更稳sudo apt update sudo apt install -y open-vm-tools这里有个我踩过的坑如果你又装 open-vm-tools 又装官方 VMware Tools内核模块可能会冲突出现挂载不上共享文件夹或者共享目录时好时坏的问题。我的习惯是统一用 open-vm-tools毕竟它是开源实现和 Linux 内核配合更丝滑。2.2 图形界面配置共享文件夹的隐藏路径在 VMware Workstation 里添加共享文件夹的方法是虚拟机设置 - 选项 - 共享文件夹 - 选择“总是启用” - 添加。这里我提醒几个关键点。第一“名称”和“主机路径”的关系。名称是给虚拟机里用的逻辑标签主机路径才是宿主机上的真实目录。很多人把这两个搞混在虚拟机里找路径找半天其实名称就是你在客户机里的访问“根目录”。第二要不要勾“启用此共享”。这个选项只针对单个共享生效如果你在共享列表里看到一个共享是灰色的多半是没勾这个。我建议把所有共享都勾上省得到时候排查半天。第三虚拟机的访问凭据。共享文件夹默认以当前登录的宿主机用户权限来访问也就是说虚拟机里能读写的范围理论上和宿主机该用户一致这是需要注意的安全边界。Linux 客户机挂载方式是这样的# 创建一个挂载点 sudo mkdir -p /mnt/hgfs # 挂载所有 vmware 共享 sudo mount -t vmhgfs .host:/ /mnt/hgfs如果出现mount: unknown filesystem type vmhgfs说明 vmhgfs-fuse 模块没加载或者没装 fuse。Ubuntu 下可以执行sudo apt install -y fuse sudo modprobe vmhgfs然后重新挂载。用vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid1000,gid1000也可以直接以当前用户身份挂载避免permission denied问题。这里的 uid 和 gid 可以用id -u和id -g查。挂载成功后你就能在/mnt/hgfs/共享名称/下看到宿主机目录里的文件了。Windows 客户机则更省事开共享后用net use Z: \\vmware-host\Shared Folders\共享名称或者直接在“此电脑”地址栏输入\\vmware-host\Shared Folders就能看到所有共享目录。2.3 开机自动挂载和权限细节很多 Linux 用户挂载是成功了但一重启就废原因是不想每次手动敲 mount 命令。解决办法是把挂载语句写进/etc/fstab但这里有个大坑fstab 里写 vmhgfs 类型的挂载开机时内核模块和网络还没准备好经常挂载失败。我实测最稳的方式是写成 systemd 服务或者干脆在/etc/rc.local里延迟执行。给一个简单可用的 systemd 单元示例# /etc/systemd/system/vmhgfs-mount.service [Unit] DescriptionMount VMware Shared Folders Afternetwork.target [Service] Typeoneshot ExecStart/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other,uid1000,gid1000,umask022 RemainAfterExityes [Install] WantedBymulti-user.target然后sudo systemctl daemon-reload sudo systemctl enable --now vmhgfs-mount.service这个方法我在 Ubuntu 20.04/22.04 上反复验证过比 fstab 稳得多。顺带提一句 uid/gid 别用 0root否则虚拟机里的普通用户还是访问不了别问我怎么知道的问就是我曾在 root 权限下折腾了一下午。3. 核心细节解析与实操要点VirtualBox 共享文件夹篇3.1 增强功能和共享文件夹配置VirtualBox 的共享文件夹思路和 VMware 类似但操作路径不同在虚拟机运行时菜单栏“设备 - 安装增强功能”或者命令行VBoxManage都能搞定。Linux 客户机安装增强功能依赖编译工具链否则VBoxLinuxAdditions.run会失败。Debian/Ubuntu 系需先装sudo apt install -y build-essential linux-headers-$(uname -r) dkms如果内核 headers 装不上多半是 apt 源的问题换国内镜像源后重新apt update再试很多人在这一步被劝退。装完增强功能重启然后在“设备 - 共享文件夹 - 共享文件夹设置”里添加宿主机目录注意勾选“自动挂载”和“固定分配”。Linux 客户机会自动挂载到/media/sf_共享名但默认访问权限是 vboxsf 用户组你当前用户不在组里就只能干瞪眼。解决办法sudo usermod -aG vboxsf 你的用户名重新登录后就能读写/media/sf_共享名下的文件了。3.2 命令行配置和跨宿主机使用如果你习惯纯命令路线可以用 VBoxManage 在宿主机侧添加共享VBoxManage sharedfolder add 虚拟机名称 --name share --hostpath /宿主机/目录 --automount这个命令我在自动化脚本里用得多适合批量创建虚拟机后统一配置。VirtualBox 的共享文件夹也支持“临时只读”模式适合你只希望虚拟机读取安装包但不允许它删改的场景比如把 ISO 挂载目录设成只读。关于 Windows 客户机VirtualBox 默认会把共享文件夹映射为网络驱动器但偶尔会出现盘符不出现的情况。此时在虚拟机的 Windows 里按WinR输入\\VBOXSVR\共享名回车就能访问。这是很多教程没提但非常实用的小技巧。3.3 不装增强功能的备用方案有人会问我的虚拟机就是装不上增强功能或者我用的精简版系统不带系统头文件怎么办那就别纠结共享文件夹了直接用网络共享绕过去。这也是我经常采用的路子。把宿主机上要共享的目录开成 SMB 共享然后虚拟机里通过\\192.168.x.x\share访问。Ubuntu 虚拟机里挂载很简单sudo apt install -y cifs-utils sudo mkdir -p /mnt/host_share sudo mount -t cifs //192.168.x.x/share /mnt/host_share -o username宿主机用户名,password密码,uid1000,gid1000Windows 宿主机开启共享的方式是右键目录 - 属性 - 共享 - 高级共享设置好共享名后再在网络和共享中心里打开“网络发现”和“文件和打印机共享”。这一步少一个其他机器就找不到你的共享。4. 实操过程与核心环节实现用三套方案彻底打通文件互传4.1 方案一VMware 完整配置流程Ubuntu 客户机假设宿主机是 Windows虚拟机是 Ubuntu Server 22.04我们来走一遍全流程。第一步安装 open-vm-toolssudo apt update sudo apt install -y open-vm-tools第二步在 VMware 里配置共享目录虚拟机右键设置进入“选项 - 共享文件夹”勾选“总是启用”然后添加主机路径选择D:\workspace名称填workspace。第三步客户机挂载sudo mkdir -p /mnt/workspace sudo vmhgfs-fuse .host:/workspace /mnt/workspace -o allow_other,uid1000,gid1000第四步验证写入echo test /mnt/workspace/test.txt然后去宿主机 D 盘看看 test.txt 在不在。在就说明整个链路通了。这里补充一下vmhgfs-fuse .host:/workspace里的.host:是 VMware 专门给的虚拟主机标识/workspace对应刚刚添加共享时填的“名称”不是宿主机路径。这算是最常见的理解误区。4.2 方案二VirtualBox Samba 网络共享Windows 访问 Linux这个场景在开发环境里很常见宿主机 Windows虚拟机 Ubuntu 里跑服务想把日志共享给宿主机看。VirtualBox 的共享文件夹可以但很多时候 Samba 更灵活。虚拟机的网卡模式我建议设成“桥接模式”或“NAT 模式加端口转发”保证宿主机和虚拟机之间能互相 ping 通。然后安装并配置 Sambasudo apt install -y samba sudo mkdir -p /srv/share sudo chmod 777 /srv/share修改/etc/samba/smb.conf在文件末尾加入[share] path /srv/share browseable yes read only no guest ok yes force user nobody force group nogroup然后重启 Samba 服务sudo systemctl restart smbdWindows 宿主机访问时地址栏输入\\192.168.x.x\share就能看到共享目录了。如果要加密码去掉guest ok yes然后给 Samba 用户设密码sudo smbpasswd -a 用户名Windows 访问时会弹出凭据输入框输进去就行。这套方案不依赖 VirtualBox 增强功能跨 Windows/Linux/macOS 都没问题。4.3 方案三Python 一行命令开启临时共享有些场景你只是临时发个文件没必要配 Samba 或共享文件夹。Python 的内置 HTTP 服务器就是一个非常实用的备选方案。在要共享的目录下执行python3 -m http.server 8000然后在另一台机器浏览器里访问http://宿主机IP:8000就能下载该目录里的文件了。Windows 上没有 python3 的话用 py 也是同理py -m http.server 8000这个方案只支持下载不支持上传。如果你要临时上传可以用 Python 的 uploadserver 模块pip install uploadserver python3 -m uploadserver 8000然后访问同一个地址页面里就多了一个选择文件上传的按钮。这种方式做临时中转特别好用尤其是在两台机器之间没有共享配置的情况下比插 U 盘快太多了。实测小提示记得在两台机器上把防火墙打开对应的 TCP 端口否则访问不了。Windows 宿主机弹窗时直接点“允许访问”Linux 虚拟机用ufw allow 8000。4.4 端口转发与 vm 连接的外部场景热词里有个 “failed to connect to remote vm com.sun.jdi.connect.spi.closedconnectionexcep”这个其实是 Java 远程调试连接虚拟机时常见报错。问题往往不是 JVM 本身而是虚拟机网络配置导致调试端口不通。如果你的虚拟机跑的是 Java 应用宿主机要连进来调试需要确认三件事虚拟机的 IP 能 ping 通调试端口默认 5005没被防火墙拦截JVM 启动参数加的是-agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005。对于新版本 JDKaddress*:5005和address5005有区别前者监听所有网卡后者只监听本机回环地址所以建议显式写*:5005。这个问题之所以出现在“共享文件夹”的场景里是因为很多调试环境的代码文件就是通过共享目录挂进去的。文件内容能同步但网络层没放开Java 的 Socket 连接自然失败。5. 常见问题与排查技巧实录看完能自己搞定 90% 的报错5.1 Windows 共享文件夹报错速查表很多人遇到报错就慌其实 Windows 的错误码就那么几个规律。我整理了一张表基本覆盖高频问题错误代码 / 现象常见原因解决办法0x80070035 网络路径找不到SMB 协议被禁用、网络发现关闭启用 SMB 1.0/2.0打开网络发现0x80004005 无法访问共享文件夹凭据过期、权限不足用net use * /delete清理旧凭据重新认证0x800704b3 网络路径错误网卡被禁用、网络连接断开检查适配器状态ipconfig确认 IP拒绝访问共享权限和 NTFS 权限不匹配同时检查“共享”页和“安全”页的权限无法访问提示找不到网络名445 端口被防火墙拦截放行 445 或检查防火墙规则输入密码后一直弹窗本机凭据管理器存了旧密码WinR 输入control keymgr.dll删除旧凭据处理这类问题的优先顺序是先看网络通不通再查 SMB 服务开没开再看共享权限和防火墙最后看凭据。很多人第一步就卡在“网络发现”上控制面板 - 所有控制面板项 - 网络和共享中心 - 高级共享设置把当前配置文件的“网络发现”和“文件和打印机共享”都打开。尤其是 Win11默认网络发现是关闭的这也是为什么 Win11 访问共享文件夹老报 0x80070035 的头号原因。5.2 Linux 挂载共享目录的常见报错mount: unknown filesystem type vmhgfs内核模块没加载。执行sudo modprobe vmhgfs如果模块不存在就重装 open-vm-tools。no such file or directory共享名称填错了。先去共享设置里确认“名称”再检查挂载点的绝对路径。permission denied用户或者权限问题。加上uid1000,gid1000,allow_other参数重挂并确认宿主机目录本身可读。cannot mount: Host unreachable宿主机侧的 VMware Tools 服务没跑起来或者共享文件夹没有“总是启用”只启用了“在下次打开电源时启用”。5.3 关于“输入的文件夹似乎无效”与“共享文件夹需要密码”“共享文件夹似乎无效”这个提示我见过两种来源。一是 Windows 的“添加网络位置”向导当你输入\\192.168.x.x\share时如果对方没开共享、路径不存在、防火墙拦截就会提示无效。二是某些国产办公软件内置的网络位置添加功能本质也是 SMB 路径探测。排查思路是先在资源管理器地址栏直接输这个 UNC 路径看能不能访问。能访问说明是向导问题不能访问问题就在共享配置上按 5.1 的表格逐步排查。“共享文件夹怎么设密码”这个问题本质上也是 SMB 权限问题。Windows 共享没有单独的“共享密码”它验证的是你访问时输入的另一个 Windows 账户的用户名和密码。所以想要设密码就是关闭“来宾账户”或者取消勾选共享设置里的“允许其他用户修改我的文件”让对方必须以带密码的账户登录。Samba 共享则用smbpasswd单独管理用户密码多了一层独立性。6. 经验沉淀我把方案浓缩成一句话版本每次我把这套流程讲完之后总有人问我能不能给个“最短路径”。我自己常用的判断逻辑是这样的Windows 宿主机 VMware 虚拟机直接共享文件夹 open-vm-tools稳定省心。Linux 宿主机 Windows 虚拟机优先 Samba别和增强功能死磕。临时中转Python HTTP 服务一键搞定用完就关。另外还有两个我在实际使用中发现的小细节值得说一说一是共享文件夹不要放太多小文件尤其是 node_modules 这种上万个文件的目录FUSE 在遍历目录时速度会让你怀疑人生重度开发场景更推荐把代码放虚拟机本地磁盘通过版本库或者 rsync 同步到宿主而不是直接挂共享目录编译。二是不要同时用多个方案挂同一个目录我见过又开 VMware 共享文件夹又开 Samba 指向同一宿主机目录的结果是出现文件锁竞争文件突然变只读排查了半小时最后发现是两个协议互相打架。虚拟机共享文件夹这个功能说穿了就是“媒介”二字。它解决的问题永远是你如何在两台逻辑隔离的系统之间高效传递数据。理解了底层是 FUSE 驱动也好、SMB 协议也罢再遇到报错就不会慌因为你知道它本质上是在做什么也知道该往哪个方向去查。希望这篇文章能帮你把这件小事彻底搞定。
企业数字化 ERP 产品动态
相关推荐
Codex与Skill技能配置:AI短剧自动化生产流水线实战拆解 1. 项目整体设计与思路拆解1.1 为什么是 Codex:AI 短剧生产缺的不是模型,而是执行者短剧这个词,这两年已经从一个内容品类变成了一个产业。单集时长控制在 1-3 分钟,节奏快、反转密、爽点连续,一天更新好几集ÿ… · 2026/9/26 20:16:09
MySQL 数据库设计实战:四张核心表的 DDL 建表语句拆解与索引外键规划 接手一个学校信息管理系统的数据库设计任务时,我最先动手的往往不是业务代码,而是那一张张建表语句。今天要拆的这份 schoolDB 对应的四个表的 DDL,就是我从实际项目里沉淀出来的最小闭环方案:学生表、教师表、课程表、选课成绩表… · 2026/9/26 20:50:47
禁止 Conda 自动激活 base 环境:原理与三种实用方法 作为天天跟终端打交道的人,每次打开终端,行首都挂着一个刺眼的(base),一开始还觉得挺酷,好像在提醒我“你是个玩 Python 的”,但时间一长,这玩意儿就烦了。尤其是当你在多个环境里切来切去,或者… · 2026/9/26 20:50:47
MySQL库表操作实战:从建库建表到字符集、存储引擎与锁表避坑 MySQL入门绕不开的就是数据库和表的操作。我见过太多新手在业务代码里写得很溜,结果一让建库建表、调字段类型、改字符集就卡壳,反而把线上环境搞出乱码、锁表、连接超时这些破事。其实数据库和表的操作才是MySQL最核心的基本功,你今天所有的… · 2026/9/26 20:50:47
Word下划线全解析:从Ctrl+U到制表位与段落下边框的排版实践 1. 下划线这件事,远比CtrlU复杂Word里的下划线,表面上看是工具栏上一个按钮的事,但真正在文档排版里摸爬滚打过的人都知道,这里面的门道能拆出至少四个完全不同的场景:给文字加下划线、在空白处画横线、批量给特定内容… · 2026/9/26 20:50:47
SAP HCM数据表核心解析:从PA0001到簇表PCL1的查询与排错指南 干SAP项目这么多年,尤其是负责HCM模块的时候,经常会有同事把表清单打印出来贴墙上看。刚入门的顾问也喜欢问:能不能给我一份HCM数据表大全,最好是那种字母序排好的,查到哪张表直接套用。说实话,SAP HCM的数… · 2026/9/26 20:50:47
Obsidian AI集成三层架构:工具层、代理层与内核层深度解析 1. 这不是又一个“Obsidian速成课”:为什么24分钟必须拆解AI集成的三层逻辑你搜“Obsidian教程”,页面刷出来上百个“5分钟上手”“10分钟搭建知识库”——结果点开全是基础界面介绍、几个插件安装截图、再配上几句“强大”“自由”“双链无敌”的空泛赞… · 2026/9/26 20:50:39
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46