虚拟机的共享文件、剪贴板与网络三种能力,本质上都是通过宿主机的虚拟化层做“桥接”,其中文件共享是最常用也最容易踩坑的一项。不管是 VMware Workstation 还是 VirtualBox,只要把增强工具装好、共享路径设置对,就能让虚拟机像局域网里的另一台电脑一样,顺畅地和宿主机交换数据,下面按使用频率从高到低拆开讲。
先搞懂虚拟机共享的三种形态
不少人一上来就问“虚拟机怎么共享文件”,其实共享这个事儿在虚拟机里分三条路:文件共享、剪贴板共享、网络共享,它们解决的是不同场景的问题,混在一起想就会觉得复杂。
- 文件共享:在宿主机和虚拟机之间划出一个公共目录,双方都能读写,适合传安装包、项目代码、文档资料。
- 剪贴板共享:宿主机复制文字、图片,直接粘贴到虚拟机里,反向同理,适合复制账号密码、短文本、小截图。
- 网络共享:虚拟机通过宿主机上网,或者和宿主机互相 ping 通,适合装系统时联网、调试前后端项目。
三个能力的原理都是“虚拟硬件 + 宿主机驱动”,但配置入口完全不同,多数用户卡在文件共享上,主要原因是装了虚拟机软件后没有装“增强工具”。
虚拟机共享文件,为什么总是不显示
这个问题在各类技术社区里被问了几百遍,答案其实很固定,先说你最可能漏掉的一步:没装 VMware Tools 或 VirtualBox 增强功能,这两个东西相当于虚拟机的“网卡驱动 + 显卡驱动 + 共享服务”三合一补丁,不装的话,共享文件夹的设置界面都是灰色的,或者设完了虚拟机里完全看不到对应盘符。
具体排查顺序如下:
- 在 VMware 里,菜单栏点击“虚拟机” -> “安装 VMware Tools”,然后在虚拟机内运行安装程序,装完重启。
- 在 VirtualBox 里,菜单栏点击“设备” -> “安装增强功能”,然后在虚拟机内加载光盘镜像运行安装,装完重启。
- 重启后,再去做共享文件夹的配置,成功率会高很多。
业内专家指出,超过八成的“共享失败”都出在没装增强工具这个环节,而不是路径写错或权限没开。
虚拟机怎么共享文件:两个主流软件的实操路径
这里分两个软件讲,因为它们的菜单位置完全不同,如果你用的是 VMware Workstation,操作路径是:虚拟机 -> 设置 -> 选项 -> 共享文件夹 -> 总是启用 -> 添加
,添加时选择宿主机的任意目录,D 盘下的 share 文件夹,然后在“名称”里给它起个简短的名字,share,这个名称就是之后在虚拟机里看到的挂载名。
如果你用的是 VirtualBox,路径是:设备 -> 共享文件夹 -> 共享文件夹设置 -> 添加共享文件夹,文件夹路径选宿主机的目录,共享名称同样起个简短的名字,注意勾选“自动挂载”和“固定分配”,自动挂载的意思是每次开虚拟机都会自动连接这个目录,固定分配则是说这个共享是永久有效的。
在 Windows 虚拟机里,共享目录会出现在“此电脑”的网络位置或盘符列表里,通常显示为 \VBOXSVRshare 或 Z盘 类似形式,在 Linux 虚拟机里,共享目录一般挂在 /mnt/hgfs/share(VMware)或者 /media/sf_share(VirtualBox),如果没看到,可以先执行 ls /mnt/hgfs 或 ls /media 确认一下,有时候只是文件管理器没刷新。
很多用户搞混的是:共享文件夹是“双向”的,宿主机放文件进去,虚拟机立刻能读;虚拟机写文件进去,宿主机也能直接打开。不需要任何额外的传输协议,也不需要插 U 盘。
虚拟机共享剪贴板为什么会失效
剪贴板共享是最容易被忽略却又最影响体验的功能,很多人装完虚拟机,发现从宿主机复制一段代码,切到虚拟机里粘贴没反应,就以为虚拟机不支持,其实是因为默认设置里剪贴板共享是关闭的。
在 VMware 里,开启路径是:编辑 -> 虚拟机设置 -> 选项 -> 客户机隔离 -> 勾选“启用复制粘贴”,如果你已经打开虚拟机再改设置,需要重启虚拟机才能生效,在 VirtualBox 里相对简单,点顶部菜单“设备” -> “共享剪贴板” -> 选择“双向”,一般不需要重启。
这里有一个使用细节:剪贴板共享只能传纯文本和小图片,大文件复制极易卡死或丢失,比如从宿主机拖一个 2GB 的压缩包到虚拟机桌面,看起来是在复制,但实际耗时长且极易中断,正确的做法是把文件放进共享文件夹,再在虚拟机里访问该目录,这样速度更快也更稳定。
剪贴板共享还有一个坑:在 Linux 中安装全新桌面环境时,剪贴板服务会受 Wayland 会话影响,遇到粘贴失效,先确认虚拟机系统固件更新完整,再尝试换成 Xorg 会话,多数情况下能解决。
虚拟机的共享网络设置,比想象中简单
文件共享解决了,接下来是网络共享,虚拟机的网络大部分时候是自动的,不需要干预,但如果你想让宿主机和虚拟机互相访问,比如在浏览器里访问虚拟机里的开发服务,就需要手动配置。
VMware 默认三种网络模式:
- 桥接模式:虚拟机直接占用局域网 IP,和宿主机平级,可以互相访问,也能访问外部网络。
- NAT 模式:虚拟机和宿主机共用一个 IP 出口,虚拟机可以上网,但外网设备不能主动访问虚拟机。
- 仅主机模式:虚拟机和宿主机单独组成内网,不能上网,只能互相 ping。
VirtualBox 的设置逻辑大同小异,如果你做前后端开发,推荐用 NAT 模式,然后额外配置一条“端口转发”规则,把虚拟机的 80 端口映射到宿主机的 8080,这样宿主机浏览器输入 localhost:8080 就能访问虚拟机里的网站。
具体操作:虚拟机设置 -> 网络 -> 高级 -> 端口转发 -> 添加规则,主机端口填 8080,子系统端口填 80,其他留空即可,这条规则在 NAT 模式下生效很快,基本不用重启。
虚拟机共享文件夹,哪种场景下体验最好
宿主机是 Windows 且虚拟机是 Linux,共享归档项目的代码
这类用户占相当大比例,设置路径:Windows 宿主机建一个 code 文件夹,虚拟机里挂在 /mnt/hgfs/code,然后用本地 VS Code 的 Remote-SSH 或直接在虚拟机里用命令行开发,宿主机同步备份代码,这样好处是代码在宿主机上便于备份,虚拟机里跑编译和测试环境,两不耽误。
宿主机和虚拟机都是 Windows,互相传演示视频或大体积安装包
直接把共享文件夹指向宿主机的下载目录,虚拟机里点开就能访问,不用再通过微信文件传输助手绕一圈,传输速度接近硬盘本身速度。
宿主机是 macOS 且虚拟机是 Windows,跑网银系统或老款行业软件
Parallels Desktop 的共享体验最顺滑,几乎和本地文件夹融为一体,偶尔有人问“虚拟机共享文件 哪个好用”,如果预算允许、电脑是 M 系列芯片,Parallels 的体验确实值回票价;但如果是折腾性选手或者追求免费,虚拟机的共享文件夹机制已经足够覆盖多数需求,区别只在于配置界面的美观程度。
共享文件夹的设置提醒
- 共享名称不要带中文和空格,否则部分老旧 Linux 系统会挂载失败。
- 设置完共享后,如果虚拟机里看不到,先尝试重启虚拟机,而不是反复改路径。
- 不要在共享目录里直接运行数据库类应用,因为 I/O 走的是虚拟层,性能损耗明显。
- 定期清理共享目录中的临时文件,否则宿主机磁盘容易不知不觉被占满。
虚拟机的共享文件在Windows和Linux之间怎么互通
Windows 和 Linux 之间的共享文件互通,核心就是上文的挂载路径,Windows 里设置共享目录为 D:vmshare,Linux 虚拟机里访问 /mnt/hgfs/vmshare,两边文件实时同步,如果你想反过来从 Linux 虚拟机访问 Windows 宿主机的任意目录,也可以把宿主机某个盘符整个共享进去,不过业界普遍不太建议,因为风险高,误删了宿主机的系统文件就麻烦了。
虚拟机共享粘贴板和共享文件夹是同一个开关吗
不是,共享粘贴板是“客户机隔离”或“共享剪贴板”选项,共享文件夹是独立的面板,两者互不影响,需要分别打开,如果你装的是精简版虚拟机系统,比如某些 Ghost Windows,可能缺少必要的服务组件,即使打开了开关也无法使用,这时建议换成原版系统镜像。
尾声
虚拟机的共享并不神秘,文件走增强工具挂载,剪贴板走虚拟设备通道,网络走虚拟网卡,把每一次共享想象成给虚拟机“插一根虚拟的传输线”,线的两头都接稳了,信息自然通畅。
补充一下 Q&A 模块。
虚拟机共享文件夹存在的意义是什么
它让宿主机和虚拟机之间无需借助 U 盘、网盘或局域网传输,直接以目录为边界互相读写,优势在于延迟低、配置简单、适合代码和文档的实时同步。
为什么虚拟机的共享文件夹在 Linux 下显示不出来
多数原因是没装增强工具,或挂载点不存在,在 Linux 端执行 ls /mnt/hgfs 查看是否有内容,若提示目录不存在,可以手动创建 /mnt/hgfs 后重新执行挂载,或者重启虚拟机让增强工具自动挂载。
VMware 和 VirtualBox 在共享体验上有明显差距吗
Framework 上两者功能几乎等同,都能实现文件、剪贴板、拖拽的共享,区别在于 VMware 的配置入口更隐蔽但稳定,VirtualBox 的菜单位置更直白但偶尔依赖额外系统组件,日常使用的话,免费版 VirtualBox 足够,追求开箱即用的流畅感可以考虑 VMware Workstation Pro,如果你是在 Mac 上使用,Parallels Desktop 的共享文件渲染效果最接近原生,虚拟机里编辑的文件可以直接通过访达搜索到,这是其余两款软件尚未完全做到的细节。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/640395.html




