资讯动态

VMware虚拟机共享文件夹权限与持久化配置指南

发布时间:2026/9/18 19:43:53 来源:尧图企业网站定制
简介本资源是一份面向VMware虚拟化初学者与IT运维人员的实操型配置指南聚焦解决虚拟机与主机间文件共享这一高频痛点问题。内容以图文结合方式系统讲解共享文件夹所需的三大核心步骤虚拟机设置中添加主机共享目录、正确载入windows.iso并安装VMWare Tools、在客户机内映射网络驱动器覆盖从环境准备到验证成功的完整链路并深入解析VMWare Tools作用及共享机制原理。资源为单文件PDF文档1个407KB排版清晰、步骤截图详实适合作为随查随用的配置手册或教学辅助材料。目前已有482人学习下载特别适合刚完成系统安装、亟需打通主客机数据通道的用户快速上手避免因VMware Tools安装遗漏或映射路径错误导致的常见失败。1. VMware虚拟机与主机共享文件夹不是配完就完事关键在权限链和挂载持久化很多用户以为在 VMware Workstation 里勾选“启用共享文件夹”、点一下“确定”Windows 主机上的 D:\share 就能直接在 Ubuntu 虚拟机里cd /mnt/hgfs/share访问——结果报错No such file or directory或者能进目录但一写文件就提示Permission denied更常见的是重启虚拟机后共享目录彻底消失。这不是操作遗漏而是 VMware 共享机制依赖三层协同VMware Tools 的内核模块vmhgfs-fuse、用户组权限vmware组、以及挂载策略是否自动、是否持久。尤其在 VMware Workstation 17 中vmhgfs内核驱动已被弃用全部转向 FUSE 用户态挂载这意味着/mnt/hgfs不再是默认挂载点必须显式启动服务并配置挂载逻辑。本文面向已安装 VMware Tools 但共享失败的 Linux 虚拟机用户Ubuntu/Debian/CentOS/RockyLinux/Kali 均适用不讲安装步骤只拆解“为什么配了不生效”和“怎么让它每次开机都稳稳可用”。2. VMware Tools 必须运行 vmhgfs-fuse 服务验证、启动与自启配置VMware Tools 在现代 Linux 发行版中不再提供内核态vmhgfs驱动而是通过vmhgfs-fuse进程以用户空间文件系统FUSE方式挂载共享文件夹。如果该服务未运行/mnt/hgfs目录即使存在也为空且ls /mnt/hgfs返回空结果。2.1 验证 vmhgfs-fuse 是否正在运行在虚拟机终端执行ps aux | grep vmhgfs-fuse正常输出应包含类似以下行注意--allow-other参数root 1234 0.0 0.1 123456 7890 ? S 10:23 0:00 /usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount -o uid1000 -o gid1000 .host:/ /mnt/hgfs若无任何输出说明服务未启动。此时手动启动会暴露权限问题sudo /usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/ /mnt/hgfs提示-o allow_other是关键参数它允许非 root 用户如当前登录用户访问挂载点缺少此参数会导致普通用户ls /mnt/hgfs权限拒绝。-o uid1000 -o gid1000中的1000应替换为你的实际用户 UID/GID用id -u和id -g查看。2.2 启动 vmhgfs-fuse 并加入系统服务手动命令仅临时有效。需将其注册为 systemd 服务确保随系统启动# 创建服务文件 sudo tee /etc/systemd/system/vmhgfs-fuse.service EOF [Unit] DescriptionVMware HGFS FUSE service Aftermulti-user.target [Service] Typesimple Userroot ExecStart/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount -o uid1000 -o gid1000 .host:/ /mnt/hgfs Restarton-failure RestartSec5 [Install] WantedBymulti-user.target EOF将其中uid1000和gid1000替换为你自己的用户 ID例如id -u输出1001则写uid1001。保存后启用服务sudo systemctl daemon-reload sudo systemctl enable vmhgfs-fuse.service sudo systemctl start vmhgfs-fuse.service验证状态sudo systemctl status vmhgfs-fuse.service # 应显示 active (running) ls -l /mnt/hgfs # 应列出主机共享的文件夹名如 share、Documents2.3 检查 VMware Tools 服务状态与日志即使vmhgfs-fuse运行也可能因 VMware Tools 主服务异常导致挂载失败。检查核心服务sudo systemctl status vmtoolsd若状态为inactive (dead)或failed需重启sudo systemctl restart vmtoolsd sudo systemctl enable vmtoolsd查看详细日志定位问题sudo journalctl -u vmtoolsd -n 50 --no-pager常见错误包括Failed to initialize hgfs: No such device→ 表示内核模块未加载现代发行版无需此模块忽略Unable to connect to host services→ VMware Workstation 未开启共享功能或虚拟机未处于运行状态hgfs is not available→ VMware Tools 未完整安装需重新安装见下文补丁注意VMware Workstation 17.6 对 Linux Guest 的 VMware Tools 分发方式变更官方 ISO (linux.iso) 已移除vmhgfs内核模块但vmhgfs-fuse二进制仍包含在open-vm-tools-desktop包中。若/usr/bin/vmhgfs-fuse不存在请先安装# Ubuntu/Debian sudo apt update sudo apt install open-vm-tools-desktop fuse # RockyLinux/CentOS 8 sudo dnf install open-vm-tools-desktop fuse # Kali Linux sudo apt update sudo apt install open-vm-tools-desktop安装后确认二进制存在ls -l /usr/bin/vmhgfs-fuse3. 主机端共享设置与 Linux 端权限闭环从 Windows 共享到虚拟机可写共享文件夹功能是双向协同主机必须声明共享路径并设权限虚拟机必须有对应用户组权限才能读写。常见错误是主机设了共享但虚拟机用户不在vmware组或主机共享未启用“来宾访问”。3.1 Windows 主机端共享配置要点Win10/Win11右键目标文件夹 → “属性” → “共享”选项卡 → “高级共享…”勾选“共享此文件夹”共享名建议用纯英文如share避免空格和中文点击“权限” → 确保Everyone或Guest有“更改”权限仅“读取”则虚拟机无法写入关闭密码保护共享关键控制面板 → “网络和 Internet” → “网络和共享中心” → “更改高级共享设置”展开“所有网络” → 将“密码保护的共享”设为“关闭密码保护共享”提示若保持开启虚拟机访问时需输入 Windows 用户名密码而 VMware 共享不支持交互式凭证输入必然失败。这是win11访问win7共享文件夹类问题的根源。确认网络发现与文件共享已启用同一“高级共享设置”页中“网络发现”和“文件和打印机共享”必须为“启用”3.2 Linux 虚拟机端用户组与挂载点权限修复即使vmhgfs-fuse运行若当前用户不在vmware组仍可能遇到权限不足# 查看当前用户所属组 groups # 若输出不含 vmware则添加 sudo usermod -aG vmware $USER # 生效需重新登录或重启虚拟机或执行 newgrp vmware 临时切换同时确保/mnt/hgfs目录权限允许用户访问sudo mkdir -p /mnt/hgfs sudo chown root:vmware /mnt/hgfs sudo chmod 755 /mnt/hgfs验证挂载后权限ls -ld /mnt/hgfs # 应显示 drwxr-xr-x 1 root vmware ... ls -l /mnt/hgfs/share # 若仍提示 Permission denied说明挂载时未传 uid/gid 或主机共享权限不足3.3 主机共享名映射规则与大小写敏感性VMware 共享名在 Linux 虚拟机中严格区分大小写且不支持空格。例如主机共享名为My Share→ 虚拟机中路径为/mnt/hgfs/My\ Share需转义或/mnt/hgfs/MyShare主机共享名为SHARE→ 虚拟机中必须用ls /mnt/hgfs/SHAREshare无效建议主机端统一使用小写字母下划线命名如project_files避免歧义。主机共享名虚拟机访问路径是否推荐share/mnt/hgfs/share✅ 推荐Share/mnt/hgfs/Share⚠️ 注意大小写My Documents/mnt/hgfs/My\ Documents❌ 易出错改用my_documents4. 解决重启后共享失效systemd 依赖优化与挂载点持久化cifs挂载共享文件夹重启后失效怎么办是高频问题本质是vmhgfs-fuse服务启动早于fuse模块加载或/mnt/hgfs目录被其他服务占用。单纯systemctl enable不足以保证可靠挂载。4.1 修正 systemd 服务依赖关系默认vmhgfs-fuse.service未声明对fuse的依赖可能导致服务启动时 FUSE 模块未就绪。编辑服务文件sudo systemctl edit vmhgfs-fuse.service输入以下内容覆盖原依赖[Unit] Afterfuse.service Wantsfuse.service [Service] RestartPreventExitStatus1保存退出后重载sudo systemctl daemon-reload sudo systemctl restart vmhgfs-fuse.service验证 fuse 模块已加载lsmod | grep fuse # 应输出 fuse 模块信息4.2 使用 /etc/fstab 实现挂载兜底可选但推荐当 systemd 服务偶发失败时fstab提供第二道保障。编辑/etc/fstabsudo tee -a /etc/fstab EOF .host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid1000,gid1000,auto_unmount 0 0 EOF同样替换uid1000和gid1000为你的实际 ID。然后测试挂载sudo mount -a # 无报错即成功 ls /mnt/hgfs注意fstab方式与vmhgfs-fuse.service并存时需禁用服务的自动挂载否则可能冲突。可在服务文件ExecStart行末尾加--no-syslog并确保fstab条目优先级更高通常没问题。4.3 验证重启后状态的三步检查法每次重启后按顺序执行检查服务状态systemctl is-active vmhgfs-fuse.service # 应返回 active检查挂载点是否存在且非空mount | grep hgfs # 应显示挂载信息 ls /mnt/hgfs # 应列出共享文件夹测试读写权限echo test /mnt/hgfs/share/test.txt cat /mnt/hgfs/share/test.txt # 成功则输出 test失败则检查主机共享权限和用户组若第1步失败查journalctl -u vmhgfs-fuse.service若第2步失败查dmesg | tail -20看 FUSE 相关错误若第3步失败回到 3.1 和 3.2 节复查权限链。5. 进阶技巧符号链接绕过 /mnt/hgfs 路径限制与多共享目录管理/mnt/hgfs是 VMware 强制挂载根目录但实际开发中常需将共享文件夹映射到项目路径如~/workspace而非每次cd /mnt/hgfs/share。用符号链接 自动同步可提升效率。5.1 创建用户级符号链接并设为默认工作区假设主机共享名为project希望在虚拟机中通过~/workspace访问# 创建链接确保 /mnt/hgfs/project 存在 ln -sf /mnt/hgfs/project ~/workspace # 验证 ls -l ~/workspace # 应显示 workspace - /mnt/hgfs/project # 设为默认 shell 工作目录可选 echo cd ~/workspace ~/.bashrc source ~/.bashrc提示ln -sf中的-f参数强制覆盖已存在链接避免重复创建错误。此链接在vmhgfs-fuse服务重启后依然有效因底层路径不变。5.2 管理多个共享目录动态挂载脚本当主机配置了多个共享如code、data、docs手动维护/mnt/hgfs/xxx路径易出错。可编写轻量脚本自动检测并挂载#!/bin/bash # 保存为 /usr/local/bin/vm-share-mount.sh赋予执行权限 SHARE_ROOT/mnt/hgfs USER_UID$(id -u) USER_GID$(id -g) # 创建挂载点 sudo mkdir -p $SHARE_ROOT # 检查 vmhgfs-fuse 是否运行未运行则启动 if ! pgrep -x vmhgfs-fuse /dev/null; then sudo /usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount -o uid$USER_UID -o gid$USER_GID .host:/ $SHARE_ROOT fi # 为每个子目录创建用户链接可扩展 for dir in code data docs; do if [ -d $SHARE_ROOT/$dir ]; then ln -sf $SHARE_ROOT/$dir $HOME/$dir fi done赋予执行权限并加入开机启动sudo chmod x /usr/local/bin/vm-share-mount.sh echo /usr/local/bin/vm-share-mount.sh | sudo tee -a /etc/rc.local确保/etc/rc.local存在且有执行权限Ubuntu 22.04 需启用rc-local.service5.3 权限调试终极命令strace 定位挂载失败原因当一切配置看似正确却仍无法访问用strace追踪系统调用sudo strace -e traceopenat,stat,mount -f /usr/bin/vmhgfs-fuse -o allow_other .host:/ /mnt/hgfs 21 | grep -E (openat|mount|stat)输出中若出现openat(AT_FDCWD, /dev/fuse, O_RDWR) -1 ENOENT说明 FUSE 模块未加载若出现mount(none, /mnt/hgfs, fuse.vmhgfs-fuse, ...)后跟 -1 EBUSY说明挂载点被占用若stat(/mnt/hgfs)返回-1 ENOENT说明目录未创建。每条线索直指具体故障层。最终验证在虚拟机中touch /mnt/hgfs/share/from_vm.txt立即在 Windows 主机对应文件夹中看到该文件且属性显示为你的 Windows 用户名 —— 此时共享链路完全打通。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价