虚拟机共享文件夹与映射网络驱动器设置及排障指南
发布时间:2026/10/1 5:44:27来源:尧图网络
虚拟机这个东西装好系统只是第一步真正用起来之后你会发现最烦人的不是内存分配不够也不是CPU核心数给少了而是主机和虚拟机之间的文件到底怎么传。截图要拷出来、配置文件要拖进去、编译好的程序要拿到主机上跑一遍验证来回折腾几次你就会明白靠U盘、靠聊天软件自己发给自己、靠网盘中转全都是自找麻烦。这篇内容就专门讲清楚两件事一是虚拟机里的共享文件夹怎么设置才能真正用起来二是映射网络驱动这套方案怎么落地让你在此电脑里直接看到虚拟机的目录像访问本地磁盘一样点开就用。不管你是刚装完 VMware 的新手还是已经踩过共享文件夹设置完在 /mnt/hgfs 里啥也没有这个坑的老手下面的内容都能对得上。我会按为什么这么设计 → 怎么设置 → 出问题怎么查 → 不同发行版有什么差异这个顺序讲涉及命令的地方都给出可直接复制的写法也会把参数为什么这么写解释清楚。虚拟机安装、共享文件夹、映射网络驱动这几个关键词相关的问题基本都能在这里找到答案。1. 共享文件夹这件事本质上在解决什么1.1 主机与虚拟机之间的那道数据墙虚拟机在逻辑上是一台独立电脑它有自己独立的文件系统、独立的网络栈、独立的用户体系。你主机上的 D 盘对它来说是完全不存在的它只能看见自己在虚拟磁盘文件vmdk 那一堆里划出来的那块空间。这种隔离是好事快照、回滚、隔离测试环境全靠它但它带来一个副作用两边的文件天然不通。最原始的做法是把文件塞进 ISO 镜像然后挂载到虚拟机光驱里读一遍。这招在装驱动、传工具包的时候还行但日常开发明显不现实因为 ISO 是只读的而且每次都要重新生成、重新挂载。第二种做法是直接改 vmdk用第三方工具把文件写进虚拟磁盘这个更危险一不小心磁盘结构就坏了。第三种做法就是网盘或者聊天工具中转能解决问题但慢、绕、还依赖外网离线环境下直接歇菜。共享文件夹和网络驱动映射本质上都是在隔离这堵墙上开一个受控的窗口。前者是虚拟机软件自己实现的一套通道走的是 VMware 的底层驱动不需要网络参与后者走的是标准的 SMB/CIFS 协议需要主机和虚拟机网络互通。两条路各有用武之地选错了会很别扭。1.2 几种共享方式的横向对比先把几种常见方案摆在一起看你心里会更有数。我按实际使用频率从高到低排方案依赖条件适用场景主要缺点VMware 共享文件夹安装 VMware Tools / open-vm-tools主机与客户机日常传文件最省事只对 VMware 有效性能一般大文件慢映射网络驱动器SMB/CIFS两边网络互通配置好共享权限需要像本地盘一样长期访问跨多台机器配置项多权限和凭据容易出问题拖拽与剪贴板共享VMware Tools 完整安装临时拷几个小文件大文件经常卡死方向反向拖拽偶发失败SSH / SCP / SFTP客户机开启 SSH 服务跑命令、传代码脚本化程度高需要记 IP 和命令图形界面用户不友好挂载 ISO无需额外配置一次性传只读文件只读每次都要重新做镜像日常使用我的建议是共享文件夹用来做主力配置一次长期有效映射网络驱动器作为需要固定盘符时的补充尤其是你想在虚拟机的资源管理器里直接挂一个 Z 盘的时候拖拽只在临时应急时用别指望它稳定。2. 动手之前环境准备与两件必须做的事2.1 装好 VMware Tools 或 open-vm-tools这是硬前提共享文件夹这个功能完全依赖客户机里运行的那套 VMware 工具。没有它你在虚拟机设置里点了总是启用共享文件夹客户机侧也是看不到任何东西的因为缺少负责通信的驱动和服务。对 Windows 客户机来说直接点菜单里的安装 VMware Tools然后在虚拟机里打开光驱运行安装程序一路下一步就行。装完之后系统托盘会出现 VMware 的小图标任务管理器里能看到vmtoolsd.exe进程在跑这就对了。对 Linux 客户机来说现在的发行版基本都推荐装 open-vm-tools 而不是官方那个 tar 包因为官方包每次内核升级都要重装非常折腾而 open-vm-tools 是发行版维护的跟着内核一起更新。以 Debian/Ubuntu 系为例sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktopRHEL 系Rocky Linux、AlmaLinux、银河麒麟 V10 等sudo dnf install -y open-vm-tools open-vm-tools-desktop银河麒麟 V10 SP1 用的是 dnf 体系命令和上面一样如果提示找不到包就换成yum再试一次。装完之后务必重启一次因为要加载vmw_vmci、vmhgfs这类内核模块不重启经常会出现挂载点存在但内容是空的怪现象。验证是否装好跑这两条systemctl status vmtoolsd vmware-toolbox-cmd -v第一条能看到 active (running)第二条能打印出版本号说明基础环境没问题了。注意open-vm-tools-desktop这个包是给图形界面用的负责自适应分辨率、剪贴板共享、拖拽。如果你是纯命令行服务器只装open-vm-tools就够了装了 desktop 版反而会拉一堆图形依赖进来。2.2 先打快照再动配置这一步很多人嫌麻烦跳过然后出事了再回来哭。共享文件夹和网络驱动映射这两个功能都会改系统配置文件尤其是 fstab 和各种挂载单元。fstab 写错一行机器可能直接进不了系统卡在启动阶段只能进救援模式改回来。所以动配置之前先在 VMware 里点快照 → 拍摄快照名字随便起个配置共享前。真出问题了两秒钟回滚比你在救援模式里敲半天命令省事得多。我自己的习惯是每做一次涉及挂载、网络、系统服务的改动都先打一个快照吃完这顿教训的人都懂。3. VMware 共享文件夹从零设置到挂载可用3.1 图形界面里的设置步骤整个流程分两侧先主机侧开开关再客户机侧挂载。主机侧的操作路径是先关机或者挂起虚拟机部分版本的 VMware 允许运行中改但为了稳妥建议关机再改然后右键虚拟机 → 设置 → 切到选项标签页 → 找到共享文件夹 → 选总是启用 → 点添加按钮。弹出的向导里要填三个东西主机路径选你主机上那个准备共享出去的目录比如D:\vmshare。注意路径里尽量别用中文和空格虽然新版支持但老版本和 Linux 侧挂载时经常出编码问题。名称这才是客户机里看到的名字可以叫share或者vmshare全小写字母最稳。属性勾选启用此共享只读还是读写按需选。如果要往里面写东西必须选读写。点确定保存然后开机。到这里只是通道打开了客户机里还没挂上。3.2 客户机里那个 hgfs 目录到底在哪Linux 客户机里共享文件夹默认的挂载点是/mnt/hgfs。但很多新系统里这个目录是空的甚至根本不自动挂载这就是vmware 共享文件夹设置后找不到文件这个问题的根源。原因通常是vmhgfs-fuse没有被自动拉起或者挂载点没被创建。先手动确认一下ls /mnt/hgfs如果没输出先创建目录再手动挂载sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000 -o gid1000这条命令里的几个参数值得解释.host:/是 VMware 提供的虚拟主机路径/后面跟的才是共享名。写/表示挂载全部共享。allow_other让非 root 用户也能访问这个挂载点不加的话你会发现只有 sudo 才能进去。uid1000和gid1000把文件属主强制映射成你的日常用户避免文件是 root 的我没法写这个经典问题。用id命令确认自己的 uid 和 gid多数桌面发行版第一个用户就是 1000。挂完再ls /mnt/hgfs应该能看到你刚才在设置里起的那个共享名比如share。进去touch一个文件测试一下写入touch /mnt/hgfs/share/test.txt echo ok主机侧打开D:\vmshare看看文件在不在出现了就说明通了。3.3 手动挂载与 fstab 开机自动挂载手动挂载重启就没了所以要做持久化。写入/etc/fstab.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults,uid1000,gid1000 0 0写完别急着重启先跑sudo mount -a验证一次。这一步是保命的如果 fstab 里有语法错误mount -a会当场报错告诉你哪一行有问题如果你直接重启机器可能就起不来了。fuse.vmhgfs-fuse这个文件系统类型在不同发行版里写法略有差异有的写vmhgfs-fuse有的写fuse.vmhgfs-fuse。如果报unknown filesystem type用man vmhgfs-fuse或者查看/sbin/mount.vmhgfs-fuse是否存在来确定正确写法。注意defaults里包含auto意味着开机就会尝试挂载。如果你的系统在启动早期还没加载 fuse 模块可能挂载失败。稳妥点的做法是加上nofail选项这样即使挂载失败也不会卡住启动流程allow_other,nofail,uid1000,gid1000 0 0。3.4 Windows 客户机访问共享文件夹的路径如果客户机本身是 Windows事情简单很多。装好 VMware Tools 之后打开资源管理器地址栏直接输入\\vmware-host\Shared Folders回车就能看到共享的目录。想让它变成固定盘符右键那个文件夹 → 映射网络驱动器选个 Z 盘勾上登录时重新连接以后每次开机自动就有了。这个路径走的是 VMware 自己的机制不需要主机开放任何 SMB 端口比配置网络共享安全得多也不受防火墙影响。这也是我推荐 Windows 客户机优先用这种方式的原因。4. 映射网络驱动器让虚拟机目录出现在此电脑4.1 为什么还要搞网络驱动映射共享文件夹虽然方便但有两个明显短板一是只能一对一主机和这台虚拟机之间通虚拟机之间、其他物理机之间都不行二是性能一般尤其是拷贝大量小文件的时候速度明显不如 SMB。当你需要多台机器访问同一份数据或者需要更接近原生文件系统的读写体验时就该上 SMB/CIFS 这条路了。还有一个场景是共享文件夹解决不了的主机是 Linux客户机是 Windows或者反过来。这种情况下两边用 SMB 互通通用性最好因为 SMB 是跨平台的事实标准。4.2 网络先要通三种模式怎么选映射网络驱动器的前提是主机和客户机能互相 ping 通。VMware 的网络模式直接决定了这件事NAT 模式虚拟机通过主机上网虚拟机可以访问主机但主机访问虚拟机需要额外配置端口转发同网段的其他机器完全看不到虚拟机。桥接模式虚拟机直接接入物理局域网和主机是同一个网段互相访问最自然多台机器也能互访。仅主机模式Host-Only虚拟机只能和主机通信用 VMnet1 这块虚拟网卡。适合隔离环境测试也能满足映射需求但要注意主机的 VMnet1 网卡必须有正常 IP。要做网络驱动映射桥接模式是最省心的。切到桥接之后在客户机里ip addrLinux或ipconfigWindows看到和主机同网段的地址就说明通了。顺便提一句有人遇到过vmnet1 有感叹号的情况这通常是虚拟网卡驱动没装好在网络适配器里禁用再启用一次或者修复安装 VMware 就行。4.3 主机侧把共享目录做规范以 Windows 主机为例步骤是右键目标文件夹 → 属性 → 共享 → 高级共享 → 勾选共享此文件夹。点权限把需要访问的账号加进去给更改和读取权限。不要图省事给 Everyone 完全控制尤其是这台机器还在局域网里的时候。切到安全标签页确认 NTFS 权限里同一个账号也有相应权限。SMB 共享权限和 NTFS 权限是取交集的两边都放开才行这是最常见的明明给了权限还是拒绝访问的原因。打开网络和共享中心 → 更改高级共享设置 → 确认启用文件和打印机共享打开并且当前网络配置文件是专用网络。Win10/Win11 默认把新网络识别为公用网络会直接挡掉所有入站共享请求。记下主机的 IP命令行ipconfig一看就有比如192.168.1.100。4.4 Windows 客户机映射网络驱动器图形界面做法很直观资源管理器 → 右键此电脑 → 映射网络驱动器 → 驱动器号选 Z → 文件夹填\\192.168.1.100\vmshare→ 勾选使用其他凭据连接 → 输入主机上的账号密码 → 完成。命令行做法更适合脚本化也方便排查net use Z: \\192.168.1.100\vmshare /user:vmuser /persistent:yes回车后会提示输入密码。/persistent:yes表示开机自动重连。如果要断开用net use Z: /delete。查看当前所有映射用net use不带参数。注意net use命令可以带/user:用户名 密码直接明文传密码但这样密码会留在命令历史里不推荐。让系统弹窗输入更安全。另外如果主机账号没有设密码Windows 默认策略会拒绝网络登录必须给账号设个密码。4.5 Linux 客户机挂载 Windows 共享Linux 侧用的是 cifs 工具集先装包sudo apt install -y cifs-utils # Debian/Ubuntu sudo dnf install -y cifs-utils # RHEL/Rocky/麒麟创建挂载点并手动挂一次sudo mkdir -p /mnt/winshare sudo mount -t cifs //192.168.1.100/vmshare /mnt/winshare \ -o usernamevmuser,password你的密码,uid1000,gid1000,iocharsetutf8,vers3.0这里的参数选择是有讲究的uid/gidCIFS 挂载的文件属主默认是 root不指定的话普通用户只能读不能写。iocharsetutf8解决中文文件名乱码。如果挂上去文件名是问号或者方块基本就是这个参数没写对。vers3.0指定 SMB 协议版本。不指定的话内核会去协商某些情况下协商失败会报mount error(112) Host is down看着像网络问题其实是协议版本不匹配。可以依次试3.1.1、3.0、2.1、1.0。注意 1.0 就是老旧的 SMB1安全风险高只在访问非常老的设备时临时用。不想在命令里写明文密码就建个凭据文件sudo tee /etc/cifs-cred /dev/null EOF usernamevmuser password你的密码 EOF sudo chmod 600 /etc/cifs-cred然后挂载命令简化成sudo mount -t cifs //192.168.1.100/vmshare /mnt/winshare \ -o credentials/etc/cifs-cred,uid1000,gid1000,iocharsetutf8,vers3.0凭据文件的权限必须是 600否则 cifs-utils 会直接拒绝使用这是内置的安全检查。4.6 重启后挂载失效的根治办法cifs 挂载共享文件夹重启后失效这个搜索词出现频率极高根本原因是 fstab 里的挂载发生在网络就绪之前。开机时系统按顺序挂载文件系统轮到你这行 cifs 的时候网卡还没拿到 IP自然就连不上。正确的 fstab 写法是//192.168.1.100/vmshare /mnt/winshare cifs credentials/etc/cifs-cred,uid1000,gid1000,iocharsetutf8,vers3.0,_netdev,nofail 0 0关键是两个选项_netdev告诉系统这个挂载依赖网络等到网络在线后再挂载。nofail网络真出问题的时候不要卡住启动流程先让系统起来再说。写完执行sudo mount -a验证没有报错再重启。Debian/Ubuntu 系上如果_netdev还是不够那多半是 network-online.target 没被正确触发更彻底的做法是写一个 systemd 的 mount unit或者用x-systemd.automount选项做自动挂载//192.168.1.100/vmshare /mnt/winshare cifs credentials/etc/cifs-cred,uid1000,gid1000,iocharsetutf8,vers3.0,_netdev,nofail,x-systemd.automount 0 0加了 automount 之后这个挂载点变成按需挂载你第一次cd进去的时候系统才真正去连既避开了启动时序问题也省了开机等待时间。5. 排障实录那些年踩过的坑5.1 共享文件夹设置了却看不到内容这是最高频的问题按下面顺序查基本都能定位第一VMware Tools 到底装没装。systemctl status vmtoolsd看服务状态没运行就说明没装或者装坏了重装一遍。第二共享是不是真的启用了。回到虚拟机设置里看一眼总是启用有没有勾上有时候改完忘了点确定白忙活。第三vmhgfs 模块加载了没有。跑lsmod | grep vmw正常应该能看到vmw_vmci、vmhgfs等。没有的话sudo modprobe vmhgfs手动加载试试报错就说明驱动没随内核一起编译。第四挂载点是不是根本空的。mount | grep hgfs看看有没有挂载记录没有就手动挂一次用 3.2 节那条命令。第五内核升级之后失效。这是最隐蔽的一种情况内核从 5.x 升到 6.x 之后旧的 vmhgfs 模块和新内核不匹配共享文件夹突然就没了。解决方法是重装 open-vm-tools 并重启让 DKMS 重新编译模块。5.2 访问被拒、找不到网络路径与凭据问题Windows 侧的报错五花八门但归类下来就那么几种你不能访问此共享文件夹因为你组织的安全策略阻止未经身份验证的来宾访问—— Win10 1809 之后默认禁用来宾登录。正规做法是给主机账号设密码用账号登录如果实在需要来宾访问可以改组策略里Lanman 工作站 → 启用不安全的来宾登录但这意味着允许匿名访问安全性明显下降只建议在完全隔离的实验环境里用。Win11 访问 Win7 共享提示找不到网络路径—— Win7 默认走 SMB1而 Win11 默认没有安装 SMB1 客户端。可以在启用或关闭 Windows 功能里勾上SMB 1.0/CIFS 文件共享支持或者改注册表强制 SMB2。但说句实在话SMB1 协议本身有已知的安全缺陷长期方案还是别让 Win7 继续在生产网络里当文件服务器。一直提示输入凭据输入正确也进不去—— 检查账号名要不要带主机名格式是主机名\用户名或者192.168.1.100\用户名。只写用户名有时候会被解析成客户机本地账号当然验证不过。映射成功但只能读不能写—— 共享权限和 NTFS 权限取交集两边都要给写权限。另外只读属性有时候是文件本身的不是权限问题。5.3 权限、属主与中文乱码Linux 侧挂载 cifs 之后发现文件全是 root 属主、普通用户改不了这是没写uid/gid选项。加上就行。中文乱码分两种情况文件名乱码说明iocharset要写utf8如果主机是 Windows 且用了特殊字符还得考虑noperm选项的影响。挂载参数里我一般会加上file_mode0777,dir_mode0777让所有用户都能读写虽然不是最细粒度的权限控制但对个人实验环境来说最省事。还有一种情况是共享文件夹里文件显示的大小和实际不符或者时间戳全是 1970 年这是 CIFS 时间戳映射的正常表现不影响读写不用管。5.4 问题排查速查表我把上面这些整理成一张表出问题时对着看能省不少时间现象最可能的原因处理办法/mnt/hgfs 为空未装 VMware Tools 或未挂载装 open-vm-tools手动 vmhgfs-fuse 挂载共享文件夹突然消失内核升级导致模块失配重装 open-vm-tools 并重启cifs 重启后失效挂载早于网络就绪fstab 加_netdev,nofail或用x-systemd.automountmount error(112)SMB 协议版本不匹配显式指定vers3.0或更低版本mount error(13)用户名密码错或权限不足检查凭据文件和共享权限中文文件名乱码字符集未指定加iocharsetutf8找不到网络路径网络模式不对或防火墙拦截切桥接模式检查防火墙入站规则提示凭据错误但密码正确账号格式不对改成主机名\用户名或IP\用户名写入提示权限不足uid/gid 未映射挂载选项加uid1000,gid1000映射的盘符开机不见了未勾选持久化net use加/persistent:yes6. 不同发行版与场景下的差异处理6.1 RHEL 系Rocky Linux 与银河麒麟 V10RHEL 系发行版包括 Rocky Linux、AlmaLinux、银河麒麟 V10 SP1、openEuler 这类和 Debian 系在共享文件夹这块最大的差别在包管理和防火墙。包管理上用dnf install open-vm-tools open-vm-tools-desktop就行和前面说的一样。但 RHEL 系默认的防火墙是 firewalld做网络驱动映射的时候如果客户机要作为服务端被访问得放行 SMB 端口sudo firewall-cmd --permanent --add-servicesamba sudo firewall-cmd --reload如果客户机只是挂载主机共享那就只需要放行出站firewalld 默认允许出站不用额外配置。SELinux 是另一个坑。RHEL 系默认开启 SELinux可能阻止挂载点被某些服务访问。测试阶段可以临时setenforce 0确认是不是它的锅但生产环境不要长期关闭 SELinux正确做法是给目录打上合适的上下文标签或者用semanage fcontext加规则。银河麒麟 V10 SP1 在共享文件夹这块和标准 RHEL 系基本一致唯一要注意的是它的内核版本和 open-vm-tools 版本可能存在特定组合的兼容问题如果 vmhgfs 挂不上优先尝试vmware-hgfsclient命令确认共享名是否被正确识别vmware-hgfsclient这条命令会列出所有已启用的共享名。能列出来说明主机侧配置没问题问题在客户机挂载环节列不出来说明 VMware Tools 那一层还没通。6.2 Debian/Ubuntu 与 KaliUbuntu 20.04 之后官方源里的 open-vm-tools 已经内置了 hgfs 支持不需要像老版本那样手动编译模块。挂载时用fuse.vmhgfs-fuse基本不会出错。Ubuntu 24.04 有个新变化值得注意默认启用了更严格的 AppArmor 策略某些情况下会拦住 vmhgfs-fuse 对 /mnt 下目录的访问。如果挂载命令报权限错误但你是用 sudo 执行的可以查一下dmesg | grep -i apparmor有没有拒绝记录。Kali 本质上就是 Debian操作完全一样装open-vm-tools和open-vm-tools-desktop然后按 3.3 节的 fstab 写法配置即可。Kali 常用于安全测试如果你的共享目录里放的是测试脚本和工具把属性设成读写会方便很多。6.3 跨主机类型时该怎么选最后说说方案取舍。我自己的判断标准是三条主机是 Windows、客户机也是 Windows—— 优先用 VMware 共享文件夹路径\\vmware-host\Shared Folders直接访问不需要网络、不需要账号密码、不受防火墙影响。如果要多台机器共享再上 SMB 映射。主机是 Windows、客户机是 Linux—— 共享文件夹和 cifs 挂载都可用。日常传文件用共享文件夹省事如果要在 Linux 里跑脚本批量处理 Windows 侧的代码仓库用 cifs 挂载更稳因为路径固定、可以用 shell 脚本管理。主机是 Linux、客户机是 Windows—— 这种情况共享文件夹反而没那么好用Linux 主机侧设置共享目录要在图形界面里翻半天。更推荐在 Linux 主机上起 Samba 服务Windows 客户机直接映射网络驱动器配置清晰、可控性强、多机共享也没问题。不管选哪种有个原则是不变的共享的目录尽量单独规划别直接把整个 D 盘或者主目录共享出去。一是权限容易出乱子二是万一客户机中招了共享目录里的东西会跟着遭殃。单独建个vmshare目录需要什么往里放用完清理这个习惯能省掉很多后续麻烦。我个人在实际操作中最深的体会是共享这件事一次性配好、长期受益前期多花二十分钟把 fstab 写规范、把nofail和_netdev加上后面半年都不用再管。反倒是每次临时手动挂载看起来快实际算下来浪费的时间多得多。另外一个小技巧不管用哪种方式写完之后立刻用dd或cp拷一个几百兆的文件测一下实际速度再往共享目录里touch一个新文件测写入两分钟就能把方向性错误全暴露出来比等到真正用时才发现问题强太多。
网站建设高端定制企业官网