ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

VMware虚拟机共享文件夹配置详解:Ubuntu与CentOS 7从挂载到自动挂载

2026/10/4 21:30:45 拓冰建站 浏览量
VMware虚拟机共享文件夹配置详解:Ubuntu与CentOS 7从挂载到自动挂载 VMware里装了Ubuntu或CentOS 7虚拟机和Windows主机之间拷文件还是靠拖拽、U盘、或者临时开个HTTP服务传说实话你要是只是偶尔传个小文件拖拽也就算了但一旦涉及日常开发、代码同步、日志分析这种高频操作每次都这么搞真的会把人搞疯。这也就是虚拟机共享文件夹这个功能存在的意义主机和虚拟机共享同一个目录两边实时读写像操作本地文件一样不用来回倒腾。这篇文章就从方案选型、VMware Tools安装、共享目录配置、挂载命令到fstab自动挂载这些核心环节把Ubuntu和CentOS 7两条线路的完整操作都讲清楚同时把我在实际部署中踩过的坑、排过的错一并列出来。适合正在用VMware Workstation做开发、测试、运维或者刚入坑虚拟机没多久、想把手头工作流理顺的朋友参考。1. 先把共享方案的底牌摸清三种做法怎么选很多人一上来就急着在VMware里点“共享文件夹”结果发现要么灰的、要么挂不上其实根本问题是没搞懂共享文件夹在VMware里是怎么实现的。它本质上是靠虚拟机额外安装的一套增强工具来提供虚拟硬件和驱动支持让虚拟机里的系统能识别主机指定目录再通过一个特殊的文件系统挂载到虚拟机的某个路径下。所以方案选型决定了后面每一步操作是否顺利。1.1 VMware共享文件夹hgfs为什么是首选VMware的共享文件夹功能底层走的是一个叫hgfsHost-Guest File System的虚拟文件系统。实现方式有两种传统模式下用内核模块vmhgfs新版模式下用FUSE用户态驱动vmhgfs-fuse。Workstation 15及以后版本默认使用FUSE方式好处是内核升级后不容易因为驱动编译失败而挂不上兼容性比老模式好很多。它的最大优势是对用户透明在Workstation里把主机目录加进去之后虚拟机里执行一条mount命令就能直接用不需要配IP、不需要装Samba服务、不需要开防火墙端口性能也足够应付日常编译和小型数据库操作。相比之下拖拽复制虽然零配置但只适合小文件根本没法当作持续共享目录来用Samba或NFS则要养一套网络服务配置复杂度直接翻倍。1.2 拖拽复制、Samba、NFS各自的使用边界先说拖拽复制。VMware Tools装好之后Windows和Linux虚拟之间直接拖文件很顺手但它的本质是一次性拷贝文件从主机复制到虚拟机是两份内容不是实时同步。你修改了虚拟机里的那份主机那边的原文件不会有任何变化。如果你需要双向实时读写拖拽方案直接排除。再说Samba。这是一种跨平台的网络文件共享协议Windows原生支持Linux这边要装samba服务端再手动配置共享目录、用户、权限。好处是不依赖VMware Tools版本虚拟机就算是KVM、VirtualBox的都能用坏处是配置项多、排错繁琐比如SELinux、防火墙、用户口令这几关每个都能卡住一大片人。Samba比较适合的场景是多台虚拟机或真机需要同时访问同一个共享目录或者需要把Linux目录共享给Windows主机访问——注意方向是反的和VMware共享文件夹正好互补。NFS则是纯Linux/Unix阵营的方案Windows要用得额外装Services for NFS配置起来更麻烦除了特殊场景基本不推荐。所以如果就是“VMware虚拟机 Windows主机”这个组合目标就是主机目录在虚拟机里能直接读写那么VMware自带的共享文件夹功能就是最优解没有之一。下面的内容全部围绕这条主线展开。2. 准备工作把VMware Tools装明白共享文件夹能不能用99%的问题出在VMware Tools没装好或者版本不匹配上。有很多人遇到“共享文件夹选项是灰色”或者“mount之后看不到目录”排查一圈最后发现Tools压根没装成。所以先把Tools这块吃透后面才顺。2.1 确认Tools是否真的装好了判断Tools装没装好最直接的办法是看虚拟机菜单栏的“虚拟机”选项里“重新安装VMware Tools”是不是可点的。如果显示“安装VMware Tools”说明当前没装如果显示“重新安装”说明装过了。这个判断在Ubuntu和CentOS 7上通用。更精确的判断方法是在虚拟机里执行下面这条命令能查到vgf支持就说明Tools相关组件就位了vmware-toolbox-cmd -vUbuntu如果安装的是open-vm-tools这条命令可能不存在可以改用vmware-hgfsclient注意这条命令也可以用来查看当前共享文件夹设置是否被虚拟机感知到——如果执行后能列出你在Workstation里配置的共享目录名称说明Tools这一层已经通了接下来纯粹是挂载的问题如果执行后什么都不返回那大概率是Tools没装好而不是mount命令写错了。2.2 Ubuntu与CentOS 7的Tools安装差异这个问题很经典Ubuntu安装官方VMware Tools的tar包时经常遇到内核头文件缺失、gcc版本不匹配、编译报错的情况折腾半天还不一定成功。而CentOS 7虽然能装但官方Tools在图形界面下的集成度不如Ubuntu的open-vm-tools-desktop漂亮比如分辨率自适应、剪贴板共享这些。所以我的建议是Ubuntu场景优先用open-vm-toolssudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktopopen-vm-tools是VMware官方开源版本也是VMware推荐的分发版方案直接在系统软件源里维护跟着内核升级自动适配省心很多。desktop这个包负责图形会话相关功能如果虚拟机里跑的是带桌面的Ubuntu建议一起装。CentOS 7场景同样可以用open-vm-toolssudo yum install -y open-vm-tools open-vm-tools-desktopCentOS 7的官方源里就有这两个包安装时如果提示依赖问题先把源换成阿里云或清华镜像再装基本一次过。装了open-vm-tools之后原来的tar包版Tools强烈建议卸载干净否则两套工具混在一起偶尔会出现共享文件夹驱动模块冲突的诡异问题。卸载方式是在虚拟机里执行vmware-install.pl -u然后重启。2.3 open-vm-tools与官方Tools怎么选一句话概括能用open-vm-tools就用open-vm-tools它跟着系统内核走不需要手动重编译尤其在Ubuntu这种内核迭代快的发行版上特别明显。官方tar包版的VMware Tools也不是不能用只是它更像“通用驱动包”在新内核上编译失败的概率高处理起来费时费力。Workstation版本较老比如12、14的时候官方Tools兼容性反而好一些Workstation 15/16/17时代open-vm-tools已经是绝对主力。我个人的做法是所有新装虚拟机统一open-vm-tools老机器迁移时如果官方Tools工作正常就不动一旦出现问题直接切open-vm-tools兜底。装好Tools完成虚拟机重启下面就可以进入正式的共享文件夹配置了。3. 核心实操从设置共享目录到永久挂载这一部分是整篇的硬核内容。我按“Workstation界面配置 → 命令行手动挂载 → 开机自动挂载”三段式来讲每一段都会把原理和命令为什么这么写说清楚。3.1 Workstation中设置共享文件夹步骤很简单但有几个细节特别容易踩坑。关闭虚拟机电源强烈建议关机状态配置避免配置不生效。打开“虚拟机设置”切到“选项”标签页。找到“共享文件夹”选中“总是启用”。点击“添加”选择主机上一个目录作为共享根目录给它起个名字这个名字在虚拟机里就是要用的共享名。保存设置开机。这里要注意共享名建议用英文小写加下划线不要用中文。虽然用中文在Windows侧显示没问题但到了Linux的mount命令里中文路径和编码问题会引入不必要的麻烦。另外挂载点建议统一用/mnt/hgfs这是VMware的默认约定也方便后续多台虚拟机保持一致的体验。3.2 命令行手动挂载mount命令怎么写才对虚拟机开机进入系统后先检查共享目录是否能被识别vmware-hgfsclient如果这条命令列出了你刚设定的共享名称比如workspace就可以执行挂载了。Ubuntu和CentOS 7在开启了open-vm-tools之后挂载命令基本统一为FUSE方式sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid1000,gid1000解释一下这条命令.host:/表示主机侧所有共享目录的根。如果你只想挂载某一个共享目录可以写成.host:/workspace但一般都建议直接挂根后续在/mnt/hgfs下自然就会出现workspace子目录。allow_other允许所有用户访问该挂载点。不加的话只有root能进去普通用户打不开治标不治本。uid1000,gid1000把挂载点的属主指定为uid 1000通常就是第一个普通用户。这一步决定你在虚拟机里创建的文件归谁所有不指定的话可能全是root的后面编辑起来很烦。老式内核模块方式则用sudo mount -t vmhgfs .host:/ /mnt/hgfs如果你的系统还支持这种方式直接执行就能挂上。但如果系统里没有vmhgfs内核模块会报unknown filesystem type vmhgfs这时候就得用上面的vmhgfs-fuse方式。挂载成功后ls /mnt/hgfs就能看到你在Workstation里添加的所有共享文件夹了。3.3 fstab自动挂载的正确写法坑多手动挂载只能管当前开机周期重启之后就没了。要让共享文件夹在开机时自动挂载常规思路是往/etc/fstab里加一行。很多人一搜索教程就照着写结果重启后发现目录是空的、挂载失败甚至系统起不来原因多半是fstab写法不对。推荐用这个写法.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0注意几个细节文件系统类型写的是fuse.vmhgfs-fuse不是vmhgfs。因为现在默认走的是FUSE驱动写成旧的vmhgfs很容易在开机时找不到驱动。不要使用_netdev。这块和网络挂载不一样_netdev是给网络文件系统用的加了反而可能导致系统启动时等待网络超时。uid/gid要按实际用户改。很多教程直接写1000如果创建Ubuntu用户时指定过不同的uid这里就要调整可以用id -u 用户名查一下。对于CentOS 7如果用的是fuse驱动同样可以用上面的配置。但有个特例如果系统里还残留老版vmhgfs内核模块并且你想用传统方式挂载fstab可以写成/mnt/hgfs .host:/ vmhgfs defaults,allow_other 0 0不过我还是建议统一走FUSECentOS 7默认内核编译老模块时经常因为gcc版本问题失败浪费时间。改完fstab后不要急着重启验证。先执行sudo mount -a测试一遍如果没有任何报错再执行ls /mnt/hgfs确认目录内容正常最后才重启。这个习惯能帮你避免“改完fstab直接黑屏开不了机”的尴尬。4. 常见问题排查与避坑实录这块是我最想写的部分因为这些坑我基本都踩过一轮而且在网上查的时候会发现同一个问题在不同发行版、不同内核版本、不同Workstation版本下表现都不一样排查起来特别费劲。这里整理成速查表再展开讲几个高频典型问题。现象最常见原因排查方向共享文件夹设置里选项是灰的VMware Tools没装好检查Tools状态重装open-vm-toolsvmware-hgfsclient返回空Tools未识别共享配置关掉虚拟机重新配置共享文件夹mount报错No such device使用的是内核模块vmhgfs但模块未加载改用vmhgfs-fuse方式挂载成功但/mnt/hgfs为空共享目录名和配置不一致确认Workstation里启用了共享文件夹重启后挂载失效fstab配置错误或系统启动时模块未就位按上文fstab写法重新配置普通用户无法访问挂载点缺少allow_other选项重新挂载并加allow_other文件权限全是root缺少uid/gid指定重新挂载并指定uid/guid虚拟机开机后hgfs目录不存在挂载点目录被清理重新mkdir /mnt/hgfs并挂载4.1 挂载成功但/mnt/hgfs为空这个问题出现的频率非常高几乎可以排进前三。明明vmware-hgfsclient能看到共享名mount也没报错但ls /mnt/hgfs就是什么都没有。我遇到过的这一类问题根因基本都是Workstation的共享文件夹配置没有真正生效。常见原因是你添加了共享目录后忘了勾选“总是启用”或者虚拟机是在配置前就已经开机配置没有同步到当前会话。解决的通用做法是在Workstation里把共享文件夹选项先改成“禁用”确定后重新打开设置改回“总是启用”然后重启虚拟机。如果重启后依然为空再检查一下共享路径本身。有些情况下主机目录被系统或安全软件锁定比如OneDrive同步目录、加密目录虚拟机侧能看到名字但读不到内容。把共享目录换成一个普通的本地文件夹比如D:\share再试一次基本能定位问题。4.2 重启后共享文件夹失效重装系统或重启虚拟机后/mnt/hgfs下空无一物这是fstab配置不对的典型案例。排查步骤就三步先确认vmware-hgfsclient是否仍然输出共享名如果为空说明Tools或配置层出了问题先解决Tools再谈fstab。执行sudo mount -a看有没有报错。如果提示wrong fs type说明fstab里的文件系统类型不对。确认fstab里用的是fuse.vmhgfs-fuse而不是vmhgfs并且uid/gid符合当前用户。这里再分享一个更稳妥的替代方案不用fstab改用systemd挂载单元。有些虚拟机启动顺序里hgfs服务还没起来fstab就尝试挂载了导致失败。用systemd可以设置挂载依赖确保Tools服务先启动。创建一个/etc/systemd/system/mnt-hgfs.mount文件内容如下[Unit] DescriptionMount VMware Shared Folders Aftervmware-tools.service [Mount] What.host:/ Where/mnt/hgfs Typefuse.vmhgfs-fuse Optionsallow_other,uid1000,gid1000 [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable --now mnt-hgfs.mount这个方案的好处是挂载时机可控可以指定在vmware-tools服务之后执行避免盲等。4.3 权限与用户归属问题共享文件夹挂载好之后最容易让人烦躁的就是权限。普通用户进目录看到一堆root属主的文件想改改不了想删删不掉。解决起来方案很成熟挂载时显式指定uid/gid并且加上allow_other。比如sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid$(id -u) -o gid$(id -g)如果你是单用户虚拟机直接用uid1000、gid1000是没问题的。如果是多用户环境或者想要组内成员都能访问可以指定gid为某个用户组比如gid1000。注意FUSE挂载的权限统一由挂载选项控制不是通过chmod能灵活调整的所以挂载参数一定要在第一次挂载时就想清楚。另外如果虚拟机里跑了Docker或Nginx这类服务需要读取共享目录里的代码或配置文件记得确保这些服务的运行用户对挂载点有访问权限或者干脆用allow_other彻底放开。4.4 备选方案Samba共享怎么搞如果VMware共享文件夹在你这台机器上怎么都排不通内核特殊、虚拟机平台不是VMware、或者需要多个虚拟机同时访问同一目录Samba可以作为备选方案顶上。在Ubuntu上装Samba服务端sudo apt install -y samba sudo mkdir -p /srv/share sudo chmod 777 /srv/share配置/etc/samba/smb.conf在文件末尾追加[share] path /srv/share browseable yes writable yes guest ok yes create mask 0644 directory mask 0755然后重载服务sudo systemctl restart smbdWindows主机访问时在资源管理器地址栏输入\\虚拟机IP\share就能打开。但这个方案有个必踩的坑SELinuxCentOS 7默认开启会拦截Samba对目录的读写需要执行sudo setsebool -P samba_export_all_rw 1或者干脆把共享目录的SELinux上下文改成samba_share_tsudo semanage fcontext -a -t samba_share_t /srv/share(/.*)? sudo restorecon -Rv /srv/share相比之下VMware共享文件夹方案不需要考虑SELinux这也是我优先推荐它的原因之一。Samba更适合多机同时共享单一虚拟机场景下优先级没那么高。5. 几个提升体验的小细节共享文件夹挂上了日常使用基本就顺畅了。但还有几个小细节属于那种“当时没觉得后来发现很关键”的点这里一起说了。第一共享目录里不要放大量小文件。比如node_modules、.git这类数万个小文件的目录在共享文件夹里读写性能会比较差。主机和虚拟机之间每次I/O都要经过虚拟化层转换海量小文件场景下效率远低于本地磁盘。我在实际项目中代码目录放本地只有需要和主机交换的构建产物、日志、安装包才放共享目录两边都舒服。第二编译工具链注意跨平台兼容。共享文件夹的权限和所有权模型是经过hgfs映射的Linux下chmod在共享目录里不一定完全生效因为底层文件系统是Windows的NTFS。也就是说在共享目录里跑需要执行位比如shell脚本、二进制程序的文件可能因为权限位问题执行失败。遇到这种情况把文件复制到虚拟机本地磁盘chmod x之后再执行就不会有这种烦恼。第三快照与共享目录的交互。如果你给虚拟机拍了快照恢复快照后共享文件夹的设置不会跟着变但挂载状态可能会丢失。恢复后执行一次sudo mount -a就能拉回来不算大问题。第四Workstation版本和共享文件夹的兼容性。有段时间我在Workstation 16上配共享目录经常出现无法更新共享文件夹的提示后来发现是虚拟机内Linux发行版太老Tools版本和Workstation不完全匹配。升级open-vm-tools到最新版就好了。如果你用Workstation 17建议确保open-vm-tools版本不要太老比如Ubuntu 20.04自带的版本可能就需要手动升一下。我在实际使用中最大的体会就是VMware共享文件夹这个功能配置本身并不复杂难的是理解它背后的运行机制需要Tools提供驱动需要FUSE挂载需要正确的权限参数需要在合适的时机自动挂载。把这几层逻辑理顺之后不管遇到什么问题都很快能定位到具体环节。最后再分享一个我一直在用的小习惯共享文件夹名固定用同一个比如share主机路径固定放在某个分区下比如D:\vm-share这样不管新开多少台虚拟机配置心智成本都为零。虚拟机系统无论是Ubuntu还是CentOS 7挂载命令也统一写进自己的笔记模板换环境的时候直接复制执行省得每次重新查。