如何在VirtualBox中实现类似WSL的虚拟机客户机到主机的文件系统共享?
如何在VirtualBox中实现类似WSL的虚拟机客户机到主机的文件系统共享?
嘿,针对你想在VirtualBox里实现类似WSL的「客户机文件系统向主机开放」的需求,我整理了几个适配不同主机/客户机组合的可行方案,刚好匹配你提到的各种系统场景:
一、最通用的跨平台方案:SSHFS
这个方案几乎能覆盖你所有的主机(macOS/Windows)和客户机(Linux/FreeBSD/macOS/PureDarwin/ravynOS)组合,而且不需要折腾VirtualBox的特殊组件,上手门槛低:
- macOS/Linux主机:系统大多自带
sshfs工具(macOS如果没有,用包管理器装就行,比如brew install sshfs),挂载命令示例:sshfs 客户机用户名@客户机IP:/客户机目标路径 /本地挂载点 - Windows主机:安装WinFsp+SSHFS-Win工具,图形化界面操作很简单,输入客户机IP、用户名和密码就能把客户机文件夹挂载成本地盘符
- 优势:完全跨平台,只要客户机开启SSH服务就能用;对macOS/FreeBSD这类VirtualBox支持较弱的客户机特别友好
- 注意:主机访问客户机文件的性能开销完全在你能接受的范围内(毕竟你的核心需求是客户机本地操作快),延迟比原生共享稍高,但日常开发用完全没问题
二、VirtualBox自带反向共享(优先给Linux客户机用)
VirtualBox的共享文件夹通常是「主机→客户机」方向,但其实支持反向的「客户机→主机」共享,不过这个方案对Linux客户机支持最完善:
- 先在Linux客户机里安装VirtualBox Guest Additions(Debian/Ubuntu系直接装
virtualbox-guest-utils包即可) - 打开VirtualBox的客户机设置,添加共享文件夹,在「高级」选项里把共享方向改成客户机到主机
- 主机端挂载:
- Linux主机:用命令
mount -t vboxsf 共享文件夹名称 /本地挂载点 - macOS主机:用VirtualBox自带的
VBoxManage sharedfolder mount命令,或者通过VirtualBox菜单可视化操作 - Windows主机:会自动映射成网络驱动器,也可以手动在「网络」里找到VirtualBox共享访问
- Linux主机:用命令
- 缺点:对macOS/FreeBSD客户机支持有限——macOS客户机装Guest Additions非常麻烦(官方也不支持),FreeBSD需要额外折腾内核模块,所以优先给Linux客户机用
三、9p/virtio方案(适合技术控,针对特定系统)
你提到的9p和virtio,VirtualBox其实也能支持,不过需要手动配置,适合你这种愿意折腾内核开发的用户:
- Linux客户机:可以给客户机添加9p存储控制器,然后在客户机里运行9p服务器,主机作为客户端连接(Linux/macOS主机用
mount -t 9p命令挂载即可) - macOS客户机:你提到macOS Mojave之后有virtio的9p kext,可尝试在VirtualBox里启用virtio存储,然后在客户机里配置9p服务器,主机用9p客户端连接——不过这个需要折腾不少内核配置,适合有一定经验的用户
- 注意:你提到的virtiofs确实主要是「主机→客户机」方向,反向支持很差,不推荐用来实现客户机到主机的共享
四、特殊客户机的补充方案
- PureDarwin:本质是macOS变种,直接参考macOS客户机的方案(SSHFS最省心)
- ravynOS:基于FreeBSD,优先用SSHFS,也可以尝试安装FreeBSD版的VirtualBox Guest Additions来用反向共享
关于你的核心需求适配
你的核心诉求是客户机本地访问文件要接近原生性能,主机访问客户机文件可以接受开销——上面所有方案都能满足:
- 所有方案中,客户机都是直接访问自身的磁盘镜像文件,性能接近原生,完全符合你内核/内核扩展开发的需求
- 主机访问客户机文件的开销,不管是SSHFS还是VirtualBox反向共享,都在可接受范围内,不会影响你的开发流程
备注:内容来源于stack exchange,提问作者RandomDSdevel
相关产品推荐
相关产品推荐

