恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
VMware虚拟机共享文件夹设置:Ubuntu下vmhgfs-fuse挂载保姆级教程
首页
资讯中心
/
VMware虚拟机共享文件夹设置:Ubuntu下vmhgfs-fuse挂载保姆级教程
VMware虚拟机共享文件夹设置:Ubuntu下vmhgfs-fuse挂载保姆级教程
发布时间:2026/10/3 14:12:23
1. 先想清楚虚拟机文件互传的几种路子为什么最后选了共享文件夹在VMware里同时跑Windows和Ubuntu的玩家十有八九都经历过这种尴尬宿主机Windows上有一份文件想在虚拟机Ubuntu里用于是打开VMware的拖拽功能……结果文件拖到一半卡住了要么提示不能拖拽到虚拟机要么拖进去之后发现文件大小变成0字节要么干脆虚拟机里怎么都找不到。偶尔还能拖成功但那个速度真的让人崩溃——一个大文件拖个几分钟中间稍微动一下鼠标哈哈直接失败重新来。其实VMware给Windows宿主机和Ubuntu虚拟机之间准备的通路远不止拖拽这一条大概有四类方案优点缺点适合场景拖拽复制VMware Tools自带操作直观小文件快大文件容易失败无进度条误拖易丢偶尔传个几MB的小文件共享文件夹VMware设置 vmhgfs-fuse双向实时同步文件直接可见大小无限制首次配置略麻烦踩过坑就很简单日常开发、写作、整理笔记、做实验Samba/NFS网络共享功能强大不止VMware能用要搭服务、配权限、记IP天然绕弯多台物理机之间共享文件挂载ISO镜像/磁盘镜像不需要网络读入稳定单向、只读、更新麻烦偶尔安装软件包坦白讲共享文件夹是我个人最推荐的方式——它其实就是在Windows里挑一个真实目录VMware负责把它映射进Ubuntu的文件系统里。你在Windows往这个目录放文件Ubuntu立刻能看到反过来也一样。不需要担心拖拽失败的玄学问题也不需要配置复杂的网络服务。本文要做的就是把这个映射过程写成清清楚楚的三个步骤你照着做就行。这篇文章适合谁如果你在用VMware Workstation跑Ubuntu觉得每次在宿主机和虚拟机之间倒腾文件很磕碜如果你已经装了VMware Tools还是拖不动文件如果你想建一个两边共用的文件夹像本地目录一样用——那这篇保姆级教程就是给你准备的。2. 动手前的环境准备少走弯路的两个前提开始点击鼠标之前有两个前提条件值得先确认清楚。我不敢说90%的翻车都出在这里但至少大部分共享文件夹不生效、挂载报错的案例排查到最后都绕不开这两件事。2.1 先确认你的VMware Tools不是半成品很多朋友装完Ubuntu之后VMware会在窗口角落里弹个提示VMware Tools未安装或者重新安装VMware Tools。下意识就是跟着向导走下载个tar包进去编译安装花半天时间等gcc编译最后还要处理内核头文件版本不匹配的问题。熟了还好不熟的时候这种安装方式能让人头疼一整天。其实现在的VMware Workstation15及更高版本对Ubuntu这类常见的Linux发行版官方早就推荐直接用发行版自带的开源工具——在Ubuntu里它就是open-vm-tools。这个包在Ubuntu软件源里不需要去VMware那边下载更不需要编译源码。它能提供拖拽、剪贴板共享、分辨率自适应这些虚拟机增强功能背后也包含了共享文件夹挂载需要的vmhgfs-fuse模块。那到底什么时候需要手动装VMware Tools据我接触到的实际情况Ubuntu 18.04及以后几乎无一例外都用open-vm-tools就够真遇到非要用原版VMware Tools不可的场景反而是少数特殊内核情况。所以环境准备的第一步很简单sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop -y桌面版用户务必把open-vm-tools-desktop带上它管的是桌面集成比如自动缩放分辨率、剪贴板共享。如果是服务器版没有图形界面装open-vm-tools就够。装完之后验证一下systemctl status open-vm-tools.service能看到active (running)说明基础服务已经就绪。再执行lsmod | grep vmhgfs如果能看到vmhgfs开头的输出说明共享文件系统模块已经加载了。这条很关键——后面的挂载动作全靠它。2.2 在Windows侧选对共享的根目录第二个容易被忽略的坑在Windows这边。有些人图省事想直接把整个C盘或者D盘根目录共享进虚拟机。这么做不是绝对不行但体验真的很差。一方面把整个盘根目录共享进去Ubuntu里会看到一个超大型目录树里面全是Windows系统文件万一你在虚拟机里执行了什么误删除操作风险可想而知另一方面虚拟机预览这些海量文件时性能也会有明显下降。最合理的做法是在Windows上新建一个专门的文件夹比如D:\shared哪个盘都行但建议建在数据盘别放系统盘里面再按用途建好子目录。比如D:\shared\docs—— 放文档资料D:\shared\source—— 放代码文件D:\shared\packages—— 放安装包这样做的好处还不止安全。VMware设置共享文件夹时你是按一个文件夹一个文件夹添加的颗粒度越细后续在Ubuntu侧也越容易挂载管理。你要一上来就想共享C盘根目录后面排除问题时会发现打开目录都卡顿别问我怎么知道的。3. 三个核心步骤从VMware侧勾选配置到Ubuntu挂载自启现在进入正题。三步走完Windows和Ubuntu就能共用同一个文件夹了。3.1 第一步在VMware虚拟机设置里添加共享目录先把虚拟机开机还是关机这个问题说清楚。在VMware Workstation里配置共享文件夹不需要关机但可能需要重启Ubuntu才能让挂载生效后面细说。我更建议的做法是先完成配置再进系统验证。具体的点击路径在VMware主界面选中你的Ubuntu虚拟机点击编辑虚拟机设置。切到选项选项卡找到共享文件夹。选择总是启用别选仅启用时——那个选项在做某些快照测试时反而会给你埋雷。点击添加弹出添加向导。选择你想共享的Windows目录比如D:\shared再给它起个在虚拟机里显示的名字。这个名字建议用不带空格的英文比如shared后面命令行操作会舒服很多。完成之后列表里会多出一个你刚添加的共享项。这就是Windows和Ubuntu之间的桥。操作完成后建议先把Ubuntu虚拟机完整关机再开机。为什么因为共享目录的挂载点识别在老版本VMware里偶尔会出现配置热添加不生效的问题。冷启动一次最稳。3.2 第二步在Ubuntu里手动挂载一次验证通路虚拟机开机进入Ubuntu后先打开终端。第一步检查挂载点目录是否存在ls -l /mnt/hgfsVMware共享文件夹的默认挂载点就是/mnt/hgfs。如果连这个目录都不存在有些精简版Ubuntu确实没有得自己建sudo mkdir -p /mnt/hgfs接着手动挂载sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other解释一下这条命令的几个关键点.host:/是VMware约定好的主机路径缩写意思是宿主机上所有共享根目录。有的教程写.host:/shared想只挂载某一个共享目录但实际测试中直接挂载整个.host:/然后在/mnt/hgfs下用子目录区分不同共享项管理起来更方便。-o allow_other一定要带。不加的话默认只有root能访问挂载点普通用户进去就是权限不足。vmhgfs-fuse是open-vm-tools提供的FUSE挂载工具就是它把Windows目录翻译成Linux文件系统。挂载完成后立刻验证ls -l /mnt/hgfs能看到你添加的共享目录名比如shared基本就成了一半。再做个双向测试在Ubuntu里往/mnt/hgfs/shared写个测试文件回到Windows打开D:\shared看看能不能看到然后反向操作一次在Windows里新建一个文件回到终端ls查看。两边都能互相看到通路就算通了。3.3 第三步写进/etc/fstab实现开机自动挂载手动挂载的问题在于Ubuntu重启之后挂载就丢了又得手动执行一次vmhgfs-fuse。这太反人类了。所以第三步是把挂载动作写进/etc/fstab让系统开机时自动完成。先编辑配置文件sudo nano /etc/fstab在文件末尾加一行.host:/ /mnt/hgfs fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0逐个参数说明.host:/—— 还是那个路径代表宿主机所有共享根目录/mnt/hgfs—— 挂载点fuse.vmhgfs-fuse—— 文件系统类型defaults—— 使用默认挂载参数allow_other—— 允许其他用户访问uid1000,gid1000—— 把挂载点的属主和属组固定为UID/GID 1000。如果你的Ubuntu只有一个用户UID几乎肯定是1000不确定的话终端执行id -u查自己的UID是多少按实际值填保存退出后先测试一下配置有没有语法错误sudo mount -a如果这条命令不报错systemctl daemon-reload都不需要直接ls /mnt/hgfs看看能否正常列出目录。能列出来说明fstab那条配置被接受了。为了严谨建议重启一次Ubuntu开机后立刻执行ls /mnt/hgfs确认自动挂载确实生效。到这里共享文件夹设置的核心部分就完成了。你有了一个在Windows和Ubuntu之间实时同步的目录。但别急着走接下来才是真正拉开实战差距的部分——排错。4. 踩坑实录挂载失败、看不到目录、重启失效的完整排查链路共享文件夹本身的配置不难难的是配置完之后遇到各种看起来很怪的问题。我把这几年帮人排查过的案例梳理成一条链路你按这个顺序检查绝大多数问题都能解决。4.1 问题一挂载报错filesystem type vmhgfs-fuse not found如果你在/etc/fstab写好了那行配置然后执行sudo mount -a结果报错说找不到vmhgfs-fuse这个文件系统类型这说明系统里根本没有可用的vmhgfs支持。最大的原因open-vm-tools安装得不完整。还记得之前让装的open-vm-tools吗我再强调一遍Ubuntu桌面版一定要装open-vm-tools-desktop这一个包它才真正把vmhgfs-fuse模块带进来。只装了open-vm-tools而没装desktop版的话可能会有这个报错。解决方式很简单sudo apt install --reinstall open-vm-tools open-vm-tools-desktop sudo reboot重启完了再试。4.2 问题二手动挂载成功但普通用户打不开目录很多人在vmhgfs-fuse挂载后用普通用户执行ls /mnt/hgfs给你报一堆权限不够。原因是手动执行挂载时没带allow_other参数系统默认FUSE挂载只有root才有权限访问。解决卸载重挂把参数补全。sudo umount /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other如果你希望普通用户对共享目录拥有完全的读写权那么在fstab那一行把uid1000,gid1000也写进去。这个参数的意思是让挂载点里的文件在Ubuntu侧看来它们的主人是你自己UID 1000这样你的用户就能随便读写不用反复折腾sudo。4.3 问题三共享目录里新建的文件Windows这边看不到或看到了但内容是旧版这个问题我遇到过很多次而且特别容易让人误以为自己配置出错了。先说结论大概率是缓存和编辑器占用的问题。Ubuntu侧的FUSE挂载和Windows侧的目录之间确实有同步机制但并不是每一秒都互相实时同步那么丝滑。如果你在Ubuntu里用VSCode编辑了一个文件编辑器可能默认还在缓存里还没真正落盘这时候切到Windows看文件还是旧版。所以遇到看不到新文件时先在Ubuntu里执行一次syncsync强制刷新一下缓冲区。绝大多数情况下之后Windows就能看到最新内容了。另一个隐蔽的原因在Windows侧如果你用Word、Excel或者记事本打开着那个文件Windows会锁住文件句柄Ubuntu这边即使改了内容Windows也迟迟不显示更新甚至提示文件被占用。解决办法很简单——关掉Windows侧正在编辑该文件的程序。4.4 问题四重启之后共享目录变成了空文件夹三种可能按概率从高到低排第一你在VMware的设置里把共享文件夹选成了仅启用时创建快照前或重启后VMware可能跳过了挂载。进编辑虚拟机设置-选项-共享文件夹里看一眼选回总是启用。第二宿主机Windows这边把D:\shared这个路径给移动了或改名字了。VMware记录的还是旧路径共享目录自然就空了——不是目录本身空是挂载逻辑找不到原始位置。第三fstab那行写错了。检查时注意fuse.vmhgfs-fuse这个文件系统类型不能写错defaults,allow_other,uid1000,gid1000中不要加多余的空格。作为快速测错手段重启后执行sudo systemctl status open-vm-tools.service sudo mount -a前一条确认服务活着后一条尝试重新读取fstab进行挂载。如果手动挂载没问题、fstab依旧失效把UUID注释掉换成纯/dev/disk/by-uuid写法也不急第一步先确认是不是VMware侧配置的问题这占了一半的故障率。4.5 问题五文件名大小写混乱Windows文件系统NTFS默认大小写不敏感而LinuxEXT4是大小写敏感的系统。共享文件夹实际运行在Windows侧底层还是NTFS的逻辑所以你在Ubuntu里创建一个Test.txt再去创建一个test.txt看似两个文件实际上Windows会认为那是同一个文件。这种现象不会直接导致配置失败但如果你在用Git管理代码或者处理一些区分大小写的素材文件迟早会被坑到。建议在共享目录内统一约定文件名一律使用小写或者统一使用一种命名风格避免在Ubuntu侧创建大小写只有细微差异的文件。这不是VMware的限制而是Windows NTFS本身的属性做什么虚拟化方案都一样。4.6 排错排查链路的总结顺序把上面四种情况串起来如果共享文件夹出了问题我的固定排查顺序是检查VMware里共享文件夹选项是否还是启用状态总是启用。在Windows里确认共享源目录存在且路径未变化。在Ubuntu里执行lsmod | grep vmhgfs确认内核模块在位。执行sudo systemctl status open-vm-tools确认服务活动。手动执行sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other再ls。这条路走完基本能定位到99%的问题。5. 进阶调整把共享目录用成本地目录的权限与性能心得共享文件夹设置成功后很多人会把它当作简单的文件交换站这其实浪费了这个功能的能力。我用的比较多的是几组进阶姿势也算是一些实际经验一起写在下面。5.1 让挂载点出现在用户主目录里而不是/mnt/hgfs/mnt下的目录对普通用户来说心理门槛有点高有些人总是记不住/mnt/hgfs后面拼的什么。想让它更好用可以把默认挂载点改到用户主目录下面比如~/shared。做法很简单。先建目录mkdir -p ~/shared改fstab那行.host:/ /home/你的用户名/shared fuse.vmhgfs-fuse defaults,allow_other,uid1000,gid1000 0 0然后卸载旧挂载重新挂载sudo umount /mnt/hgfs sudo mount -a这样Ubuntu侧打开文件管理器左侧直接能看到主目录 - shared再也不用记/mnt路径了。日常用起来跟本地目录的体感差异很小。5.2 权限技巧让所有虚拟用户都能随便读写如果你开了多用户或者学生机/公司机要多个账号一起用共享目录除了fstab里的allow_other还需要注意目录本身的Unix权限。最常见的问题Windows侧新建的文件权限默认是1000你自己的UID其他Ubuntu用户看起来可能没有写权限。这时候有两个方案可选干脆把共享目录的属组改成一拨人共用的组比如developers然后权限设成775sudo chown -R root:developers ~/shared sudo chmod -R 775 ~/shared或者在挂载参数里不写uid和gid让文件权限完全跟随Windows侧靠allow_other兜底。这样最省心但安全性弱一些。我个人的建议是如果只是自己的电脑、自己的虚拟机直接fstab里写死uid1000,gid1000就行省事如果有多人协作用组权限方案别偷懒。5.3 大文件传输与性能体验向共享文件夹里拷贝几GB的大文件时传输速度通常受限于虚拟机磁盘IO和FUSE用户态文件系统本身的转发效率。实测下来同一台电脑上Windows与Ubuntu之间互拷大文件共享文件夹的速度比U盘拷贝快很多但比直接在虚拟磁盘内部的本地拷贝还是慢一些。有几个经验可以分享单个文件超过4GB要注意Windows侧文件系统格式。NTFS支持大文件理论上最大16TB以上但如果你的共享目录落在FAT32格式的盘上超过4GB直接失败。这个坑容易被人忽略。检查方法是Windows资源管理器里右键共享目录所在盘符 - 属性 - 文件系统。拷贝海量小文件比如node_modules、Python虚拟环境时极慢是常态。FUSE的元数据操作开销比较大。如果你是做前端/后端开发的把node_modules这类目录直接放进共享文件夹不是个好主意。正确做法是源代码放在共享文件夹里便于两边编辑依赖目录放Ubuntu本地用符号链接指过去。如果只是临时传个大文件最靠谱的还是直接在共享文件夹里拖进去因为传输过程中有文件系统的完整性校验不太会出现拖拽那种拷了一半静默失败的情况。5.4 多台虚拟机共用一个Windows目录VMware支持在同一个Windows宿主机上给多台Ubuntu虚拟机添加同一个共享目录。这个场景适合做集群测试或者统一开发环境。注意一点多台虚拟机同时写入同一个文件时后写覆盖先写没有锁机制。如果只是各写各的目录没问题如果要共享一份数据库或代码仓库建议还是要考虑更专业的文件同步机制别把共享文件夹当成多机并发控制工具。5.5 关于性能和安全性的最后建议共享文件夹虽然方便但我还是要提一句边界它适合文件交换、代码编辑、资料整理不适合拿来当数据库存储目录、不适合跑大型编译的中间产物目录、更不应该把整个Windows系统盘挂进去图省事。理解了这个工具的能力边界你才能在真正需要它的场合把它用顺手。写在最后回到最开头那个困惑虚拟机里倒腾文件到底能不能省点心我的回答是能但你要愿意花十分钟把拖拽那种碰运气式的方法换成共享文件夹这种确定性方案。我自己的电脑上现在Windows和Ubuntu之间传文件的方式就只有一条——共享文件夹。代码两边改文档直接跨系统打开再也不用每次传文件都担心拖拽中途断掉。按照上面三步走完再配合排错链路和进阶配置你应该很快就能体会到这种虚拟机和宿主机同在一个文件系统下的顺畅感。