Ubuntu虚拟机怎么共享文件夹:先搞懂这3种映射方式
在Ubuntu虚拟机中实现磁盘文件夹共享映射,核心方案有VirtualBox增强功能、VMware共享文件夹和Samba网络映射三种,其中VirtualBox和VMware自带功能配置最简单,5分钟内就能完成双向访问。
很多人在Windows主机上跑Ubuntu虚拟机,卡在文件传输这一步,先说说三种方案各自的适用场景,你再对号入座。
- VirtualBox增强功能(Guest Additions):适合VirtualBox用户,支持双向剪贴板和拖拽,共享文件夹挂载在Ubuntu的
/media目录下。 - VMware共享文件夹(Shared Folders):适合VMware Workstation用户,通过
vmhgfs-fuse挂载,性能稳定,支持开机自动挂载。 - Samba网络映射:适合需要多设备同时访问的场景,比如局域网内手机和另一台电脑也要读写同一份文件,本质上是走网络协议而非虚拟化通道。
选择依据很简单:如果你只是让虚拟机里能访问Windows的某个目录,用前两种;如果你要在宿主机和虚拟机之间频繁双向读写大量文件,而且要跨设备共享,用Samba更灵活。
文末我会提一下虚拟机和宿主机之间互通最常见的权限陷阱,那地方是相当一部分人卡壳的根源。
VirtualBox共享文件夹设置步骤详解
VirtualBox的共享文件夹功能依赖增强功能驱动,分三步走。
第一步:安装增强功能
启动Ubuntu虚拟机后,在菜单栏选择“设备 → 安装增强功能”,Ubuntu桌面版会自动挂载光盘镜像,打开终端执行:
sudo apt update sudo apt install build-essential dkms linux-headers-$(uname -r) cd /media/用户名/VBOXADDITIONS_版本号 sudo ./VBoxLinuxAdditions.run
安装完成后重启虚拟机,这一步漏掉会导致后面挂载失败,而且报错信息容易误导人它可能提示“权限不足”,实际是内核模块没编出来。
第二步:配置共享文件夹
关闭虚拟机,在当前虚拟机设置里选“共享文件夹”,点击右侧加号:
- 文件夹路径:选择Windows宿主机上要共享的目录
- 共享名称:取个简短名称,比如
share,后面挂载要用 - 勾选“自动挂载”和“固定分配”
固定分配意味着这个共享永久生效,临时分配会在虚拟机重启后消失,多数的生产环境配置都选固定分配。
第三步:挂载并验证访问
启动虚拟机,打开终端执行:
sudo mkdir -p /mnt/share sudo mount -t vboxsf share /mnt/share
如果没有报错,说明挂载成功,检查一下:
df -h | grep share ls /mnt/share
能列出Windows目录里的文件就大功告成,如果想开机自动挂载,编辑/etc/fstab,追加一行:
share /mnt/share vboxsf defaults,uid=1000,gid=1000,dmode=775,fmode=664 0 0
uid=1000指的是Ubuntu第一个账户(通常是创建虚拟机时设置的用户),这样挂载后当前用户就能直接读写,不用每次都用sudo。
VirtualBox共享文件夹权限设置与故障排查
权限问题是VirtualBox共享方案里最耗时间的一环,我梳理了几类高频报错,你对照排查。
挂载时报错“No such device or address”
说明增强功能的vboxsf模块没加载,先手动加载:
sudo modprobe vboxsf
如果提示模块不存在,重新执行安装脚本:
sudo /etc/init.d/vboxadd setup sudo systemctl restart vboxadd-service
挂载成功后没写权限
终端输出ls -l /mnt/share会看到owner是root,这是VirtualBox默认行为,因为共享目录实际归属宿主机用户,按前面的fstab配置指定uid和gid即可,或者手动改:
sudo chmod 755 /mnt/share sudo chown 用户名:用户名 /mnt/share
在这个问题上有个行业共识:自动挂载的共享目录默认属主是root,不显式指定uid的话,任何Ubuntu本地用户都只能读不能写,这是虚拟机共享文件夹教程里被问得最多的点,也是初学者最容易卡住的地方。
中文文件名乱码
VirtualBox共享文件夹默认按UTF-8编码处理,如果Windows端的文件名用了GBK编码,Ubuntu里会显示乱码,解决方式是挂载时加入iocharset参数:
sudo mount -t vboxsf -o iocharset=utf8 share /mnt/share
这只能部分缓解,彻底的方案是在Windows端把区域设置改到“Beta版使用UTF-8”,或者在Windows里统一用英文文件名。
VMware与VirtualBox共享文件夹方案对比
VMware Workstation的共享文件夹机制和VirtualBox不太一样,VMware用vmhgfs-fuse实现用户态文件系统挂载,VirtualBox是内核模块直接挂载。
| 对比维度 | VMware共享文件夹 | VirtualBox共享文件夹 |
|---|---|---|
| 挂载方式 | vmhgfs-fuse(用户态FUSE) | vboxsf内核模块 |
| 默认挂载点 | /mnt/hgfs | /media/用户名 |
| 自动挂载配置 | fstab里写mount命令 | fstab里写vboxsf |
| 中文文件名支持 | 原生支持UTF-8 | 需要iocharset参数 |
| 内核升级后稳定性 | 依赖open-vm-tools更新 | 需要重新编译vboxsf |
如果你用VMware,步骤如下:
sudo apt install open-vm-tools open-vm-tools-desktop
然后在VMware菜单里选“虚拟机 → 设置 → 选项 → 共享文件夹”,添加Windows目录,Ubuntu里即可在/mnt/hgfs下看到:
ls /mnt/hgfs
VMware的vmhgfs-fuse一个显著特点是:它天然支持符号链接和权限继承,比VirtualBox的实现更接近原生文件系统,Ubuntu升级内核后,VirtualBox的vboxsf驱动经常需要重新编译,VMware这边open-vm-tools一般跟随内核走,影响较小。
Samba方式:跨设备文件夹共享的替代选择
如果你的Ubuntu虚拟机还装了容器服务或开发环境,需要让Windows宿主机访问虚拟机内的目录,这时反向共享就用到Samba了,如果你是双机互访,即Windows上的文件让Ubuntu虚拟机直接读取远程Windows共享目录,用mount -t cifs会比VirtualBox共享更省事,特别是共享目录还在NAS上时。
Ubuntu作为Samba服务器
在Ubuntu侧安装并配置Samba:
sudo apt install samba sudo mkdir -p /srv/samba/win_share sudo chown 用户名:用户名 /srv/samba/win_share
编辑/etc/samba/smb.conf,文件末尾追加:
[win_share]
path = /srv/samba/win_share
browseable = yes
writable = yes
valid users = 用户名
设置Samba账户密码(与系统密码可不同):
sudo smbpasswd -a 用户名 sudo systemctl restart smbd
Windows侧按Win+R输入\\虚拟机IP\win_share即可访问,想获得固定IP格式的访问路径,可以在虚拟机里把网络设置为桥接模式,然后在路由器上做IP和MAC绑定。
Ubuntu作为Samba客户端
反过来,如果Windows共享了一个目录,Ubuntu直接挂载CIFS:
sudo apt install cifs-utils sudo mkdir -p /mnt/win_share sudo mount -t cifs //windows主机IP/共享名 /mnt/win_share -o username=windows用户名,vers=3.0
需要输入Windows密码,按提示回车即可,注意vers=3.0是为了兼容Win10及以上系统的默认SMB协议版本,老旧系统可能要改成vers=2.0。
Q&A:Ubuntu虚拟机共享文件夹常见问题
问:Ubuntu虚拟机怎么共享文件夹,为什么我的VirtualBox里“共享文件夹”选项是灰色的?
灰色说明当前虚拟机面板里选择的是虚拟机而非正运行的系统,在管理器中选中对应的虚拟机条目,再打开“设置”才能配置共享文件夹,运行中的虚拟机里只能临时挂载,不能新增固定分配。
问:挂载共享文件夹时提示“mount: only root can do that”,怎么处理?
普通用户没有mount权限,这是Linux安全机制的基本设定,要么命令前加sudo,要么按fstab方式配置后由系统自动挂载。
问:VMware里设置了共享文件夹但/mnt/hgfs为空?
先确认是否已安装open-vm-tools和open-vm-tools-desktop,然后在虚拟机的可移动设备里重新连接一次共享文件夹驱动,终端里执行vmware-hgfsclient可以查看宿主机配置了哪些共享路径,如果什么都不输出说明VMware侧的配置没生效。
整体来看,VirtualBox和VMware自带的共享文件夹功能覆盖了绝大多数个人开发和生产场景,Samba则适合跨设备网络共享需求,核心是先确认你的虚拟机软件类型,再选对应方案,挂载成功后把权限和自动挂载配置好,后续使用就顺畅了,Ubuntu虚拟机共享文件夹本身不复杂,走一遍流程就能形成固定模板。