系统配置:主机为Win11,虚拟机为Ubuntu22.04 64位。
一、问题描述
使用VMware 17创建的Ubuntu虚拟机(22.04)与主机不能正常使用共享文件夹,无法挂载文件夹。网上有很多教程都有谈及如何启用共享文件夹,诸如:
- 主机与VMware虚拟机共享文件夹:解决虚拟机找不到共享文件夹问题https://zhuanlan.zhihu.com/p/650638983
- 【Ubuntu】windows11与ubuntu22.04共享文件夹的创建与挂载_ubuntu_奥利文儿-华为开发者空间
- VMware设置共享文件夹(Ubuntu22.04) - 莴苣& - 博客园
它们的步骤基本一样,总结一下。主机与虚拟机实现共享文件功能的基本步骤如下:
1. 主机上创建共享文件夹
2. 在VMware 软件上启用虚拟机的共享文件夹,并添加步骤1中创建的文件夹。
3. 虚拟机上挂载共享文件夹。打开终端输入以下命令,将创建的共享文件夹挂载到'/mnt/hgfs' 目录下。
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
但按照上述步骤后,对应目录 ‘/mnt/hgfs’ 下并没有出现对应的共享文件夹,没能挂载创建的共享文件夹。
二、解决办法
值得一提的是,我在安装VMware Tools时,提示无法确定 vmhgfs 的安装状态。而 vmhgfs 是 VMware 提供的一个内核模块,用于在 VMware 虚拟机与其宿主机之间实现文件系统的共享。全称是 "VMware Host-Guest File System",它允许虚拟机内的操作系统访问宿主机上的文件夹,从而实现数据的双向共享。
The VMware Host-Guest Filesystem allows for shared folders between the host OS
and the guest OS in a Fusion or Workstation virtual environment. Do you wish
to enable this feature? [yes] yes
INPUT: [yes]
The installation status of vmhgfs could not be determined.
Skippinginstallation.
于是,打开终端,输入以下命令来查看 vmhgfs 是否作为内核模块加载:
lsmod | grep vmhgfs
如果 vmhgfs 模块已经加载,会看到有关该模块的信息。如果没有输出,则说明 vmhgfs 没有被加载。果然,输入后终端没有输入。
经查,发现VMware实现共享文件夹的原理有两种:
-
内核模块: vmhgfs 作为一个内核模块被加载到虚拟机的操作系统中。在早期版本的 VMware Tools 中,它是通过内核模块的形式提供的。
-
FUSE 实现: 在较新的 open-vm-tools 版本中,共享文件夹的功能通常是由 vmhgfs-fuse 提供的,这是一个基于 FUSE (Filesystem in Userspace) 的实现。这意味着共享文件夹的功能是在用户空间而非内核空间实现的,这样可以提高兼容性和减少内核级别的依赖。
然后就是关键的来了,看前面主机与虚拟机实现共享文件功能的基本步骤中第三步的指令,它就是用的 FUSE !。于是果断安装 open-vm-tools 。
sudo apt-get update
sudo apt-get install open-vm-tools open-vm-tools-desktop
哈哈,于是兴高采烈地输入挂载指令。这下肯定没问题了吧,直接拿捏。
但事与愿违,查看 ‘/mnt/hgfs’ 目录下还是没有共享文件夹!可恶,小丑竟是我自己。那这是怎么回事!我已经装了open-vm-tools,怎么还是不行,这怎么办。于是我又去找原因,发现,Ubuntu22.04默认安装的是fuse3,它会与fuse冲突。那这意味着我装的Ubuntu虚拟机没有fuse!于是我马上使用命令,果断安装fuse(会先卸载fuse3,然后安装fuse):
sudo apt-get install fuse
然后再输入挂载指令
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
或者简单点输入下面的指令也是可以的,都是将创建的共享文件夹挂载到'/mnt/hgfs' 目录下。
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
哦耶,大功告成,成功显示共享文件夹!
!注意,卸载fuse3可能会影响默认桌面的功能。详见https://askubuntu.com/questions/1409496/how-to-safely-install-fuse-on-ubuntu-22-04。